[flang] Allow tab in fixed form compiler directives. Reformat C++.
Original-commit: flang-compiler/f18@59ba17cb2478bd0b0f4ed6084c424677c7b46371
Reviewed-on: https://github.com/flang-compiler/f18/pull/102
diff --git a/flang/lib/parser/grammar.h b/flang/lib/parser/grammar.h
index 3eaf180..d81d436 100644
--- a/flang/lib/parser/grammar.h
+++ b/flang/lib/parser/grammar.h
@@ -223,9 +223,6 @@
constexpr auto intConstantExpr = integer(constantExpr);
constexpr auto scalarIntConstantExpr = scalar(intConstantExpr);
-
-
-
// R501 program -> program-unit [program-unit]...
// This is the top-level production for the Fortran language.
constexpr StartNewSubprogram startNewSubprogram;
diff --git a/flang/lib/parser/openmp-grammar.h b/flang/lib/parser/openmp-grammar.h
index cf2d785..9e23346 100644
--- a/flang/lib/parser/openmp-grammar.h
+++ b/flang/lib/parser/openmp-grammar.h
@@ -15,7 +15,7 @@
#ifndef FORTRAN_PARSER_OPENMP_GRAMMAR_H_
#define FORTRAN_PARSER_OPENMP_GRAMMAR_H_
-// Top-level grammar specification for OpenMP.
+// Top-level grammar specification for OpenMP.
// See OpenMP-4.5-grammar.txt for documentation.
#include "basic-parsers.h"
@@ -91,7 +91,8 @@
// IF(directive-name-modifier: scalar-logical-expr)
TYPE_PARSER(construct<OmpIfClause>(
- maybe("PARALLEL"_tok >> pure(OmpIfClause::DirectiveNameModifier::Parallel) ||
+ maybe(
+ "PARALLEL"_tok >> pure(OmpIfClause::DirectiveNameModifier::Parallel) ||
"TARGET ENTER DATA"_tok >>
pure(OmpIfClause::DirectiveNameModifier::TargetEnterData) ||
"TARGET EXIT DATA"_tok >>
diff --git a/flang/lib/parser/parse-tree-visitor.h b/flang/lib/parser/parse-tree-visitor.h
index ed6161a..c846359 100644
--- a/flang/lib/parser/parse-tree-visitor.h
+++ b/flang/lib/parser/parse-tree-visitor.h
@@ -674,7 +674,6 @@
}
}
-
template<typename V>
void Walk(const OmpLinearClause::WithModifier &x, V &visitor) {
if (visitor.Pre(x)) {
@@ -684,8 +683,7 @@
visitor.Post(x);
}
}
-template<typename M>
-void Walk(OmpLinearClause::WithModifier &x, M &mutator) {
+template<typename M> void Walk(OmpLinearClause::WithModifier &x, M &mutator) {
if (mutator.Pre(x)) {
Walk(x.modifier, mutator);
Walk(x.names, mutator);
@@ -710,6 +708,5 @@
}
}
-
} // namespace Fortran::parser
#endif // FORTRAN_PARSER_PARSE_TREE_VISITOR_H_
diff --git a/flang/lib/parser/parsing.cc b/flang/lib/parser/parsing.cc
index 1647fe5..da399e6 100644
--- a/flang/lib/parser/parsing.cc
+++ b/flang/lib/parser/parsing.cc
@@ -15,8 +15,8 @@
#include "parsing.h"
#include "grammar.h"
#include "instrumented-parser.h"
-#include "openmp-grammar.h"
#include "message.h"
+#include "openmp-grammar.h"
#include "preprocessor.h"
#include "prescan.h"
#include "provenance.h"
diff --git a/flang/lib/parser/prescan.cc b/flang/lib/parser/prescan.cc
index 8f137de..9b67157 100644
--- a/flang/lib/parser/prescan.cc
+++ b/flang/lib/parser/prescan.cc
@@ -853,14 +853,17 @@
char sentinel[5], *sp{sentinel};
for (int col{2}; col < 6; ++col) {
char ch{*p++};
- if (ch == '\n' || ch == '\t') {
+ if (ch == '\n') {
return {};
}
+ if (ch == '\t') {
+ break;
+ }
if (ch != ' ') {
*sp++ = ToLowerCaseLetter(ch);
}
}
- if (*p != ' ' && *p != '0') {
+ if (*p != ' ' && *p != '\t' && *p != '0') {
return {};
}
*sp = '\0';