-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[flang][OpenMP] Skip invalid conditional compilation sentinels #126282
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
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 llvm#89560
@llvm/pr-subscribers-flang-parser @llvm/pr-subscribers-flang-openmp Author: Leandro Lupori (luporl) ChangesIn fixed form, an initial line can have an OpenMP conditional Fixes #89560 Full diff: https://github.com/llvm/llvm-project/pull/126282.diff 2 Files Affected:
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
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the patch. A. couple of questions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LG.
Thanks for the review @kiranchandramohan. |
…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 llvm#89560
…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 llvm#89560
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 #89560