From 3120021689a2a989c9b8f0f1b923b5d9585bd31b Mon Sep 17 00:00:00 2001 From: Eugene Epshteyn Date: Tue, 25 Nov 2025 09:49:37 -0500 Subject: [PATCH 1/2] [flang] Check for inappropriate symbols in ACC PRESENT Fixes #169487 --- flang/lib/Semantics/check-acc-structure.cpp | 46 ++++++++++++--------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/flang/lib/Semantics/check-acc-structure.cpp b/flang/lib/Semantics/check-acc-structure.cpp index 5e87b834edf7e..c47f3359c0ea2 100644 --- a/flang/lib/Semantics/check-acc-structure.cpp +++ b/flang/lib/Semantics/check-acc-structure.cpp @@ -712,28 +712,36 @@ void AccStructureChecker::CheckMultipleOccurrenceInDeclare( [&](const parser::Designator &designator) { if (const auto *name = parser::GetDesignatorNameIfDataRef(designator)) { - if (declareSymbols.contains(&name->symbol->GetUltimate())) { - if (declareSymbols[&name->symbol->GetUltimate()] == clause) { - context_.Warn(common::UsageWarning::OpenAccUsage, - GetContext().clauseSource, - "'%s' in the %s clause is already present in the same clause in this module"_warn_en_US, - name->symbol->name(), - parser::ToUpperCaseLetters( + if (!name->symbol) { + context_.Say(GetContext().clauseSource, + "'%s' is not an appropriate symbol for %s clause"_err_en_US, + name->ToString().c_str(), + parser::ToUpperCaseLetters( llvm::acc::getOpenACCClauseName(clause).str())); - } else { - context_.Say(GetContext().clauseSource, - "'%s' in the %s clause is already present in another " - "%s clause in this module"_err_en_US, - name->symbol->name(), - parser::ToUpperCaseLetters( - llvm::acc::getOpenACCClauseName(clause).str()), - parser::ToUpperCaseLetters( - llvm::acc::getOpenACCClauseName( - declareSymbols[&name->symbol->GetUltimate()]) - .str())); + } else { + if (declareSymbols.contains(&name->symbol->GetUltimate())) { + if (declareSymbols[&name->symbol->GetUltimate()] == clause) { + context_.Warn(common::UsageWarning::OpenAccUsage, + GetContext().clauseSource, + "'%s' in the %s clause is already present in the same clause in this module"_warn_en_US, + name->symbol->name(), + parser::ToUpperCaseLetters( + llvm::acc::getOpenACCClauseName(clause).str())); + } else { + context_.Say(GetContext().clauseSource, + "'%s' in the %s clause is already present in another " + "%s clause in this module"_err_en_US, + name->symbol->name(), + parser::ToUpperCaseLetters( + llvm::acc::getOpenACCClauseName(clause).str()), + parser::ToUpperCaseLetters( + llvm::acc::getOpenACCClauseName( + declareSymbols[&name->symbol->GetUltimate()]) + .str())); + } } + declareSymbols.insert({&name->symbol->GetUltimate(), clause}); } - declareSymbols.insert({&name->symbol->GetUltimate(), clause}); } }, [&](const parser::Name &name) { From 4fac9ec3c5a8958090d3af8a6db6bffb139c704c Mon Sep 17 00:00:00 2001 From: Eugene Epshteyn Date: Tue, 25 Nov 2025 09:56:51 -0500 Subject: [PATCH 2/2] clang-format --- flang/lib/Semantics/check-acc-structure.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/flang/lib/Semantics/check-acc-structure.cpp b/flang/lib/Semantics/check-acc-structure.cpp index c47f3359c0ea2..eda824f08e6e5 100644 --- a/flang/lib/Semantics/check-acc-structure.cpp +++ b/flang/lib/Semantics/check-acc-structure.cpp @@ -714,13 +714,14 @@ void AccStructureChecker::CheckMultipleOccurrenceInDeclare( parser::GetDesignatorNameIfDataRef(designator)) { if (!name->symbol) { context_.Say(GetContext().clauseSource, - "'%s' is not an appropriate symbol for %s clause"_err_en_US, - name->ToString().c_str(), - parser::ToUpperCaseLetters( - llvm::acc::getOpenACCClauseName(clause).str())); + "'%s' is not an appropriate symbol for %s clause"_err_en_US, + name->ToString().c_str(), + parser::ToUpperCaseLetters( + llvm::acc::getOpenACCClauseName(clause).str())); } else { if (declareSymbols.contains(&name->symbol->GetUltimate())) { - if (declareSymbols[&name->symbol->GetUltimate()] == clause) { + if (declareSymbols[&name->symbol->GetUltimate()] == + clause) { context_.Warn(common::UsageWarning::OpenAccUsage, GetContext().clauseSource, "'%s' in the %s clause is already present in the same clause in this module"_warn_en_US,