Skip to content

Commit b8271ec

Browse files
authored
[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.
1 parent 7dbcdd5 commit b8271ec

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

flang/lib/Optimizer/Dialect/FIRType.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,8 @@ changeTypeShape(mlir::Type type,
13261326
})
13271327
.Default([&](mlir::Type t) -> mlir::Type {
13281328
assert((fir::isa_trivial(t) || llvm::isa<fir::RecordType>(t) ||
1329-
llvm::isa<mlir::NoneType>(t)) &&
1329+
llvm::isa<mlir::NoneType>(t) ||
1330+
llvm::isa<fir::CharacterType>(t)) &&
13301331
"unexpected FIR leaf type");
13311332
if (newShape)
13321333
return fir::SequenceType::get(*newShape, t);

flang/test/HLFIR/order_assignments/forall-pointer-assignment-scheduling.f90

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,21 @@ subroutine test_need_to_save_lhs_and_rhs(n, a)
8585
! CHECK-NEXT: conflict: R/W
8686
! CHECK-NEXT: run 1 save : forall/region_assign1/lhs
8787
! CHECK-NEXT: run 2 evaluate: forall/region_assign1
88+
89+
subroutine test_character_no_conflict(c)
90+
type tc
91+
character(10), pointer :: p
92+
end type
93+
character(10), target :: c(10)
94+
integer(8) :: i
95+
type(tc) a(10)
96+
forall(i=1:10)
97+
a(i)%p => c(i)
98+
end forall
99+
end subroutine
100+
! CHECK: ------------ scheduling forall in _QMforall_pointersPtest_character_no_conflict ------------
101+
! CHECK-NEXT: run 1 evaluate: forall/region_assign1
102+
88103
end module
89104

90105
! End to end test provided for debugging purpose (not run by lit).

0 commit comments

Comments
 (0)