summaryrefslogtreecommitdiff
path: root/testsuite/tests/rename
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2015-06-02 00:02:03 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2015-06-02 00:50:45 +0100
commit9b73cb16485f331d9dc1f37826c6d503e24a5b0b (patch)
treef5f5772dc844ed925af757c1b5cd08b8fa6bd88d /testsuite/tests/rename
parent11d8f84fd3237c3821c8f826716fc4c9adfccb8c (diff)
downloadhaskell-9b73cb16485f331d9dc1f37826c6d503e24a5b0b.tar.gz
Refactor the GlobalRdrEnv, fixing #7672
This patch started innocently enough, by deleting a single call from rnImportDecl, namely let gbl_env = mkGlobalRdrEnv (filterOut from_this_mod gres) The 'filterOut' makes no sense, and was the cause of #7672. But that little loose end led to into a twisty maze of little passages, all alike, which has taken me an unreasonably long time to straighten out. Happily, I think the result is really much better. In particular: * INVARIANT 1 of the GlobalRdrEnv type was simply not true: we had multiple GlobalRdrElts in a list with the same gre_name field. This kludgily implmented one form of shadowing. * Meanwhile, extendGlobalRdrEnvRn implemented a second form of shadowing, by deleting stuff from the GlobalRdrEnv. * In turn, much of this shadowing stuff depended on the Names of the Ids bound in the GHCi InteractiveContext being Internal names, even though the TyCons and suchlike all had External Names. Very confusing. So I have made the following changes * I re-established INVARIANT 1 of GlobalRdrEnv. As a result some strange code in RdrName.pickGREs goes away. * RnNames.extendGlobalRdrEnvRn now makes one call to deal with shadowing, where necessary, and another to extend the environment. It deals separately with duplicate bindings. The very complicated RdrName.extendGlobalRdrEnv becomes much simpler; we need to export the shadowing function, now called RdrName.shadowNames; and we can nuke RdrName.findLocalDupsRdrEnv altogether. RdrName Note [GlobalRdrEnv shadowing] summarises the shadowing story * The Names of the Ids bound in the GHCi interactive context are now all External. See Note [Interactively-bound Ids in GHCi] in HscTypes. * Names for Ids created by the debugger are now made by IfaceEnv.newInteractiveBinder. This fixes a lurking bug which was that the debugger was using mkNewUniqueSupply 'I' to make uniques, which does NOT guarantee a fresh supply of uniques on successive calls. * Note [Template Haskell ambiguity] in RnEnv shows that one TH-related error is reported lazily (on occurrences) when it might be better reported when extending the environment. In some (but not all) cases this was done before; but now it's uniformly at occurrences. In some ways it'd be better to report when extending the environment, but it's a tiresome test and the error is rare, so I'm leaving it at the lookup site for now, with the above Note. * A small thing: RnNames.greAvail becomes RdrName.availFromGRE, where it joins the dual RdrName.gresFromAvail.
Diffstat (limited to 'testsuite/tests/rename')
-rw-r--r--testsuite/tests/rename/should_compile/T1972.stderr24
-rw-r--r--testsuite/tests/rename/should_fail/T5533.stderr8
-rw-r--r--testsuite/tests/rename/should_fail/T7906.stderr8
-rw-r--r--testsuite/tests/rename/should_fail/rn_dup.stderr52
-rw-r--r--testsuite/tests/rename/should_fail/rnfail044.stderr14
5 files changed, 57 insertions, 49 deletions
diff --git a/testsuite/tests/rename/should_compile/T1972.stderr b/testsuite/tests/rename/should_compile/T1972.stderr
index 0f450fc023..e19b08eece 100644
--- a/testsuite/tests/rename/should_compile/T1972.stderr
+++ b/testsuite/tests/rename/should_compile/T1972.stderr
@@ -1,12 +1,12 @@
-
-T1972.hs:12:3: Warning:
- This binding for ‘name’ shadows the existing binding
- defined at T1972.hs:9:19
-
-T1972.hs:14:3: Warning:
- This binding for ‘mapAccumL’ shadows the existing bindings
- defined at T1972.hs:16:1
- imported from ‘Data.List’ at T1972.hs:7:1-16
- (and originally defined in ‘Data.Traversable’)
-
-T1972.hs:20:10: Warning: Defined but not used: ‘c’
+
+T1972.hs:12:3: warning:
+ This binding for ‘name’ shadows the existing binding
+ defined at T1972.hs:9:19
+
+T1972.hs:14:3: warning:
+ This binding for ‘mapAccumL’ shadows the existing bindings
+ imported from ‘Data.List’ at T1972.hs:7:1-16
+ (and originally defined in ‘Data.Traversable’)
+ defined at T1972.hs:16:1
+
+T1972.hs:20:10: warning: Defined but not used: ‘c’
diff --git a/testsuite/tests/rename/should_fail/T5533.stderr b/testsuite/tests/rename/should_fail/T5533.stderr
index 5d514685d4..2c8d761667 100644
--- a/testsuite/tests/rename/should_fail/T5533.stderr
+++ b/testsuite/tests/rename/should_fail/T5533.stderr
@@ -1,4 +1,4 @@
-
-T5533.hs:4:1:
- The type signature for ‘f2’ lacks an accompanying binding
- (You cannot give a type signature for a record selector or class method)
+
+T5533.hs:4:1: error:
+ The type signature for ‘f2’ lacks an accompanying binding
+ (The type signature must be given where ‘f2’ is declared)
diff --git a/testsuite/tests/rename/should_fail/T7906.stderr b/testsuite/tests/rename/should_fail/T7906.stderr
index 3f06d8b2fb..e2b3e13008 100644
--- a/testsuite/tests/rename/should_fail/T7906.stderr
+++ b/testsuite/tests/rename/should_fail/T7906.stderr
@@ -1,4 +1,4 @@
-
-T7906.hs:5:16:
- The INLINABLE pragma for ‘foo’ lacks an accompanying binding
- (You cannot give a INLINABLE pragma for a record selector or class method)
+
+T7906.hs:5:16: error:
+ The INLINABLE pragma for ‘foo’ lacks an accompanying binding
+ (The INLINABLE pragma must be given where ‘foo’ is declared)
diff --git a/testsuite/tests/rename/should_fail/rn_dup.stderr b/testsuite/tests/rename/should_fail/rn_dup.stderr
index 961e420ac7..db6767a635 100644
--- a/testsuite/tests/rename/should_fail/rn_dup.stderr
+++ b/testsuite/tests/rename/should_fail/rn_dup.stderr
@@ -1,22 +1,30 @@
-
-rn_dup.hs:9:10:
- Multiple declarations of ‘MkT’
- Declared at: rn_dup.hs:7:10
- rn_dup.hs:7:16
- rn_dup.hs:9:10
-
-rn_dup.hs:12:16:
- Multiple declarations of ‘rf’
- Declared at: rn_dup.hs:11:16
- rn_dup.hs:11:27
- rn_dup.hs:12:16
-
-rn_dup.hs:17:3:
- Multiple declarations of ‘CT’
- Declared at: rn_dup.hs:15:3
- rn_dup.hs:17:3
-
-rn_dup.hs:18:3:
- Multiple declarations of ‘f’
- Declared at: rn_dup.hs:16:3
- rn_dup.hs:18:3
+
+rn_dup.hs:9:10: error:
+ Multiple declarations of ‘MkT’
+ Declared at: rn_dup.hs:7:10
+ rn_dup.hs:9:10
+
+rn_dup.hs:9:10: error:
+ Multiple declarations of ‘MkT’
+ Declared at: rn_dup.hs:7:16
+ rn_dup.hs:9:10
+
+rn_dup.hs:12:16: error:
+ Multiple declarations of ‘rf’
+ Declared at: rn_dup.hs:11:16
+ rn_dup.hs:12:16
+
+rn_dup.hs:12:16: error:
+ Multiple declarations of ‘rf’
+ Declared at: rn_dup.hs:11:27
+ rn_dup.hs:12:16
+
+rn_dup.hs:17:3: error:
+ Multiple declarations of ‘CT’
+ Declared at: rn_dup.hs:15:3
+ rn_dup.hs:17:3
+
+rn_dup.hs:18:3: error:
+ Multiple declarations of ‘f’
+ Declared at: rn_dup.hs:16:3
+ rn_dup.hs:18:3
diff --git a/testsuite/tests/rename/should_fail/rnfail044.stderr b/testsuite/tests/rename/should_fail/rnfail044.stderr
index eef15b2209..4cfb3e4d23 100644
--- a/testsuite/tests/rename/should_fail/rnfail044.stderr
+++ b/testsuite/tests/rename/should_fail/rnfail044.stderr
@@ -1,7 +1,7 @@
-
-rnfail044.hs:5:12:
- Ambiguous occurrence ‘splitAt’
- It could refer to either ‘A.splitAt’, defined at rnfail044.hs:8:3
- or ‘Data.List.splitAt’,
- imported from ‘Prelude’ at rnfail044.hs:5:8
- (and originally defined in ‘GHC.List’)
+
+rnfail044.hs:5:12: error:
+ Ambiguous occurrence ‘splitAt’
+ It could refer to either ‘Data.List.splitAt’,
+ imported from ‘Prelude’ at rnfail044.hs:5:8
+ (and originally defined in ‘GHC.List’)
+ or ‘A.splitAt’, defined at rnfail044.hs:8:3