diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 79cdaccf1fbfe..68d7d9f0c53c4 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -139,16 +139,18 @@ void Prescanner::Statement() { SkipSpaces(); } } else { - // Compiler directive. Emit normalized sentinel. + // Compiler directive. Emit normalized sentinel, squash following spaces. EmitChar(tokens, '!'); ++at_, ++column_; for (const char *sp{directiveSentinel_}; *sp != '\0'; ++sp, ++at_, ++column_) { EmitChar(tokens, *sp); } - if (*at_ == ' ') { + if (*at_ == ' ' || *at_ == '\t') { EmitChar(tokens, ' '); - ++at_, ++column_; + while (*at_ == ' ' || *at_ == '\t') { + ++at_, ++column_; + } } tokens.CloseToken(); } diff --git a/flang/test/Parser/compiler-directives.f90 b/flang/test/Parser/compiler-directives.f90 index 88cfd0944faf0..67e8d5b292aa0 100644 --- a/flang/test/Parser/compiler-directives.f90 +++ b/flang/test/Parser/compiler-directives.f90 @@ -17,6 +17,7 @@ module m !dir$ integer !dir$ integer=64 !dir$ integer = 64 + !dir$ integer = 64 PROC(4) !dir$ optimize:1 !dir$ optimize : 1