diff options
Diffstat (limited to 'flang/lib/Parser/parse-tree.cpp')
| -rw-r--r-- | flang/lib/Parser/parse-tree.cpp | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/flang/lib/Parser/parse-tree.cpp b/flang/lib/Parser/parse-tree.cpp index 8cbaa39..ad0016e 100644 --- a/flang/lib/Parser/parse-tree.cpp +++ b/flang/lib/Parser/parse-tree.cpp @@ -11,6 +11,7 @@  #include "flang/Common/indirection.h"  #include "flang/Parser/tools.h"  #include "flang/Parser/user-state.h" +#include "llvm/ADT/ArrayRef.h"  #include "llvm/Frontend/OpenMP/OMP.h"  #include "llvm/Support/raw_ostream.h"  #include <algorithm> @@ -430,4 +431,30 @@ const OmpClauseList &OmpDirectiveSpecification::Clauses() const {    }    return empty;  } + +static bool InitCharBlocksFromStrings(llvm::MutableArrayRef<CharBlock> blocks, +    llvm::ArrayRef<std::string> strings) { +  for (auto [i, n] : llvm::enumerate(strings)) { +    blocks[i] = CharBlock(n); +  } +  return true; +} + +// The names should have static storage duration. Keep these names +// in a sigle place. +llvm::ArrayRef<CharBlock> OmpCombinerExpression::Variables() { +  static std::string names[]{"omp_in", "omp_out"}; +  static CharBlock vars[std::size(names)]; + +  [[maybe_unused]] static bool init = InitCharBlocksFromStrings(vars, names); +  return vars; +} + +llvm::ArrayRef<CharBlock> OmpInitializerExpression::Variables() { +  static std::string names[]{"omp_orig", "omp_priv"}; +  static CharBlock vars[std::size(names)]; + +  [[maybe_unused]] static bool init = InitCharBlocksFromStrings(vars, names); +  return vars; +}  } // namespace Fortran::parser | 
