From 7eab4e019205cfced90f06242a9afa23dfcaa70b Mon Sep 17 00:00:00 2001
From: Alan Zimmerman <alan.zimm@gmail.com>
Date: Wed, 1 May 2024 08:41:34 +0100
Subject: [PATCH] EPA: Widen stmtslist to include last semicolon

Closes #24754
---
 compiler/GHC/Parser.y                                  | 2 +-
 testsuite/tests/parser/should_compile/DumpSemis.stderr | 2 +-
 testsuite/tests/printer/Makefile                       | 5 +++++
 testsuite/tests/printer/Test24754.hs                   | 4 ++++
 testsuite/tests/printer/all.T                          | 1 +
 5 files changed, 12 insertions(+), 2 deletions(-)
 create mode 100644 testsuite/tests/printer/Test24754.hs

diff --git a/compiler/GHC/Parser.y b/compiler/GHC/Parser.y
index 050c696a0a47..f3f38f3cea8b 100644
--- a/compiler/GHC/Parser.y
+++ b/compiler/GHC/Parser.y
@@ -3444,7 +3444,7 @@ stmts :: { forall b. DisambECP b => PV (Located (OrdList AddEpAnn,[LStmt GhcPs (
                              [] -> return (sLZ $1 $> ((fst $ unLoc $1) `snocOL` (mj AnnSemi $2),snd $ unLoc $1))
                              (h:t) -> do
                                { h' <- addTrailingSemiA h (gl $2)
-                               ; return $ sL1 $1 (fst $ unLoc $1,h':t) }}
+                               ; return $ sLZ $1 $> (fst $ unLoc $1,h':t) }}
         | stmt                   { $1 >>= \ $1 ->
                                    return $ sL1 $1 (nilOL,[$1]) }
         | {- empty -}            { return $ noLoc (nilOL,[]) }
diff --git a/testsuite/tests/parser/should_compile/DumpSemis.stderr b/testsuite/tests/parser/should_compile/DumpSemis.stderr
index 12af0facf54d..015d64b51af1 100644
--- a/testsuite/tests/parser/should_compile/DumpSemis.stderr
+++ b/testsuite/tests/parser/should_compile/DumpSemis.stderr
@@ -856,7 +856,7 @@
                    (EpaSpan { DumpSemis.hs:22:10-30 })
                    (AnnList
                     (Just
-                     (EpaSpan { DumpSemis.hs:22:12-25 }))
+                     (EpaSpan { DumpSemis.hs:22:12-28 }))
                     (Just
                      (AddEpAnn AnnOpenC (EpaSpan { DumpSemis.hs:22:10 })))
                     (Just
diff --git a/testsuite/tests/printer/Makefile b/testsuite/tests/printer/Makefile
index 8b9e56cbe6d6..de55d7ae6ecb 100644
--- a/testsuite/tests/printer/Makefile
+++ b/testsuite/tests/printer/Makefile
@@ -851,3 +851,8 @@ DataDeclShort:
 Test24749:
 	$(CHECK_PPR)   $(LIBDIR) Test24749.hs
 	$(CHECK_EXACT) $(LIBDIR) Test24749.hs
+
+.PHONY: Test24754
+Test24754:
+	$(CHECK_PPR)   $(LIBDIR) Test24754.hs
+	$(CHECK_EXACT) $(LIBDIR) Test24754.hs
diff --git a/testsuite/tests/printer/Test24754.hs b/testsuite/tests/printer/Test24754.hs
new file mode 100644
index 000000000000..14c02e2a7f2b
--- /dev/null
+++ b/testsuite/tests/printer/Test24754.hs
@@ -0,0 +1,4 @@
+module Test24754 where
+
+eh1  =  try (do return r;) <|> (do
+                return r)
diff --git a/testsuite/tests/printer/all.T b/testsuite/tests/printer/all.T
index ce076aaa8744..d6ff2ff196f1 100644
--- a/testsuite/tests/printer/all.T
+++ b/testsuite/tests/printer/all.T
@@ -203,3 +203,4 @@ test('MatchPatComments', [ignore_stderr, req_ppr_deps], makefile_test, ['MatchPa
 test('Test24748', [ignore_stderr, req_ppr_deps], makefile_test, ['Test24748'])
 test('DataDeclShort', [ignore_stderr, req_ppr_deps], makefile_test, ['DataDeclShort'])
 test('Test24749', [ignore_stderr, req_ppr_deps], makefile_test, ['Test24749'])
+test('Test24754', [ignore_stderr, req_ppr_deps], makefile_test, ['Test24754'])
-- 
GitLab