[flang-commits] [flang] b8271ec - [flang] accept character type in fir::changeTypeShape (#131892)
via flang-commits
flang-commits at lists.llvm.org
Wed Mar 19 02:01:28 PDT 2025
Author: jeanPerier
Date: 2025-03-19T10:01:24+01:00
New Revision: b8271ec8b3a19e4b7ba0a6c10af927e601380be8
URL: https://github.com/llvm/llvm-project/commit/b8271ec8b3a19e4b7ba0a6c10af927e601380be8
DIFF: https://github.com/llvm/llvm-project/commit/b8271ec8b3a19e4b7ba0a6c10af927e601380be8.diff
LOG: [flang] accept character type in fir::changeTypeShape (#131892)
There is no reason for character element type to be forbidden in this
helper.
The assert was firing in character pointer assignment in FORALL after
#130772 added a usage of this helper.
Added:
Modified:
flang/lib/Optimizer/Dialect/FIRType.cpp
flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90
Removed:
################################################################################
diff --git a/flang/lib/Optimizer/Dialect/FIRType.cpp b/flang/lib/Optimizer/Dialect/FIRType.cpp
index dc0bee9b060c9..f3f969ba401e5 100644
--- a/flang/lib/Optimizer/Dialect/FIRType.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRType.cpp
@@ -1326,7 +1326,8 @@ changeTypeShape(mlir::Type type,
})
.Default([&](mlir::Type t) -> mlir::Type {
assert((fir::isa_trivial(t) || llvm::isa<fir::RecordType>(t) ||
- llvm::isa<mlir::NoneType>(t)) &&
+ llvm::isa<mlir::NoneType>(t) ||
+ llvm::isa<fir::CharacterType>(t)) &&
"unexpected FIR leaf type");
if (newShape)
return fir::SequenceType::get(*newShape, t);
diff --git a/flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90 b/flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90
index cb5bff1020b3a..fc2ef5248e410 100644
--- a/flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90
+++ b/flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90
@@ -85,6 +85,21 @@ subroutine test_need_to_save_lhs_and_rhs(n, a)
! CHECK-NEXT: conflict: R/W
! CHECK-NEXT: run 1 save : forall/region_assign1/lhs
! CHECK-NEXT: run 2 evaluate: forall/region_assign1
+
+subroutine test_character_no_conflict(c)
+ type tc
+ character(10), pointer :: p
+ end type
+ character(10), target :: c(10)
+ integer(8) :: i
+ type(tc) a(10)
+ forall(i=1:10)
+ a(i)%p => c(i)
+ end forall
+end subroutine
+! CHECK: ------------ scheduling forall in _QMforall_pointersPtest_character_no_conflict ------------
+! CHECK-NEXT: run 1 evaluate: forall/region_assign1
+
end module
! End to end test provided for debugging purpose (not run by lit).
More information about the flang-commits
mailing list