[flang-commits] [flang] 8e2b4e5 - [flang] Support <name>=<integer> syntax in compiler directives
peter klausler via flang-commits
flang-commits at lists.llvm.org
Fri Jul 17 17:06:23 PDT 2020
Author: peter klausler
Date: 2020-07-17T17:05:38-07:00
New Revision: 8e2b4e50f27094b71840bdfc5b8ed7dbd4e85c2c
URL: https://github.com/llvm/llvm-project/commit/8e2b4e50f27094b71840bdfc5b8ed7dbd4e85c2c
DIFF: https://github.com/llvm/llvm-project/commit/8e2b4e50f27094b71840bdfc5b8ed7dbd4e85c2c.diff
LOG: [flang] Support <name>=<integer> syntax in compiler directives
Accept name=value as part of a !DIR$ compiler directive. These
are currently ignored in semantics, but we should recognize
more directive forms to facilitate testing. In due course,
these placeholding directive parsers will be replaced.
Reviewed By: sscalpone
Differential Revision: https://reviews.llvm.org/D84077
Added:
Modified:
flang/include/flang/Parser/dump-parse-tree.h
flang/include/flang/Parser/parse-tree.h
flang/lib/Parser/Fortran-parsers.cpp
flang/lib/Parser/unparse.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index 36e593eb3b78..02da3f53b44e 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -222,6 +222,7 @@ class ParseTreeDumper {
NODE(CommonStmt, Block)
NODE(parser, CompilerDirective)
NODE(CompilerDirective, IgnoreTKR)
+ NODE(CompilerDirective, NameValue)
NODE(parser, ComplexLiteralConstant)
NODE(parser, ComplexPart)
NODE(parser, ComponentArraySpec)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index d9ecebfc3fdd..4b34d2cd674c 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3211,8 +3211,12 @@ struct CompilerDirective {
TUPLE_CLASS_BOILERPLATE(IgnoreTKR);
std::tuple<std::list<const char *>, Name> t;
};
+ struct NameValue {
+ TUPLE_CLASS_BOILERPLATE(NameValue);
+ std::tuple<Name, std::optional<std::uint64_t>> t;
+ };
CharBlock source;
- std::variant<std::list<IgnoreTKR>, std::list<Name>> u;
+ std::variant<std::list<IgnoreTKR>, std::list<NameValue>> u;
};
// Legacy extensions
diff --git a/flang/lib/Parser/Fortran-parsers.cpp b/flang/lib/Parser/Fortran-parsers.cpp
index 3192781d4bcc..f46186323ada 100644
--- a/flang/lib/Parser/Fortran-parsers.cpp
+++ b/flang/lib/Parser/Fortran-parsers.cpp
@@ -1173,7 +1173,9 @@ constexpr auto ignore_tkr{
defaulted(parenthesized(some("tkr"_ch))), name))};
TYPE_PARSER(
beginDirective >> sourced(construct<CompilerDirective>(ignore_tkr) ||
- construct<CompilerDirective>("DIR$" >> many(name))) /
+ construct<CompilerDirective>("DIR$" >>
+ many(construct<CompilerDirective::NameValue>(
+ name, maybe("=" >> digitString64))))) /
endDirective)
TYPE_PARSER(extension<LanguageFeature::CrayPointer>(construct<BasedPointerStmt>(
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 99792cbf706f..3b95636fc3e5 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -1761,7 +1761,9 @@ class UnparseVisitor {
Word("!DIR$ IGNORE_TKR"); // emitted even if tkr list is empty
Walk(" ", tkr, ", ");
},
- [&](const std::list<Name> &names) { Walk("!DIR$ ", names, " "); },
+ [&](const std::list<CompilerDirective::NameValue> &names) {
+ Walk("!DIR$ ", names, " ");
+ },
},
x.u);
Put('\n');
@@ -1777,6 +1779,10 @@ class UnparseVisitor {
}
Walk(std::get<Name>(x.t));
}
+ void Unparse(const CompilerDirective::NameValue &x) {
+ Walk(std::get<Name>(x.t));
+ Walk("=", std::get<std::optional<std::uint64_t>>(x.t));
+ }
// OpenACC Directives & Clauses
void Unparse(const AccAtomicCapture &x) {
More information about the flang-commits
mailing list