diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -462,6 +462,28 @@
   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;
diff --git a/flang/test/Semantics/OpenMP/map-clause.f90 b/flang/test/Semantics/OpenMP/map-clause.f90
new file mode 100644
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/map-clause.f90
@@ -0,0 +1,26 @@
+! 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