diff --git a/flang/lib/Semantics/pointer-assignment.cpp b/flang/lib/Semantics/pointer-assignment.cpp index 654c01856cfd4..23a64d05338be 100644 --- a/flang/lib/Semantics/pointer-assignment.cpp +++ b/flang/lib/Semantics/pointer-assignment.cpp @@ -154,6 +154,9 @@ bool PointerAssignmentChecker::CheckLeftHandSide(const SomeExpr &lhs) { } else if (evaluate::IsAssumedRank(lhs)) { Say("The left-hand side of a pointer assignment must not be an assumed-rank dummy argument"_err_en_US); return false; + } else if (evaluate::ExtractCoarrayRef(lhs)) { // F'2023 C1027 + Say("The left-hand side of a pointer assignment must not be coindexed"_err_en_US); + return false; } else { return true; } @@ -177,7 +180,7 @@ bool PointerAssignmentChecker::Check(const SomeExpr &rhs) { Say("An array section with a vector subscript may not be a pointer target"_err_en_US); return false; } - if (ExtractCoarrayRef(rhs)) { // C1026 + if (ExtractCoarrayRef(rhs)) { // F'2023 C1029 Say("A coindexed object may not be a pointer target"_err_en_US); return false; } diff --git a/flang/test/Semantics/assign02.f90 b/flang/test/Semantics/assign02.f90 index a40d204982b2f..6775506c21a3b 100644 --- a/flang/test/Semantics/assign02.f90 +++ b/flang/test/Semantics/assign02.f90 @@ -146,7 +146,7 @@ function f2() end end - ! C1026 (R1037) A data-target shall not be a coindexed object. + ! F'2023 C1029 A data-target shall not be a coindexed object. subroutine s10 real, target, save :: a[*] real, pointer :: b @@ -154,6 +154,17 @@ subroutine s10 b => a[1] end + ! F'2023 C1027 the LHS may not be coindexed + subroutine s11 + type t + real, pointer :: p + end type + type(t), save :: ca[*] + real, target :: x + !ERROR: The left-hand side of a pointer assignment must not be coindexed + ca[1]%p => x + end + end module m2