Include OverloadedRecordFields selectors in NameShape.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Thu, 23 Feb 2017 05:59:59 +0000 (21:59 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Thu, 23 Feb 2017 23:16:02 +0000 (15:16 -0800)
Summary:
Fixes #13323.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3175

compiler/backpack/NameShape.hs
testsuite/tests/backpack/should_compile/T13323.bkp [new file with mode: 0644]
testsuite/tests/backpack/should_compile/T13323.stderr [new file with mode: 0644]
testsuite/tests/backpack/should_compile/all.T

index 9817854..261fffb 100644 (file)
@@ -83,7 +83,7 @@ mkNameShape :: ModuleName -> [AvailInfo] -> NameShape
 mkNameShape mod_name as =
     NameShape mod_name as $ mkOccEnv $ do
         a <- as
-        n <- availName a : availNames a
+        n <- availName a : availNamesWithSelectors a
         return (occName n, n)
 
 -- | Given an existing 'NameShape', merge it with a list of 'AvailInfo's
diff --git a/testsuite/tests/backpack/should_compile/T13323.bkp b/testsuite/tests/backpack/should_compile/T13323.bkp
new file mode 100644 (file)
index 0000000..70a1ccf
--- /dev/null
@@ -0,0 +1,17 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+unit p where
+    signature A where
+        data A = A { foo :: Int }
+        data B = B { foo :: Bool }
+    module P where
+        import A
+        x :: A -> Int
+        x = foo
+unit q where
+    module A where
+        data A = A { foo :: Int }
+        data B = B { foo :: Bool }
+unit r where
+    dependency p[A=q:A]
+    module R where
+        import P
diff --git a/testsuite/tests/backpack/should_compile/T13323.stderr b/testsuite/tests/backpack/should_compile/T13323.stderr
new file mode 100644 (file)
index 0000000..3d6a510
--- /dev/null
@@ -0,0 +1,13 @@
+[1 of 3] Processing p
+  [1 of 2] Compiling A[sig]           ( p/A.hsig, nothing )
+  [2 of 2] Compiling P                ( p/P.hs, nothing )
+[2 of 3] Processing q
+  Instantiating q
+  [1 of 1] Compiling A                ( q/A.hs, T13323.out/q/A.o )
+[3 of 3] Processing r
+  Instantiating r
+  [1 of 1] Including p[A=q:A]
+    Instantiating p[A=q:A]
+    [1 of 2] Compiling A[sig]           ( p/A.hsig, T13323.out/p/p-HVmFlcYSefiK5n1aDP1v7x/A.o )
+    [2 of 2] Compiling P                ( p/P.hs, T13323.out/p/p-HVmFlcYSefiK5n1aDP1v7x/P.o )
+  [1 of 1] Compiling R                ( r/R.hs, T13323.out/r/R.o )
index 683d913..8f4ec3b 100644 (file)
@@ -47,3 +47,4 @@ test('bkp52', normal, backpack_compile, [''])
 
 test('T13149', expect_broken(13149), backpack_compile, [''])
 test('T13214', normal, backpack_compile, [''])
+test('T13323', normal, backpack_compile, [''])