[flang-commits] [flang] 4befe65 - [flang][semantics][OpenMP] store DSA using ultimate sym (#107002)

via flang-commits flang-commits at lists.llvm.org
Tue Sep 3 02:19:25 PDT 2024


Author: Tom Eccles
Date: 2024-09-03T10:19:22+01:00
New Revision: 4befe65cf065a1be8bb8f30d76a3f45ea45aa63f

URL: https://github.com/llvm/llvm-project/commit/4befe65cf065a1be8bb8f30d76a3f45ea45aa63f
DIFF: https://github.com/llvm/llvm-project/commit/4befe65cf065a1be8bb8f30d76a3f45ea45aa63f.diff

LOG: [flang][semantics][OpenMP] store DSA using ultimate sym (#107002)

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.

The modified list is only used for this multiple clause check.

Closes #78235

Added: 
    flang/test/Semantics/OpenMP/clause-order.f90

Modified: 
    flang/lib/Semantics/resolve-directives.cpp

Removed: 
    


################################################################################
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


        


More information about the flang-commits mailing list