[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