diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp index 4aecb8b8e7b47..17567a555db32 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 0000000000000..0213d1849b5ce --- /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