[all-commits] [llvm/llvm-project] 3beee8: [flang][OpenMP] Fix declare reduction accessibilit...

Matt via All-commits all-commits at lists.llvm.org
Thu May 28 08:17:10 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3beee85e5244bc70fa32210d89634c0e53d2606d
      https://github.com/llvm/llvm-project/commit/3beee85e5244bc70fa32210d89634c0e53d2606d
  Author: Matt <MattPD at users.noreply.github.com>
  Date:   2026-05-28 (Thu, 28 May 2026)

  Changed paths:
    M flang/lib/Semantics/check-omp-structure.cpp
    M flang/lib/Semantics/mod-file.cpp
    M flang/lib/Semantics/resolve-names.cpp
    A flang/test/Semantics/OpenMP/declare-reduction-accessibility.f90
    A flang/test/Semantics/OpenMP/declare-reduction-default-private.f90
    A flang/test/Semantics/OpenMP/declare-reduction-modfile-private.f90
    A flang/test/Semantics/OpenMP/declare-reduction-public-regression.f90
    A flang/test/Semantics/OpenMP/declare-reduction-use-assoc.f90

  Log Message:
  -----------
  [flang][OpenMP] Fix declare reduction accessibility in module scope (#197078)

Fix four interacting issues with OpenMP declare reduction accessibility
when reductions are declared in Fortran modules:

1. Accessibility propagation (resolve-names.cpp): Reduction symbols like
`op.+` had no linkage to the corresponding `operator(+)` accessibility.
`ApplyDefaultAccess()` now reverse-maps mangled names to their Fortran
   identifiers and inherits operator/procedure accessibility.

2. USE-associated duplicate detection (resolve-names.cpp):
`FindSymbol()`
searched parent scopes and found USE-associated symbols, causing false
   "Duplicate definition" errors. Changed to scope-local `FindInScope()`
   with proper `UseDetails` handling that shadows USE symbols.

3. Module file serialization (mod-file.cpp): `PutUserReduction()` never
emitted accessibility, so PRIVATE was lost on module file round-trips.
Now emits `private::<identifier>` when no GenericDetails symbol already
   carries PRIVATE (avoiding duplicates with PutGeneric output).

4. Reduction clause checking (check-omp-structure.cpp):
   `CheckSymbolSupportsType()` scanned all module scopes ignoring
   accessibility. Now skips PRIVATE reductions in the module scope scan.

Also fixes a pre-existing bug in `MakeNameFromOperator()` where the
CharBlock lengths for OR, EQV, and NEQV included the null terminator
(6/7/8 instead of 5/6/7), causing silent mismatches in StringSwitch
comparisons.

Note: `CheckSymbolSupportsType` still scans all global module scopes
rather than only USE-reachable ones. This pre-existing over-broad lookup
is improved by the PRIVATE filter added here but a proper
scope-restricted resolution is left as future work.

Fixes #187415
Related: #192580

Assisted-by: Claude Opus 4.6.

Co-authored-by: Matt P. Dziubinski <matt-p.dziubinski at hpe.com>



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list