[flang-commits] [flang] [flang][OpenMP] Implement `CheckReductionObjects` for all reduction c… (PR #118689)
Krzysztof Parzyszek via flang-commits
flang-commits at lists.llvm.org
Wed Dec 4 11:49:49 PST 2024
================
@@ -3052,26 +3145,25 @@ static bool IsReductionAllowedForType(
void OmpStructureChecker::CheckReductionTypeList(
const parser::OmpClause::Reduction &x) {
const auto &ompObjectList{std::get<parser::OmpObjectList>(x.v.t)};
- CheckIntentInPointerAndDefinable(
- ompObjectList, llvm::omp::Clause::OMPC_reduction);
+ SymbolSourceMap symbols;
+ GetSymbolsInObjectList(ompObjectList, symbols);
+
CheckReductionArraySection(ompObjectList);
// If this is a worksharing construct then ensure the reduction variable
// is not private in the parallel region that it binds to.
if (llvm::omp::nestedReduceWorkshareAllowedSet.test(GetContext().directive)) {
CheckSharedBindingInOuterContext(ompObjectList);
}
- SymbolSourceMap symbols;
- GetSymbolsInObjectList(ompObjectList, symbols);
for (auto &[symbol, source] : symbols) {
- if (IsProcedurePointer(*symbol)) {
- context_.Say(source,
- "A procedure pointer '%s' must not appear in a REDUCTION clause."_err_en_US,
- symbol->name());
- } else if (!IsReductionAllowedForType(x, DEREF(symbol->GetType()))) {
- context_.Say(source,
- "The type of '%s' is incompatible with the reduction operator."_err_en_US,
- symbol->name());
+ if (auto *type{symbol->GetType()}) {
+ if (!IsReductionAllowedForType(x, *type)) {
+ context_.Say(source,
+ "The type of '%s' is incompatible with the reduction operator."_err_en_US,
+ symbol->name());
+ }
+ } else {
+ assert(IsProcedurePointer(*symbol) && "Unexpected symbol properties");
----------------
kparzysz wrote:
This is checked elsewhere (in the part that is independent of the reduction operator/type). The assertion is here to catch cases where type is not available that are not procedure pointers.
https://github.com/llvm/llvm-project/pull/118689
More information about the flang-commits
mailing list