Skip to content

Conversation

@klausler
Copy link
Contributor

@klausler klausler commented Mar 4, 2025

The LHS of a pointer assignment statement may not be coindexed.

The LHS of a pointer assignment statement may not be coindexed.
@llvmbot llvmbot added flang Flang issues not falling into any other category flang:semantics labels Mar 4, 2025
@llvmbot
Copy link
Member

llvmbot commented Mar 4, 2025

@llvm/pr-subscribers-flang-semantics

Author: Peter Klausler (klausler)

Changes

The LHS of a pointer assignment statement may not be coindexed.


Full diff: https://github.com/llvm/llvm-project/pull/129617.diff

2 Files Affected:

  • (modified) flang/lib/Semantics/pointer-assignment.cpp (+4-1)
  • (modified) flang/test/Semantics/assign02.f90 (+12-1)
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

@klausler klausler merged commit 706e7d8 into llvm:main Mar 10, 2025
14 checks passed
@klausler klausler deleted the fix049 branch March 10, 2025 20:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

flang:semantics flang Flang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants