[flang-commits] [flang] [flang][semantics][OpenMP] store DSA using ultimate sym (PR #107002)
via flang-commits
flang-commits at lists.llvm.org
Mon Sep 2 08:19:27 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Tom Eccles (tblah)
<details>
<summary>Changes</summary>
Previously we tracked data sharing attributes by the symbol itself not by the ultimate symbol. When the private clause came first, subsequent uses of the symbol found a host-associated version instead of the ultimate symbol and so the check didn't consider them to be the same symbol. Always adding and checking for the ultimate symbol ensures that we have the same behaviour no matter the order of clauses.
Closes #<!-- -->78235
---
Full diff: https://github.com/llvm/llvm-project/pull/107002.diff
2 Files Affected:
- (modified) flang/lib/Semantics/resolve-directives.cpp (+2-2)
- (added) flang/test/Semantics/OpenMP/clause-order.f90 (+19)
``````````diff
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 4aecb8b8e7b479..17567a555db326 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -2514,14 +2514,14 @@ void OmpAttributeVisitor::CheckMultipleAppearances(
target = &details->symbol();
}
}
- if (HasDataSharingAttributeObject(*target) &&
+ if (HasDataSharingAttributeObject(target->GetUltimate()) &&
!WithMultipleAppearancesOmpException(symbol, ompFlag)) {
context_.Say(name.source,
"'%s' appears in more than one data-sharing clause "
"on the same OpenMP directive"_err_en_US,
name.ToString());
} else {
- AddDataSharingAttributeObject(*target);
+ AddDataSharingAttributeObject(target->GetUltimate());
if (privateDataSharingAttributeFlags.test(ompFlag)) {
AddPrivateDataSharingAttributeObjects(*target);
}
diff --git a/flang/test/Semantics/OpenMP/clause-order.f90 b/flang/test/Semantics/OpenMP/clause-order.f90
new file mode 100644
index 00000000000000..0213d1849b5ce2
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/clause-order.f90
@@ -0,0 +1,19 @@
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Ensure that checks on more than one data-sharing clause do not depend upon
+! the clause order
+
+PROGRAM main
+ INTEGER:: I, N1, N2
+
+ !ERROR: 'n1' appears in more than one data-sharing clause on the same OpenMP directive
+ !$OMP PARALLEL DO PRIVATE(N1) SHARED(N1)
+ DO I=1, 4
+ ENDDO
+ !$OMP END PARALLEL DO
+
+ !ERROR: 'n2' appears in more than one data-sharing clause on the same OpenMP directive
+ !$OMP PARALLEL DO SHARED(N2) PRIVATE(N2)
+ DO I=1, 4
+ ENDDO
+ !$OMP END PARALLEL DO
+END PROGRAM
``````````
</details>
https://github.com/llvm/llvm-project/pull/107002
More information about the flang-commits
mailing list