[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:07:23 PDT 2025
https://github.com/NimishMishra created https://github.com/llvm/llvm-project/pull/142627
Add checks to err out if derived types are used on the LHS of atomic constructs.
Fixes https://github.com/llvm/llvm-project/issues/126451
>From 2a33c0b7ae361b033a7be8d8b95d86c0285aa864 Mon Sep 17 00:00:00 2001
From: Nimish Mishra <neelam.nimish at gmail.com>
Date: Tue, 3 Jun 2025 20:33:50 +0530
Subject: [PATCH] [flang][OpenMP] Fix for crash of derived types in atomic
constructs
---
flang/lib/Semantics/check-omp-structure.cpp | 4 +++-
.../test/Semantics/OpenMP/omp-atomic-assignment-stmt.f90 | 9 +++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
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
More information about the flang-commits
mailing list