[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