@@ -192,4 +192,31 @@ subroutine derived_type_assignment_with_class()
192
192
a = p3(b)
193
193
end subroutine
194
194
195
+ subroutine takes_p1 (p )
196
+ class(p1), intent (in ) :: p
197
+ end subroutine
198
+
199
+ ! CHECK-LABEL: func.func @_QMpolymorphic_testPtakes_p1
200
+
201
+ subroutine no_reassoc_poly_value (a , i )
202
+ class(p1), intent (in ) :: a(:)
203
+ integer :: i
204
+ call takes_p1((a(i)))
205
+ end subroutine
206
+
207
+ ! CHECK-LABEL: func.func @_QMpolymorphic_testPno_reassoc_poly_value(
208
+ ! CHECK-SAME: %[[ARG0:.*]]: !fir.class<!fir.array<?x!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>> {fir.bindc_name = "a"}, %[[I:.*]]: !fir.ref<i32> {fir.bindc_name = "i"}) {
209
+ ! CHECK: %[[TEMP:.*]] = fir.alloca !fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>
210
+ ! CHECK: %[[LOADED_I:.*]] = fir.load %[[I]] : !fir.ref<i32>
211
+ ! CHECK: %[[I_I64:.*]] = fir.convert %[[LOADED_I]] : (i32) -> i64
212
+ ! CHECK: %[[C1:.*]] = arith.constant 1 : i64
213
+ ! CHECK: %[[IDX:.*]] = arith.subi %[[I_I64]], %[[C1]] : i64
214
+ ! CHECK: %[[COORD:.*]] = fir.coordinate_of %[[ARG0]], %[[IDX]] : (!fir.class<!fir.array<?x!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>>, i64) -> !fir.ref<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>
215
+ ! CHECK: %[[TDESC:.*]] = fir.box_tdesc %[[ARG0]] : (!fir.class<!fir.array<?x!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>>) -> !fir.tdesc<none>
216
+ ! CHECK: %[[NO_REASSOC:.*]] = fir.no_reassoc %[[COORD]] : !fir.ref<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>
217
+ ! CHECK: %[[LOAD:.*]] = fir.load %[[NO_REASSOC]] : !fir.ref<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>
218
+ ! CHECK: fir.store %[[LOAD]] to %[[TEMP]] : !fir.ref<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>
219
+ ! CHECK: %[[EMBOX:.*]] = fir.embox %[[TEMP]] tdesc %[[TDESC]] : (!fir.ref<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>, !fir.tdesc<none>) -> !fir.class<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>
220
+ ! CHECK: fir.call @_QMpolymorphic_testPtakes_p1(%[[EMBOX]]) {{.*}} : (!fir.class<!fir.type<_QMpolymorphic_testTp1{a:i32,b:i32}>>) -> ()
221
+
195
222
end module
0 commit comments