[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';