30 lines · plain
1// Test hlfir.assign code generation to FIR of derived type requiring2// or not finalization.3 4// RUN: fir-opt %s -convert-hlfir-to-fir | FileCheck %s5 6!t_simple = !fir.type<simple{i:i32}>7fir.type_info @simple noinit nodestroy nofinal : !t_simple8 9func.func @test_simple(%a: !fir.ref<!t_simple>, %b: !fir.ref<!t_simple>) {10 hlfir.assign %b to %a : !fir.ref<!t_simple>, !fir.ref<!t_simple>11 return12}13// CHECK-LABEL: func.func @test_simple(14// CHECK-NOT: Destroy15// CHECK: %[[VAL_1:.*]] = fir.coordinate_of %{{.*}}, i : (!fir.ref<!fir.type<simple{i:i32}>>) -> !fir.ref<i32>16// CHECK: %[[VAL_3:.*]] = fir.coordinate_of %{{.*}}, i : (!fir.ref<!fir.type<simple{i:i32}>>) -> !fir.ref<i32>17// CHECK: %[[VAL_4:.*]] = fir.load %[[VAL_1]] : !fir.ref<i32>18// CHECK: fir.store %[[VAL_4]] to %[[VAL_3]] : !fir.ref<i32>19 20 21!t_with_final = !fir.type<with_final{i:i32}>22fir.type_info @with_final noinit : !t_with_final23 24func.func @test_with_final(%a: !fir.ref<!t_with_final>, %b: !fir.ref<!t_with_final>) {25 hlfir.assign %b to %a : !fir.ref<!t_with_final>, !fir.ref<!t_with_final>26 return27}28// CHECK-LABEL: func.func @test_with_final(29// CHECK: fir.call @_FortranAAssign30