[flang-commits] [flang] [flang][OpenMP] Add semantic check for target update (PR #71305)
via flang-commits
flang-commits at lists.llvm.org
Mon Nov 6 10:55:21 PST 2023
https://github.com/shraiysh updated https://github.com/llvm/llvm-project/pull/71305
>From eb2f737afdd77d8958e975afa55444ee54bb95eb Mon Sep 17 00:00:00 2001
From: Shraiysh Vaishay <shraiysh.vaishay at amd.com>
Date: Sun, 5 Nov 2023 01:08:48 -0600
Subject: [PATCH] [flang][OpenMP] Add semantic check for target update
This patch adds the following semantic check for target update
construct.
```
A list item can only appear in a to or from clause, but not in both.
```
---
flang/lib/Semantics/check-omp-structure.cpp | 20 +++++++++++++++++++
.../test/Semantics/OpenMP/target-update01.f90 | 5 +++++
2 files changed, 25 insertions(+)
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 2054a13bd92e790..512a44ba77da16f 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -1401,6 +1401,26 @@ void OmpStructureChecker::CheckTargetUpdate() {
context_.Say(GetContext().directiveSource,
"At least one motion-clause (TO/FROM) must be specified on TARGET UPDATE construct."_err_en_US);
}
+ if (toClause && fromClause) {
+ SymbolSourceMap toSymbols, fromSymbols;
+ GetSymbolsInObjectList(
+ std::get<parser::OmpClause::To>(toClause->u).v, toSymbols);
+ GetSymbolsInObjectList(
+ std::get<parser::OmpClause::From>(fromClause->u).v, fromSymbols);
+ for (auto &[symbol, source] : toSymbols) {
+ auto fromSymbol = fromSymbols.find(symbol);
+ if (fromSymbol != fromSymbols.end()) {
+ context_.Say(source,
+ "A list item ('%s') can only appear in a TO or FROM clause, but not in both."_err_en_US,
+ symbol->name());
+ context_.Say(source, "'%s' appears in the TO clause."_because_en_US,
+ symbol->name());
+ context_.Say(fromSymbol->second,
+ "'%s' appears in the FROM clause."_because_en_US,
+ fromSymbol->first->name());
+ }
+ }
+ }
}
void OmpStructureChecker::Enter(
diff --git a/flang/test/Semantics/OpenMP/target-update01.f90 b/flang/test/Semantics/OpenMP/target-update01.f90
index a0728e52ba3d230..84dc60dcd75f5c1 100644
--- a/flang/test/Semantics/OpenMP/target-update01.f90
+++ b/flang/test/Semantics/OpenMP/target-update01.f90
@@ -13,4 +13,9 @@ subroutine foo(x)
!ERROR: At most one NOWAIT clause can appear on the TARGET UPDATE directive
!$omp target update to(x) nowait nowait
+ !ERROR: A list item ('x') can only appear in a TO or FROM clause, but not in both.
+ !BECAUSE: 'x' appears in the TO clause.
+ !BECAUSE: 'x' appears in the FROM clause.
+ !$omp target update to(x) from(x)
+
end subroutine
More information about the flang-commits
mailing list