[GHC] #13269: Changes in includes of `addCStub` do not cause recompilation of downstream modules.
#13269: Changes in includes of `addCStub` do not cause recompilation of downstream modules. -------------------------------------+------------------------------------- Reporter: | Owner: facundo.dominguez | Type: bug | Status: new Priority: normal | Milestone: Component: Template | Version: 8.0.1 Haskell | Keywords: inline-c | Operating System: Unknown/Multiple addCStub | Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: 13237 Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- Failing example: {{{ // header.h #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); return x + 1; } }}} {{{ -- A.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module A where import Language.Haskell.TH.Syntax foreign import ccall f :: Int -> IO Int do addCStub "#include \"header.h\"" addDependentFile "header.h" return [] }}} {{{ -- B.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module Main where import Language.Haskell.TH.Syntax import A do i <- runIO $ f 0 [d| fh = i |] main :: IO () main = print fh }}} {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [2 of 2] Compiling Main ( B.hs, B.o ) calling f(0) Linking B ... $ ./B 1 }}} Edit `header.h`: {{{ // header.h #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); - return x + 1; + return x + 2; } }}} Recompiling we can see that `B.hs` is not rebuilt. And executing the program still shows the old result. {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [header.h changed] Linking B ... $ ./B 1 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13269> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#13269: Changes in includes of addCStub do not cause recompilation of downstream modules. -------------------------------------+------------------------------------- Reporter: | Owner: facundo.dominguez | Type: bug | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: inline-c | addCStub Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: 13237 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Description changed by facundo.dominguez: @@ -63,1 +63,1 @@ - Recompiling we can see that `B.hs` is not rebuilt. And executing the + Recompiling we can see that `B.hs` is not rebuilt and executing the New description: Failing example: {{{ // header.h #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); return x + 1; } }}} {{{ -- A.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module A where import Language.Haskell.TH.Syntax foreign import ccall f :: Int -> IO Int do addCStub "#include \"header.h\"" addDependentFile "header.h" return [] }}} {{{ -- B.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module Main where import Language.Haskell.TH.Syntax import A do i <- runIO $ f 0 [d| fh = i |] main :: IO () main = print fh }}} {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [2 of 2] Compiling Main ( B.hs, B.o ) calling f(0) Linking B ... $ ./B 1 }}} Edit `header.h`: {{{ // header.h #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); - return x + 1; + return x + 2; } }}} Recompiling we can see that `B.hs` is not rebuilt and executing the program still shows the old result. {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [header.h changed] Linking B ... $ ./B 1 }}} -- -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13269#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#13269: Changes in includes of addCStub do not cause recompilation of downstream modules. -------------------------------------+------------------------------------- Reporter: | Owner: facundo.dominguez | Type: bug | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: inline-c | addCStub Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13237 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by facundo.dominguez): * related: 13237 => #13237 -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13269#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#13269: Changes in includes of addCStub do not cause recompilation of downstream modules. -------------------------------------+------------------------------------- Reporter: | Owner: facundo.dominguez | Type: bug | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: inline-c | addCStub addDependentFile Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13237 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by facundo.dominguez): * keywords: inline-c addCStub => inline-c addCStub addDependentFile @@ -3,1 +3,1 @@ - // header.h + // f.c @@ -23,2 +23,2 @@ - do addCStub "#include \"header.h\"" - addDependentFile "header.h" + do addCStub "#include \"f.c\"" + addDependentFile "f.c" @@ -52,1 +52,1 @@ - Edit `header.h`: + Edit `f.c`: @@ -54,1 +54,1 @@ - // header.h + // f.c @@ -67,1 +67,1 @@ - [1 of 2] Compiling A ( A.hs, A.o ) [header.h changed] + [1 of 2] Compiling A ( A.hs, A.o ) [f.c changed] New description: Failing example: {{{ // f.c #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); return x + 1; } }}} {{{ -- A.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module A where import Language.Haskell.TH.Syntax foreign import ccall f :: Int -> IO Int do addCStub "#include \"f.c\"" addDependentFile "f.c" return [] }}} {{{ -- B.hs {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE TemplateHaskell #-} module Main where import Language.Haskell.TH.Syntax import A do i <- runIO $ f 0 [d| fh = i |] main :: IO () main = print fh }}} {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [2 of 2] Compiling Main ( B.hs, B.o ) calling f(0) Linking B ... $ ./B 1 }}} Edit `f.c`: {{{ // f.c #include <stdio.h> int f(int x) { printf("calling f(%d)\n",x); - return x + 1; + return x + 2; } }}} Recompiling we can see that `B.hs` is not rebuilt and executing the program still shows the old result. {{{ $ ghc --make B.hs [1 of 2] Compiling A ( A.hs, A.o ) [f.c changed] Linking B ... $ ./B 1 }}} -- Comment: Perhaps it could be fixed by adding a hash of the files pointed with `addDependendFile` to the module interface file. nh2 proposed in #13237 adding a hash of the cpp output over the string given to `addCStub`. Note though, that this behavior can be experienced without `addCStub` if one replaces `A.hs` with {{{ -- A.hs {-# LANGUAGE ForeignFunctionInterface #-} module A where import Language.Haskell.TH.Syntax foreign import ccall f :: Int -> IO Int }}} and builds with: {{{ $ ghc --make B.hs f.c -fPIC }}} I don't have ideas to fix this case. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13269#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#13269: Changes in foreign code used in TH do not trigger recompilation -------------------------------------+------------------------------------- Reporter: Facundo | Owner: (none) DomÃnguez | Type: bug | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: inline-c | addCStub addDependentFile Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13237 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13269#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC