diff options
Diffstat (limited to 'flang/lib/Parser')
-rw-r--r-- | flang/lib/Parser/Fortran-parsers.cpp | 4 | ||||
-rw-r--r-- | flang/lib/Parser/parsing.cpp | 1 | ||||
-rw-r--r-- | flang/lib/Parser/prescan.cpp | 5 |
3 files changed, 8 insertions, 2 deletions
diff --git a/flang/lib/Parser/Fortran-parsers.cpp b/flang/lib/Parser/Fortran-parsers.cpp index fbe629a..d33a18f 100644 --- a/flang/lib/Parser/Fortran-parsers.cpp +++ b/flang/lib/Parser/Fortran-parsers.cpp @@ -1100,14 +1100,14 @@ TYPE_PARSER(construct<EquivalenceObject>(indirect(designator))) // R873 common-stmt -> // COMMON [/ [common-block-name] /] common-block-object-list // [[,] / [common-block-name] / common-block-object-list]... -TYPE_PARSER( +TYPE_PARSER(sourced( construct<CommonStmt>("COMMON" >> defaulted("/" >> maybe(name) / "/"), nonemptyList("expected COMMON block objects"_err_en_US, Parser<CommonBlockObject>{}), many(maybe(","_tok) >> construct<CommonStmt::Block>("/" >> maybe(name) / "/", nonemptyList("expected COMMON block objects"_err_en_US, - Parser<CommonBlockObject>{}))))) + Parser<CommonBlockObject>{})))))) // R874 common-block-object -> variable-name [( array-spec )] TYPE_PARSER(construct<CommonBlockObject>(name, maybe(arraySpec))) diff --git a/flang/lib/Parser/parsing.cpp b/flang/lib/Parser/parsing.cpp index 8a8c6ef..2df6881 100644 --- a/flang/lib/Parser/parsing.cpp +++ b/flang/lib/Parser/parsing.cpp @@ -85,6 +85,7 @@ const SourceFile *Parsing::Prescan(const std::string &path, Options options) { if (options.features.IsEnabled(LanguageFeature::OpenACC) || (options.prescanAndReformat && noneOfTheAbove)) { prescanner.AddCompilerDirectiveSentinel("$acc"); + prescanner.AddCompilerDirectiveSentinel("@acc"); } if (options.features.IsEnabled(LanguageFeature::OpenMP) || (options.prescanAndReformat && noneOfTheAbove)) { diff --git a/flang/lib/Parser/prescan.cpp b/flang/lib/Parser/prescan.cpp index 865c149..66e5b2c 100644 --- a/flang/lib/Parser/prescan.cpp +++ b/flang/lib/Parser/prescan.cpp @@ -147,6 +147,11 @@ void Prescanner::Statement() { directiveSentinel_[4] == '\0') { // CUDA conditional compilation line. condOffset = 5; + } else if (directiveSentinel_[0] == '@' && directiveSentinel_[1] == 'a' && + directiveSentinel_[2] == 'c' && directiveSentinel_[3] == 'c' && + directiveSentinel_[4] == '\0') { + // OpenACC conditional compilation line. + condOffset = 5; } if (condOffset && !preprocessingOnly_) { at_ += *condOffset, column_ += *condOffset; |