[flang-commits] [flang] [flang] Check for inappropriate symbols in ACC PRESENT (PR #169500)
Eugene Epshteyn via flang-commits
flang-commits at lists.llvm.org
Tue Nov 25 06:57:01 PST 2025
https://github.com/eugeneepshteyn updated https://github.com/llvm/llvm-project/pull/169500
>From 3120021689a2a989c9b8f0f1b923b5d9585bd31b Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
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 <eepshteyn at nvidia.com>
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,
More information about the flang-commits
mailing list