mlir::Value fsourceCast = fsource;
if (fir::isPolymorphicType(tsource.getType()) &&
!fir::isPolymorphicType(fsource.getType())) {
- tsourceCast = builder.createConvert(loc, fsource.getType(), tsource);
+ tsourceCast = builder.create<fir::ReboxOp>(loc, fsource.getType(), tsource,
+ /*shape*/ mlir::Value{},
+ /*slice=*/mlir::Value{});
+
+ // builder.createConvert(loc, fsource.getType(), tsource);
} else if (!fir::isPolymorphicType(tsource.getType()) &&
fir::isPolymorphicType(fsource.getType())) {
- fsourceCast = builder.createConvert(loc, tsource.getType(), fsource);
+ fsourceCast = builder.create<fir::ReboxOp>(loc, tsource.getType(), fsource,
+ /*shape*/ mlir::Value{},
+ /*slice=*/mlir::Value{});
+
+ // fsourceCast = builder.createConvert(loc, tsource.getType(), fsource);
} else {
// FSOURCE and TSOURCE are not polymorphic.
// FSOURCE has the same type as TSOURCE, but they may not have the same MLIR
! CHECK: %[[LOAD_I:.*]] = fir.load %[[I]] : !fir.ref<i32>
! CHECK: %[[C1:.*]] = arith.constant 1 : i32
! CHECK: %[[CMPI:.*]] = arith.cmpi eq, %[[LOAD_I]], %[[C1]] : i32
-! CHECK: %[[A_CONV:.*]] = fir.convert %[[LOAD_A]] : (!fir.class<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>) -> !fir.box<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>
-! CHECK: %{{.*}} = arith.select %[[CMPI]], %[[A_CONV]], %[[LOAD_B]] : !fir.box<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>
+! CHECK: %[[A_REBOX:.*]] = fir.rebox %[[LOAD_A]] : (!fir.class<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>) -> !fir.box<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>
+! CHECK: %{{.*}} = arith.select %[[CMPI]], %[[A_REBOX]], %[[LOAD_B]] : !fir.box<!fir.heap<!fir.type<_QMpoly_tmpTp1{a:i32}>>>
end module