@@ -135,25 +135,31 @@ subroutine char_explicit_cst(n)
135
135
subroutine char_explicit_dyn (n , l1 , l2 )
136
136
integer :: n, l1, l2
137
137
character (l1), allocatable :: scalar
138
- ! CHECK-DAG: %[[l1:.*]] = fir.load %arg1 : !fir.ref<i32>
139
- ! CHECK-DAG: %[[sBoxAddr:.*]] = fir.alloca !fir.box<!fir.heap<!fir.char<1,?>>> {{{.*}}uniq_name = "_QFchar_explicit_dynEscalar"}
140
- ! CHECK-DAG: %[[sNullAddr:.*]] = fir.zero_bits !fir.heap<!fir.char<1,?>>
141
- ! CHECK-DAG: %[[sInitBox:.*]] = fir.embox %[[sNullAddr]] typeparams %[[l1]] : (!fir.heap<!fir.char<1,?>>, i32) -> !fir.box<!fir.heap<!fir.char<1,?>>>
142
- ! CHECK-DAG: fir.store %[[sInitBox]] to %[[sBoxAddr]] : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
143
-
144
- character (l2), allocatable :: array(:)
145
- ! CHECK-DAG: %[[l2:.*]] = fir.load %arg2 : !fir.ref<i32>
146
- ! CHECK-DAG: %[[aBoxAddr:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>> {{{.*}}uniq_name = "_QFchar_explicit_dynEarray"}
147
- ! CHECK-DAG: %[[aNullAddr:.*]] = fir.zero_bits !fir.heap<!fir.array<?x!fir.char<1,?>>>
148
- ! CHECK-DAG: %[[aNullShape:.*]] = fir.shape %c0{{.*}} : (index) -> !fir.shape<1>
149
- ! CHECK-DAG: %[[aInitBox:.*]] = fir.embox %[[aNullAddr]](%[[aNullShape]]) typeparams %[[l2]] : (!fir.heap<!fir.array<?x!fir.char<1,?>>>, !fir.shape<1>, i32) -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>
150
- ! CHECK-DAG: fir.store %[[aInitBox]] to %[[aBoxAddr]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
151
- allocate (scalar, array(20 ))
138
+ ! CHECK: %[[sBoxAddr:.*]] = fir.alloca !fir.box<!fir.heap<!fir.char<1,?>>> {{{.*}}uniq_name = "_QFchar_explicit_dynEscalar"}
139
+ ! CHECK: %[[raw_l1:.*]] = fir.load %arg1 : !fir.ref<i32>
140
+ ! CHECK: %[[c0_i32:.*]] = arith.constant 0 : i32
141
+ ! CHECK: %[[cmp1:.*]] = arith.cmpi sgt, %[[raw_l1]], %[[c0_i32]] : i32
142
+ ! CHECK: %[[l1:.*]] = select %[[cmp1]], %[[raw_l1]], %[[c0_i32]] : i32
143
+ ! CHECK: %[[sNullAddr:.*]] = fir.zero_bits !fir.heap<!fir.char<1,?>>
144
+ ! CHECK: %[[sInitBox:.*]] = fir.embox %[[sNullAddr]] typeparams %[[l1]] : (!fir.heap<!fir.char<1,?>>, i32) -> !fir.box<!fir.heap<!fir.char<1,?>>>
145
+ ! CHECK: fir.store %[[sInitBox]] to %[[sBoxAddr]] : !fir.ref<!fir.box<!fir.heap<!fir.char<1,?>>>>
146
+
147
+ character (l2), allocatable :: zarray(:)
148
+ ! CHECK: %[[aBoxAddr:.*]] = fir.alloca !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>> {{{.*}}uniq_name = "_QFchar_explicit_dynEzarray"}
149
+ ! CHECK: %[[raw_l2:.*]] = fir.load %arg2 : !fir.ref<i32>
150
+ ! CHECK: %[[c0_i32_2:.*]] = arith.constant 0 : i32
151
+ ! CHECK: %[[cmp2:.*]] = arith.cmpi sgt, %[[raw_l2]], %[[c0_i32_2]] : i32
152
+ ! CHECK: %[[l2:.*]] = select %[[cmp2]], %[[raw_l2]], %[[c0_i32_2]] : i32
153
+ ! CHECK: %[[aNullAddr:.*]] = fir.zero_bits !fir.heap<!fir.array<?x!fir.char<1,?>>>
154
+ ! CHECK: %[[aNullShape:.*]] = fir.shape %c0{{.*}} : (index) -> !fir.shape<1>
155
+ ! CHECK: %[[aInitBox:.*]] = fir.embox %[[aNullAddr]](%[[aNullShape]]) typeparams %[[l2]] : (!fir.heap<!fir.array<?x!fir.char<1,?>>>, !fir.shape<1>, i32) -> !fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>
156
+ ! CHECK: fir.store %[[aInitBox]] to %[[aBoxAddr]] : !fir.ref<!fir.box<!fir.heap<!fir.array<?x!fir.char<1,?>>>>>
157
+ allocate (scalar, zarray(20 ))
152
158
! CHECK-NOT: AllocatableInitCharacter
153
159
! CHECK: AllocatableAllocate
154
160
! CHECK-NOT: AllocatableInitCharacter
155
161
! CHECK: AllocatableAllocate
156
- deallocate (scalar, array )
162
+ deallocate (scalar, zarray )
157
163
! CHECK: AllocatableDeallocate
158
164
! CHECK: AllocatableDeallocate
159
165
end subroutine
0 commit comments