[flang-commits] [flang] [flang][OpenMP] Fix for crash of derived types in atomic constructs (PR #142627)

via flang-commits flang-commits at lists.llvm.org
Tue Jun 3 08:08:06 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-openmp

Author: None (NimishMishra)

<details>
<summary>Changes</summary>

Add check to err out if derived types are used on the LHS of atomic constructs.

Fixes https://github.com/llvm/llvm-project/issues/126451

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


2 Files Affected:

- (modified) flang/lib/Semantics/check-omp-structure.cpp (+3-1) 
- (modified) flang/test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90 (+9) 


``````````diff
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 76dfd40c6a62c..296941c6da4b2 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2735,7 +2735,9 @@ inline void OmpStructureChecker::ErrIfNonScalarAssignmentStmt(
           "statement"_err_en_US);
     if (v->Rank() != 0 ||
         (v->GetType().has_value() &&
-            v->GetType()->category() == common::TypeCategory::Character))
+            v->GetType()->category() == common::TypeCategory::Character) ||
+        (v->GetType().has_value() &&
+            v->GetType()->category() == common::TypeCategory::Derived))
       context_.Say(var.GetSource(),
           "Expected scalar variable "
           "on the LHS of atomic assignment "
diff --git a/flang/test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90 b/flang/test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90
index 505cbc48fef90..b611827f890fc 100644
--- a/flang/test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90
+++ b/flang/test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90
@@ -159,4 +159,13 @@ program sample
     !ERROR: Expected scalar variable on the LHS of atomic assignment statement
     !ERROR: Expected scalar expression on the RHS of atomic assignment statement
         l = r
+
+    !$omp atomic read
+    !ERROR: Expected scalar variable on the LHS of atomic assignment statement
+    !ERROR: Expected scalar variable of intrinsic type on RHS of atomic assignment statement
+        z = sample_type(2,2)
+
+    !$omp atomic write
+    !ERROR: Expected scalar variable on the LHS of atomic assignment statement
+        z = sample_type(2,2)
 end program

``````````

</details>


https://github.com/llvm/llvm-project/pull/142627


More information about the flang-commits mailing list