[flang-commits] [flang] [flang][OpenMP] Treat ClassType as BoxType in COPYPRIVATE (PR #141844)

Krzysztof Parzyszek via flang-commits flang-commits at lists.llvm.org
Thu May 29 05:37:01 PDT 2025


https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/141844

>From 4da5be5562b65570db85163a17902eb0605ac9eb Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Wed, 28 May 2025 15:08:20 -0500
Subject: [PATCH] [flang][OpenMP] Treat ClassType as BoxType in COPYPRIVATE

This fixes the second problem reported in
https://github.com/llvm/llvm-project/issues/141481
---
 flang/lib/Lower/OpenMP/ClauseProcessor.cpp |  3 +++
 flang/test/Lower/OpenMP/copyprivate4.f90   | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+)
 create mode 100644 flang/test/Lower/OpenMP/copyprivate4.f90

diff --git a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
index 885871698c946..afbc77d48cb53 100644
--- a/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
+++ b/flang/lib/Lower/OpenMP/ClauseProcessor.cpp
@@ -743,6 +743,9 @@ void TypeInfo::typeScan(mlir::Type ty) {
   } else if (auto bty = mlir::dyn_cast<fir::BoxType>(ty)) {
     inBox = true;
     typeScan(bty.getEleTy());
+  } else if (auto cty = mlir::dyn_cast<fir::ClassType>(ty)) {
+    inBox = true;
+    typeScan(cty.getEleTy());
   } else if (auto cty = mlir::dyn_cast<fir::CharacterType>(ty)) {
     charLen = cty.getLen();
   } else if (auto hty = mlir::dyn_cast<fir::HeapType>(ty)) {
diff --git a/flang/test/Lower/OpenMP/copyprivate4.f90 b/flang/test/Lower/OpenMP/copyprivate4.f90
new file mode 100644
index 0000000000000..02fdbc71edc59
--- /dev/null
+++ b/flang/test/Lower/OpenMP/copyprivate4.f90
@@ -0,0 +1,18 @@
+!RUN: %flang_fc1 -emit-hlfir -fopenmp -o - %s 2>&1 | FileCheck %s
+
+!The second testcase from https://github.com/llvm/llvm-project/issues/141481
+
+!Check that we don't crash on this.
+
+!CHECK: omp.single copyprivate(%6#0 -> @_copy_class_ptr_rec__QFf01Tt : !fir.ref<!fir.class<!fir.ptr<!fir.type<_QFf01Tt>>>>) {
+!CHECK:   omp.terminator
+!CHECK: }
+
+subroutine f01
+  type t
+  end type
+  class(t), pointer :: tt
+
+!$omp single copyprivate(tt)
+!$omp end single
+end



More information about the flang-commits mailing list