[flang-commits] [flang] [flang] Fix prescanner bug w/ empty macros in line continuation (PR #141274)
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Fri May 23 11:27:09 PDT 2025
https://github.com/klausler created https://github.com/llvm/llvm-project/pull/141274
When processing free form source line continuation, the prescanner treats empty keyword macros as if they were spaces or tabs. After skipping over them, however, there's code that only works if the skipped characters ended with an actual space or tab. If the last skipped item was an empty keyword macro's name, the last character of that name would end up being the first character of the continuation line. Fix.
>From a9e45ee33ba9e0663a91babc653a729f7a96912c Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Fri, 23 May 2025 11:21:32 -0700
Subject: [PATCH] [flang] Fix prescanner bug w/ empty macros in line
continuation
When processing free form source line continuation, the prescanner
treats empty keyword macros as if they were spaces or tabs. After
skipping over them, however, there's code that only works if the
skipped characters ended with an actual space or tab. If the
last skipped item was an empty keyword macro's name, the last
character of that name would end up being the first character of
the continuation line. Fix.
---
flang/lib/Parser/prescan.cpp | 2 +-
flang/test/Preprocessing/bug890.F90 | 6 ++++++
2 files changed, 7 insertions(+), 1 deletion(-)
create mode 100644 flang/test/Preprocessing/bug890.F90
diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp
index 3bc2ea0b37508..9aef0c9981e3c 100644
--- a/flang/lib/Parser/prescan.cpp
+++ b/flang/lib/Parser/prescan.cpp
@@ -1473,7 +1473,7 @@ const char *Prescanner::FreeFormContinuationLine(bool ampersand) {
GetProvenanceRange(p, p + 1),
"Character literal continuation line should have been preceded by '&'"_port_en_US);
}
- } else if (p > lineStart) {
+ } else if (p > lineStart && IsSpaceOrTab(p - 1)) {
--p;
} else {
insertASpace_ = true;
diff --git a/flang/test/Preprocessing/bug890.F90 b/flang/test/Preprocessing/bug890.F90
new file mode 100644
index 0000000000000..0ce2d8c3f1569
--- /dev/null
+++ b/flang/test/Preprocessing/bug890.F90
@@ -0,0 +1,6 @@
+! RUN: %flang -E %s 2>&1 | FileCheck %s
+!CHECK: subroutine sub()
+#define empty
+subroutine sub ( &
+ empty)
+end
More information about the flang-commits
mailing list