summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladislav Zavialov <vlad.z.4096@gmail.com>2021-03-08 23:36:26 +0300
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-03-09 18:53:43 -0500
commitdf8e8ba267ffd7b8be0702bd64b8c39532359461 (patch)
treec6ab7d0c680f30a62d8859f69891e0b693b86186
parente9189745cea060c33263226a585f2b838045c813 (diff)
downloadhaskell-df8e8ba267ffd7b8be0702bd64b8c39532359461.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.
-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 234df36be9..9ab0ef2370 100644
--- a/compiler/GHC/Parser/PostProcess.hs
+++ b/compiler/GHC/Parser/PostProcess.hs
@@ -2670,7 +2670,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 $ PsError PsErrTupleSectionInPat [] l
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 21d66337e9..49a298c93f 100644
--- a/testsuite/tests/parser/should_fail/all.T
+++ b/testsuite/tests/parser/should_fail/all.T
@@ -189,3 +189,4 @@ test('RecordDotSyntaxFail10', normal, compile_fail, [''])
test('RecordDotSyntaxFail11', normal, compile_fail, [''])
test('RecordDotSyntaxFail12', normal, compile_fail, [''])
test('RecordDotSyntaxFail13', normal, compile_fail, [''])
+test('T19504', normal, compile_fail, [''])