[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