summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2021-03-08 23:36:26 +0300
committerBen Gamari <ben@well-typed.com>2021-04-06 10:40:14 -0400
commit4b638dda50a024a6361f0877aed6da0b5d4c604c (patch)
tree21dc4c3aa94c501c1baead56cb0b021603192760
parentad6531ac9d8f56773a37c3f8a3a70c75002adc3a (diff)
downloadhaskell-wip/backport-9.0-19504.tar.gz
Location for tuple section pattern error (#19504)wip/backport-9.0-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, [''])