@@ -21,10 +21,10 @@ module test_dinit
21
21
! Test local scalar is default initialized
22
22
! CHECK-LABEL: func @_QMtest_dinitPlocal()
23
23
subroutine local
24
- ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt{i:i32}> {bindc_name = "x", uniq_name = "_QMtest_dinitFlocalEx"}
25
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTt.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTt{i:i32}>>
26
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>
27
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ref< !fir.type<_QMtest_dinitTt{i: i32}>>
24
+ ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt{i:i32}>
25
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTt{i:i32}>>
26
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
27
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
28
28
type (t) :: x
29
29
print * , x% i
30
30
end subroutine
@@ -45,30 +45,30 @@ subroutine local_array()
45
45
! scalars.
46
46
! CHECK-LABEL: func @_QMtest_dinitPlocal_alloc_comp()
47
47
subroutine local_alloc_comp
48
- ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}> {bindc_name = "x", uniq_name = "_QMtest_dinitFlocal_alloc_compEx"}
49
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTt_alloc_comp.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}>>
50
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}>>
51
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ref<!fir.type<_QMtest_dinitTt_alloc_comp{i:!fir. box<!fir.heap<!fir.array<?xf32>>>}>>
48
+ ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}>
49
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ref<!fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}>>) -> !fir.box <!fir.type<_QMtest_dinitTt_alloc_comp{i:!fir.box<!fir.heap<!fir.array<?xf32>>>}>>
50
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
51
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
52
52
type (t_alloc_comp) :: x
53
53
end subroutine
54
54
55
55
! Test function results are default initialized.
56
56
! CHECK-LABEL: func @_QMtest_dinitPresult() -> !fir.type<_QMtest_dinitTt{i:i32}>
57
57
function result ()
58
- ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt{i:i32}> {bindc_name = "result", uniq_name = "_QMtest_dinitFresultEresult"}
59
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTt.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTt{i:i32}>>
60
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>
61
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ref< !fir.type<_QMtest_dinitTt{i: i32}>>
58
+ ! CHECK: %[[x:.*]] = fir.alloca !fir.type<_QMtest_dinitTt{i:i32}>
59
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTt{i:i32}>>
60
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
61
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
62
62
type (t) :: result
63
63
end function
64
64
65
65
! Test intent(out) dummies are default initialized
66
66
! CHECK-LABEL: func @_QMtest_dinitPintent_out(
67
67
! CHECK-SAME: %[[x:.*]]: !fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>
68
68
subroutine intent_out (x )
69
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTt.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTt{i:i32}>>
70
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>
71
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ref< !fir.type<_QMtest_dinitTt{i: i32}>>
69
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ref<!fir.type<_QMtest_dinitTt{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTt{i:i32}>>
70
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
71
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
72
72
type (t), intent (out ) :: x
73
73
end subroutine
74
74
@@ -94,9 +94,9 @@ subroutine local_eq()
94
94
! CHECK: %[[equiv:.*]] = fir.alloca !fir.array<4xi8>
95
95
! CHECK: %[[xcoor:.*]] = fir.coordinate_of %[[equiv]], %c0{{.*}} : (!fir.ref<!fir.array<4xi8>>, index) -> !fir.ref<i8>
96
96
! CHECK: %[[x:.*]] = fir.convert %[[xcoor]] : (!fir.ref<i8>) -> !fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>
97
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTtseq.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTtseq{i:i32}>>
98
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTtseq{i:i32}>>
99
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ptr< !fir.type<_QMtest_dinitTtseq{i: i32}>>
97
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTtseq{i:i32}>>
98
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
99
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
100
100
equivalence (x, zi)
101
101
print * , i
102
102
end subroutine
@@ -112,16 +112,16 @@ subroutine local_eq2()
112
112
! CHECK: %[[equiv:.*]] = fir.alloca !fir.array<4xi8>
113
113
! CHECK: %[[xcoor:.*]] = fir.coordinate_of %[[equiv]], %c0{{.*}} : (!fir.ref<!fir.array<4xi8>>, index) -> !fir.ref<i8>
114
114
! CHECK: %[[x:.*]] = fir.convert %[[xcoor]] : (!fir.ref<i8>) -> !fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>
115
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTtseq.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTtseq{i:i32}>>
116
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTtseq{i:i32}>>
117
- ! CHECK: fir.store %[[LOAD]] to %[[x]] : !fir.ptr< !fir.type<_QMtest_dinitTtseq{i: i32}>>
115
+ ! CHECK: %[[xbox :.*]] = fir.embox %[[x]] : (!fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTtseq{i:i32}>>
116
+ ! CHECK: %[[xboxNone :.*]] = fir.convert %[[xbox]]
117
+ ! CHECK: fir.call @_FortranAInitialize( %[[xboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
118
118
119
119
120
120
! CHECK: %[[ycoor:.*]] = fir.coordinate_of %[[equiv]], %c0{{.*}} : (!fir.ref<!fir.array<4xi8>>, index) -> !fir.ref<i8>
121
121
! CHECK: %[[y:.*]] = fir.convert %[[ycoor]] : (!fir.ref<i8>) -> !fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>
122
- ! CHECK: %[[ADDR :.*]] = fir.address_of(@_QQ_QMtest_dinitTtseq.DerivedInit) : !fir.ref <!fir.type<_QMtest_dinitTtseq{i:i32}>>
123
- ! CHECK: %[[LOAD :.*]] = fir.load %[[ADDR]] : !fir.ref<!fir.type<_QMtest_dinitTtseq{i:i32}>>
124
- ! CHECK: fir.store %[[LOAD]] to %[[y]] : !fir.ptr< !fir.type<_QMtest_dinitTtseq{i: i32}>>
122
+ ! CHECK: %[[ybox :.*]] = fir.embox %[[y]] : (!fir.ptr<!fir.type<_QMtest_dinitTtseq{i:i32}>>) -> !fir.box <!fir.type<_QMtest_dinitTtseq{i:i32}>>
123
+ ! CHECK: %[[yboxNone :.*]] = fir.convert %[[ybox]]
124
+ ! CHECK: fir.call @_FortranAInitialize( %[[yboxNone]], %{{.*}}, %{{.*}}) {{.*}}: ( !fir.box<none>, !fir.ref<i8>, i32) -> ()
125
125
equivalence (x, y)
126
126
print * , y% i
127
127
end subroutine
0 commit comments