[flang-commits] [flang] [flang][OpenMP] Skip invalid conditional compilation sentinels (PR #126282)
Leandro Lupori via flang-commits
flang-commits at lists.llvm.org
Fri Feb 7 10:14:22 PST 2025
https://github.com/luporl created https://github.com/llvm/llvm-project/pull/126282
In fixed form, an initial line can have an OpenMP conditional
compilation sentinel only if columns 3 through 5 have only
white space or numbers.
Fixes https://github.com/llvm/llvm-project/issues/89560
>From ce92ef5dcfa8f75137136d8be1bb72a4ff4a1257 Mon Sep 17 00:00:00 2001
From: Leandro Lupori <leandro.lupori at linaro.org>
Date: Fri, 7 Feb 2025 14:19:02 -0300
Subject: [PATCH] [flang][OpenMP] Skip invalid conditional compilation
sentinels
In fixed form, an initial line can have an OpenMP conditional
compilation sentinel only if columns 3 through 5 have only
white space or numbers.
Fixes https://github.com/llvm/llvm-project/issues/89560
---
flang/lib/Parser/prescan.cpp | 15 ++++++++++++++
flang/test/Parser/OpenMP/sentinels.f | 30 ++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp
index c5939a1e0b6c2c7..f479cc51871ef77 100644
--- a/flang/lib/Parser/prescan.cpp
+++ b/flang/lib/Parser/prescan.cpp
@@ -1432,6 +1432,21 @@ Prescanner::IsFixedFormCompilerDirectiveLine(const char *start) const {
}
*sp++ = ToLowerCaseLetter(*p);
}
+ // A fixed form OpenMP conditional compilation sentinel must satisfy the
+ // following criteria, for initial lines:
+ // - Columns 3 through 5 must have only white space or numbers.
+ // - Column 6 must be space or zero.
+ if (column == 3 && sentinel[0] == '$') {
+ const char *q{p};
+ for (int col{3}; col < 6; ++col, ++q) {
+ if (!IsSpaceOrTab(q) && !IsDecimalDigit(*q)) {
+ return std::nullopt;
+ }
+ }
+ if (*q != ' ' && *q != '0') {
+ return std::nullopt;
+ }
+ }
if (column == 6) {
if (*p == '0') {
++p;
diff --git a/flang/test/Parser/OpenMP/sentinels.f b/flang/test/Parser/OpenMP/sentinels.f
index 98d4bad19f6a274..f41ff13bcdd3479 100644
--- a/flang/test/Parser/OpenMP/sentinels.f
+++ b/flang/test/Parser/OpenMP/sentinels.f
@@ -39,4 +39,34 @@ subroutine sub(a, b)
C $ This is a comment line
c $ his is a comment line
* $ This is a comment line
+
+! Test non-space/non-number char in columns 3-5, for initial lines.
+! CHECK-NOT: "comment"
+c$x PRINT *, "comment"
+c$ + PRINT *, "comment"
+c$ * PRINT *, "comment"
+
+! Test non-space/non-number char in columns 3-5, for continuation lines.
+! CHECK: "msg1"
+! CHECK-NOT: "comment"
+c$ x PRINT *, "comment"
+c$1 & , "comment"
+c$ x & , "comment"
+c$ +& , "comment"
+
+c$ PRINT *, "msg1"
+c$1 & , "comment"
+c$ x & , "comment"
+c$ +& , "comment"
+
+! Test valid chars in initial and continuation lines.
+! CHECK: "msg2"
+! CHECK-SAME: "msg3"
+c$ 20 PRINT *, "msg2"
+c$ & , "msg3"
+
+! CHECK: "msg4"
+! CHECK-SAME: "msg5"
+c$ 0PRINT *, "msg4",
+c$ + "msg5"
end
More information about the flang-commits
mailing list