Skip to content

Commit 7c55dd8

Browse files
authored
[flang] Accept multiple spaces after compiler directive sentinel (llvm#76541)
The prescanner allows multiple spaces within a compiler directive, but not between the directive's sentinel (e.g., !DIR$) and the directive's first token. Fixes llvm#76537.
1 parent b29d632 commit 7c55dd8

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

flang/lib/Parser/prescan.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,18 @@ void Prescanner::Statement() {
139139
SkipSpaces();
140140
}
141141
} else {
142-
// Compiler directive. Emit normalized sentinel.
142+
// Compiler directive. Emit normalized sentinel, squash following spaces.
143143
EmitChar(tokens, '!');
144144
++at_, ++column_;
145145
for (const char *sp{directiveSentinel_}; *sp != '\0';
146146
++sp, ++at_, ++column_) {
147147
EmitChar(tokens, *sp);
148148
}
149-
if (*at_ == ' ') {
149+
if (*at_ == ' ' || *at_ == '\t') {
150150
EmitChar(tokens, ' ');
151-
++at_, ++column_;
151+
while (*at_ == ' ' || *at_ == '\t') {
152+
++at_, ++column_;
153+
}
152154
}
153155
tokens.CloseToken();
154156
}

flang/test/Parser/compiler-directives.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module m
1717
!dir$ integer
1818
!dir$ integer=64
1919
!dir$ integer = 64
20+
!dir$ integer = 64
2021
PROC(4)
2122
!dir$ optimize:1
2223
!dir$ optimize : 1

0 commit comments

Comments
 (0)