[flang-commits] [flang] [flang][OpenMP] Revert array element reduction lowering (PR #215617)

Sairudra More via flang-commits flang-commits at lists.llvm.org
Tue Aug 11 21:47:47 PDT 2026


================
@@ -903,32 +902,20 @@ static void bindEntryBlockArgs(lower::AbstractConverter &converter,
         // llvm::zip_equal(processedSyms, vars, args) asserts equal lengths.
         // The matching block argument is silently skipped below.
         processedSyms.push_back(nullptr);
-        processedObjects.push_back(nullptr);
         continue;
       }
       if (const auto *commonDet =
               sym->detailsIf<semantics::CommonBlockDetails>()) {
-        for (auto &mem : commonDet->objects()) {
-          processedSyms.push_back(&*mem);
-          processedObjects.push_back(&object);
-        }
+        llvm::transform(commonDet->objects(), std::back_inserter(processedSyms),
+                        [&](const auto &mem) { return &*mem; });
       } else {
         processedSyms.push_back(sym);
-        processedObjects.push_back(&object);
       }
     }
 
-    assert(processedSyms.size() == processedObjects.size());
-    for (auto [sym, var, arg, object] :
-         llvm::zip_equal(processedSyms, vars, args, processedObjects)) {
+    for (auto [sym, var, arg] : llvm::zip_equal(processedSyms, vars, args)) {
----------------
Saieiei wrote:

Could these task/taskloop cases where the same array participates in reduction and privatization be diagnosed for now? `bindEntryBlockArgs` binds `in_reduction` before `private`/`reduction`, so the later binding can replace the symbol binding established for the reduction object. The `%{{.*}}` checks also dont verify which block argument is used as the designator base. Would a temporary diagnostic be safer until the redesign?

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


More information about the flang-commits mailing list