@@ -27,16 +27,20 @@ program p
2727 call sub_volatile_array_pointer(nonvolatile_array_pointer)
2828contains
2929 subroutine sub_nonvolatile_array (arr )
30- integer , volatile :: arr(10 )
30+ integer :: arr(10 )
31+ arr(1 ) = 5
3132 end subroutine
3233 subroutine sub_volatile_array_assumed_shape (arr )
3334 integer , volatile, dimension (:) :: arr
35+ arr(1 ) = 5
3436 end subroutine
3537 subroutine sub_volatile_array (arr )
3638 integer , volatile, dimension (10 ) :: arr
39+ arr(1 ) = 5
3740 end subroutine
3841 subroutine sub_volatile_array_pointer (arr )
3942 integer , volatile, dimension (:), pointer :: arr
43+ arr(1 ) = 5
4044 end subroutine
4145end program
4246
@@ -97,35 +101,51 @@ subroutine sub_volatile_array_pointer(arr)
97101
98102! CHECK-LABEL: func.func private @_QFPsub_nonvolatile_array(
99103! CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<!fir.array<10xi32>> {fir.bindc_name = "arr"}) attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>} {
100- ! CHECK: %[[VAL_1:.*]] = arith.constant 10 : index
101- ! CHECK: %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope
102- ! CHECK: %[[VAL_3:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
103- ! CHECK: %[[VAL_4:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>, volatile>
104- ! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_4]](%[[VAL_3]]) dummy_scope %[[VAL_2]] {fortran_attrs = #fir.var_attrs<volatile>, uniq_name = "_QFFsub_nonvolatile_arrayEarr"} : (!fir.ref<!fir.array<10xi32>, volatile>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<10xi32>, volatile>, !fir.ref<!fir.array<10xi32>, volatile>)
104+ ! CHECK: %[[VAL_1:.*]] = arith.constant 1 : index
105+ ! CHECK: %[[VAL_2:.*]] = arith.constant 5 : i32
106+ ! CHECK: %[[VAL_3:.*]] = arith.constant 10 : index
107+ ! CHECK: %[[VAL_4:.*]] = fir.dummy_scope : !fir.dscope
108+ ! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
109+ ! CHECK: %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_5]]) dummy_scope %[[VAL_4]] {uniq_name = "_QFFsub_nonvolatile_arrayEarr"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)
110+ ! CHECK: %[[VAL_7:.*]] = hlfir.designate %[[VAL_6]]#0 (%[[VAL_1]]) : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>
111+ ! CHECK: hlfir.assign %[[VAL_2]] to %[[VAL_7]] : i32, !fir.ref<i32>
105112! CHECK: return
106113! CHECK: }
107114
108115! CHECK-LABEL: func.func private @_QFPsub_volatile_array_assumed_shape(
109116! CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "arr"}) attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>} {
110- ! CHECK: %[[VAL_1:.*]] = fir.dummy_scope : !fir.dscope
111- ! CHECK: %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[VAL_1]] {fortran_attrs = #fir.var_attrs<volatile>, uniq_name = "_QFFsub_volatile_array_assumed_shapeEarr"} : (!fir.box<!fir.array<?xi32>>, !fir.dscope) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
117+ ! CHECK: %[[VAL_1:.*]] = arith.constant 1 : index
118+ ! CHECK: %[[VAL_2:.*]] = arith.constant 5 : i32
119+ ! CHECK: %[[VAL_3:.*]] = fir.dummy_scope : !fir.dscope
120+ ! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[VAL_3]] {fortran_attrs = #fir.var_attrs<volatile>, uniq_name = "_QFFsub_volatile_array_assumed_shapeEarr"} : (!fir.box<!fir.array<?xi32>>, !fir.dscope) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)
121+ ! CHECK: %[[VAL_5:.*]] = hlfir.designate %[[VAL_4]]#0 (%[[VAL_1]]) : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>
122+ ! CHECK: hlfir.assign %[[VAL_2]] to %[[VAL_5]] : i32, !fir.ref<i32>
112123! CHECK: return
113124! CHECK: }
114125
115126! CHECK-LABEL: func.func private @_QFPsub_volatile_array(
116127! CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<!fir.array<10xi32>> {fir.bindc_name = "arr"}) attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>} {
117- ! CHECK: %[[VAL_1:.*]] = arith.constant 10 : index
118- ! CHECK: %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope
119- ! CHECK: %[[VAL_3:.*]] = fir.shape %[[VAL_1]] : (index) -> !fir.shape<1>
120- ! CHECK: %[[VAL_4:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>, volatile>
121- ! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_4]](%[[VAL_3]]) dummy_scope %[[VAL_2]] {fortran_attrs = #fir.var_attrs<volatile>, uniq_name = "_QFFsub_volatile_arrayEarr"} : (!fir.ref<!fir.array<10xi32>, volatile>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<10xi32>, volatile>, !fir.ref<!fir.array<10xi32>, volatile>)
128+ ! CHECK: %[[VAL_1:.*]] = arith.constant 1 : index
129+ ! CHECK: %[[VAL_2:.*]] = arith.constant 5 : i32
130+ ! CHECK: %[[VAL_3:.*]] = arith.constant 10 : index
131+ ! CHECK: %[[VAL_4:.*]] = fir.dummy_scope : !fir.dscope
132+ ! CHECK: %[[VAL_5:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>
133+ ! CHECK: %[[VAL_6:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>, volatile>
134+ ! CHECK: %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_6]](%[[VAL_5]]) dummy_scope %[[VAL_4]] {fortran_attrs = #fir.var_attrs<volatile>, uniq_name = "_QFFsub_volatile_arrayEarr"} : (!fir.ref<!fir.array<10xi32>, volatile>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<10xi32>, volatile>, !fir.ref<!fir.array<10xi32>, volatile>)
135+ ! CHECK: %[[VAL_8:.*]] = hlfir.designate %[[VAL_7]]#0 (%[[VAL_1]]) : (!fir.ref<!fir.array<10xi32>, volatile>, index) -> !fir.ref<i32, volatile>
136+ ! CHECK: hlfir.assign %[[VAL_2]] to %[[VAL_8]] : i32, !fir.ref<i32, volatile>
122137! CHECK: return
123138! CHECK: }
124139
125140! CHECK-LABEL: func.func private @_QFPsub_volatile_array_pointer(
126141! CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>, volatile> {fir.bindc_name = "arr"}) attributes {fir.host_symbol = @_QQmain, llvm.linkage = #llvm.linkage<internal>} {
127- ! CHECK: %[[VAL_1:.*]] = fir.dummy_scope : !fir.dscope
128- ! CHECK: %[[VAL_2:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>, volatile>) -> !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>
129- ! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] dummy_scope %[[VAL_1]] {fortran_attrs = #fir.var_attrs<pointer, volatile>, uniq_name = "_QFFsub_volatile_array_pointerEarr"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>, !fir.dscope) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>)
142+ ! CHECK: %[[VAL_1:.*]] = arith.constant 1 : index
143+ ! CHECK: %[[VAL_2:.*]] = arith.constant 5 : i32
144+ ! CHECK: %[[VAL_3:.*]] = fir.dummy_scope : !fir.dscope
145+ ! CHECK: %[[VAL_4:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>, volatile>) -> !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>
146+ ! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_4]] dummy_scope %[[VAL_3]] {fortran_attrs = #fir.var_attrs<pointer, volatile>, uniq_name = "_QFFsub_volatile_array_pointerEarr"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>, !fir.dscope) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>)
147+ ! CHECK: %[[VAL_6:.*]] = fir.load %[[VAL_5]]#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, volatile>
148+ ! CHECK: %[[VAL_7:.*]] = hlfir.designate %[[VAL_6]] (%[[VAL_1]]) : (!fir.box<!fir.ptr<!fir.array<?xi32>>, volatile>, index) -> !fir.ref<i32, volatile>
149+ ! CHECK: hlfir.assign %[[VAL_2]] to %[[VAL_7]] : i32, !fir.ref<i32, volatile>
130150! CHECK: return
131151! CHECK: }
0 commit comments