void Post(const parser::EndLabel &endLabel) { CheckSourceLabel(endLabel.v); }
void Post(const parser::EorLabel &eorLabel) { CheckSourceLabel(eorLabel.v); }
+ void Post(const parser::OmpMapClause &x) {
+ const auto &ompObjList{std::get<parser::OmpObjectList>(x.t)};
+ for (const auto &ompObj : ompObjList.v) {
+ common::visit(
+ common::visitors{
+ [&](const parser::Designator &designator) {
+ if (const auto *name{GetDesignatorNameIfDataRef(designator)}) {
+ if (name->symbol &&
+ semantics::IsAssumedSizeArray(*name->symbol)) {
+ context_.Say(designator.source,
+ "Assumed-size whole arrays may not appear on the %s "
+ "clause"_err_en_US,
+ "MAP");
+ }
+ }
+ },
+ [&](const auto &name) {},
+ },
+ ompObj.u);
+ }
+ }
+
const parser::OmpClause *associatedClause{nullptr};
void SetAssociatedClause(const parser::OmpClause &c) {
associatedClause = &c;
--- /dev/null
+! RUN: %python %S/../test_errors.py %s %flang -fopenmp
+! Check OpenMP MAP clause validity. Section 5.8.3 OpenMP 5.2.
+
+subroutine sb(arr)
+ real(8) :: arr(*)
+ real :: a
+
+ !ERROR: Assumed-size whole arrays may not appear on the MAP clause
+ !$omp target map(arr)
+ do i = 1, 100
+ a = 3.14
+ enddo
+ !$omp end target
+
+ !$omp target map(arr(:))
+ do i = 1, 100
+ a = 3.14
+ enddo
+ !$omp end target
+
+ !$omp target map(arr(3:5))
+ do i = 1, 100
+ a = 3.14
+ enddo
+ !$omp end target
+end subroutine