The problem was that because the interface hadn't changed, we were
re-using the old ModIface. Unfortunately the ModIface contains the
GlobalRdrEnv for the module, and that *had* changed. The fix is to
put the new GlobalRdrEnv in the ModIface even if the interface has not
otherwise changed.
ModIface is not really the right place for the GlobalRdrEnv, but
neither is ModDetails, so we should think about a better way to do
this.
; dumpIfSet_dyn dflags Opt_D_dump_hi "FINAL INTERFACE"
(pprModIface new_iface)
- ; return (new_iface, no_change_at_all) }
+ -- bug #1617: on reload we weren't updating the PrintUnqualified
+ -- correctly. This stems from the fact that the interface had
+ -- not changed, so addVersionInfo returns the old ModIface
+ -- with the old GlobalRdrEnv (mi_globals).
+ ; let final_iface = new_iface{ mi_globals = Just rdr_env }
+
+ ; return (final_iface, no_change_at_all) }
where
r1 `le_rule` r2 = ifRuleName r1 <= ifRuleName r2
i1 `le_inst` i2 = ifDFun i1 `le_occ` ifDFun i2