[flang-commits] [flang] [flang][OpenMP]Add symbls omp_in, omp_out and omp_priv in DECLARE RED… (PR #129908)

Mats Petersson via flang-commits flang-commits at lists.llvm.org
Mon Mar 10 06:59:23 PDT 2025


================
@@ -1761,11 +1770,26 @@ void OmpVisitor::ProcessReductionSpecifier(
   // Creating a new scope in case the combiner expression (or clauses) use
   // reerved identifiers, like "omp_in". This is a temporary solution until
   // we deal with these in a more thorough way.
-  PushScope(Scope::Kind::OtherConstruct, nullptr);
-  Walk(std::get<parser::OmpTypeNameList>(spec.t));
-  Walk(std::get<std::optional<parser::OmpReductionCombiner>>(spec.t));
-  Walk(clauses);
-  PopScope();
+  auto &typeList = std::get<parser::OmpTypeNameList>(spec.t);
+  for (auto &t : typeList.v) {
+    PushScope(Scope::Kind::OtherConstruct, nullptr);
+    BeginDeclTypeSpec();
+    // We need to walk t.u because Walk(t) does it's own BeginDeclTypeSpec.
+    Walk(t.u);
+
+    auto *typeSpec = GetDeclTypeSpec();
+    assert(typeSpec && "We should have a type here");
+    const parser::CharBlock ompVarNames[] = {
+        {"omp_in", 6}, {"omp_out", 7}, {"omp_priv", 8}};
----------------
Leporacanthicus wrote:

There is one test, flang/test/Parser/OpenMP/metadirective-dirspec.f90 that has multiple types, I have some more comprehensive tests when more functionality has been implemented (being worked on now)

- Multiple separate declarations with the same name (not supported in this version of the code).
- When we store the type list in the symbol details, we need to test that those are indeed stored correctly.
- Also need tests that cover multiple types on operators (+, *, etc).

https://github.com/llvm/llvm-project/pull/129908


More information about the flang-commits mailing list