[GHC] #10333: hs-boot modification doesn't induce recompilation

#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: GHC accepts Unknown/Multiple | invalid program Test Case: | Blocked By: Blocking: | Related Tickets: Differential Revisions: | -------------------------------------+------------------------------------- Consider these modules: X.hs-boot {{{ module X where }}} Y.hs {{{ module Y where import {-# SOURCE #-} X data T = T data S = S T }}} X.hs {{{ module X where import Y }}} `ghc --make Y.hs` will compile fine. Now, modify `X.hs-boot` to add a `data T` (which will cause an ambiguous identifier error in Y.hx`. Run `ghc --make Y.hs` and nothing happens! (You might also notice something else a bit funny, which is that `X.hs` gets compiled, even though it's not directly in the import chain of Y. I think this might be intentional but I'm not sure.) Discovered this while poking around #10182. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Description changed by ezyang: Old description:
Consider these modules:
X.hs-boot {{{ module X where }}}
Y.hs {{{ module Y where import {-# SOURCE #-} X data T = T data S = S T }}}
X.hs {{{ module X where import Y }}}
`ghc --make Y.hs` will compile fine. Now, modify `X.hs-boot` to add a `data T` (which will cause an ambiguous identifier error in Y.hx`. Run `ghc --make Y.hs` and nothing happens!
(You might also notice something else a bit funny, which is that `X.hs` gets compiled, even though it's not directly in the import chain of Y. I think this might be intentional but I'm not sure.)
Discovered this while poking around #10182.
New description: Consider these modules: X.hs-boot {{{ module X where }}} Y.hs {{{ module Y where import {-# SOURCE #-} X data T = T data S = S T }}} X.hs {{{ module X where import Y }}} `ghc --make Y.hs` will compile fine. Now, modify `X.hs-boot` to add a `data T` (which will cause an ambiguous identifier error in `Y.hx`. Run `ghc --make Y.hs` and nothing happens! (You might also notice something else a bit funny, which is that `X.hs` gets compiled, even though it's not directly in the import chain of Y. I think this might be intentional but I'm not sure.) Discovered this while poking around #10182. -- -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

You might also notice something else a bit funny, which is that X.hs gets compiled, even though it's not directly in the import chain of Y. I
#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by ezyang): I've diagnosed why this is occurring. `GhcMake` does some fancy business to determine if an object is stable. Essentially, object stability is a timestamped based check which tries to let `GhcMake` avoid recompiling source files which didn't change at all. However, stability is computed on a **per module name** basis, preferentially checking to see if `hs` files have been updated. This means that if you modify an `hs-boot` file but not the `hs` file, GHC will still consider it "stable" because the stability check was done on `hs`; and will proceed to tell the one-shot compiler that the file was not modified. I'm not sure what the correct solution to this problem is. think this might be intentional but I'm not sure. This is because there is explicit logic in `GhcMake` to make this be the case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10333: hs-boot modification doesn't induce recompilation
-------------------------------------+-------------------------------------
Reporter: ezyang | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.11
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC accepts | Unknown/Multiple
invalid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by Edward Z. Yang

#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by ezyang): Related: #11013 -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: ezyang Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by ezyang): * owner: => ezyang -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: ezyang Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: hs-boot Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by simonpj): * keywords: => hs-boot -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC