summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2021-03-08 23:36:26 +0300
committerBen Gamari <ben@smart-cactus.org>2021-04-07 18:37:46 -0400
commit5571b3f86cc92212d6f1ab0d39fc72c638c92409 (patch)
tree7fa81685f0a59e825a4352239bd2643d1104dc2c
parentee5338ea50796135833316a24ec2a18c4725ca21 (diff)
downloadhaskell-5571b3f86cc92212d6f1ab0d39fc72c638c92409.tar.gz
Location for tuple section pattern error (#19504)
This fixes a regression that led to loss of location information in error messages about the use of tuple sections in patterns. (cherry picked from commit df8e8ba267ffd7b8be0702bd64b8c39532359461)
-rw-r--r--compiler/GHC/Parser/PostProcess.hs4
-rw-r--r--testsuite/tests/parser/should_fail/T19504.hs3
-rw-r--r--testsuite/tests/parser/should_fail/T19504.stderr2
-rw-r--r--testsuite/tests/parser/should_fail/all.T1
4 files changed, 9 insertions, 1 deletions
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs
index 88e3d04928..8df4b4bd2e 100644
--- a/compiler/GHC/Parser/PostProcess.hs
+++ b/compiler/GHC/Parser/PostProcess.hs
@@ -3052,7 +3052,9 @@ mkSumOrTuplePat l boxity (Tuple ps) = do
return $ L l (PatBuilderPat (TuplePat noExtField ps' boxity))
where
toTupPat :: Located (Maybe (Located (PatBuilder GhcPs))) -> PV (LPat GhcPs)
- toTupPat (L l p) = case p of
+ -- Ignore the element location so that the error message refers to the
+ -- entire tuple. See #19504 (and the discussion) for details.
+ toTupPat (L _ p) = case p of
Nothing -> addFatalError l (text "Tuple section in pattern context")
Just p' -> checkLPat p'
diff --git a/testsuite/tests/parser/should_fail/T19504.hs b/testsuite/tests/parser/should_fail/T19504.hs
new file mode 100644
index 0000000000..033f13e4db
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T19504.hs
@@ -0,0 +1,3 @@
+module T19504 where
+
+error_notLocated = (\ (0, ) -> (0, undefined))
diff --git a/testsuite/tests/parser/should_fail/T19504.stderr b/testsuite/tests/parser/should_fail/T19504.stderr
new file mode 100644
index 0000000000..9d37ba22a0
--- /dev/null
+++ b/testsuite/tests/parser/should_fail/T19504.stderr
@@ -0,0 +1,2 @@
+
+T19504.hs:3:23: error: Tuple section in pattern context
diff --git a/testsuite/tests/parser/should_fail/all.T b/testsuite/tests/parser/should_fail/all.T
index 9142eb0393..2467e3728e 100644
--- a/testsuite/tests/parser/should_fail/all.T
+++ b/testsuite/tests/parser/should_fail/all.T
@@ -173,3 +173,4 @@ test('T18251c', normal, compile_fail, [''])
test('T18251d', normal, compile_fail, [''])
test('T18251e', normal, compile_fail, [''])
test('T18251f', normal, compile_fail, [''])
+test('T19504', normal, compile_fail, [''])