
#10965: GHC Panic on import with 'OPTIONS_GHC -fobject-code -O' ---------------------------------+-------------------------------------- Reporter: Orome | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1-rc2 Resolution: | Keywords: Operating System: MacOS X | Architecture: x86_64 (amd64) Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #10549 | Differential Rev(s): Wiki Page: | ---------------------------------+-------------------------------------- Comment (by rwbarton): The contents of the module aren't relevant, this module exhibits the same panic. {{{ {-# OPTIONS_GHC -fobject-code -O #-} f :: String -> String f = id }}} The difference is that this module has `-fobject-code`. `checkOptLevel` disallows `-O`, if the target is `HscInterpreted`. That was the fix for #10549. But here the target is `HscAsm`. But somewhere later the target must get set to `HscInterpreted`, as evidenced by the output {{{ [1 of 1] Compiling Main ( G.hs, interpreted ) }}} and the fact that the module contains breakpoints. (So as another issue, `{-# OPTIONS_GHC -fobject-code #-}` doesn't actually work. Seems it hasn't worked since at least 7.8.) Aha, found it! {{{ upsweep_mod hsc_env old_hpt (stable_obj, stable_bco) summary mod_index nmods = ... -- We're using the dflags for this module now, obtained by -- applying any options in its LANGUAGE & OPTIONS_GHC pragmas. dflags = ms_hspp_opts summary prevailing_target = hscTarget (hsc_dflags hsc_env) local_target = hscTarget dflags -- If OPTIONS_GHC contains -fasm or -fllvm, be careful that -- we don't do anything dodgy: these should only work to change -- from -fllvm to -fasm and vice-versa, otherwise we could -- end up trying to link object code to byte code. target = if prevailing_target /= local_target && (not (isObjectTarget prevailing_target) || not (isObjectTarget local_target)) then prevailing_target else local_target -- store the corrected hscTarget into the summary summary' = summary{ ms_hspp_opts = dflags { hscTarget = target } } ... }}} Assuming this stuff about linking object code and byte code is still relevant, I guess we should call `checkNewDynFlags` on `dflags { hscTarget = target }`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10965#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler