1! Check that the implied-do index value is converted to proper type. 2! RUN: bbc -emit-hlfir -o - %s | FileCheck %s 3 4function test1(k) 5 integer*1 :: k 6 integer*1 :: test1(4) 7 test1 = ([(i*k, integer(8)::i=1,4)]) 8end function test1 9! CHECK-LABEL: func.func @_QPtest1( 10! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i8> {fir.bindc_name = "k"}) -> !fir.array<4xi8> { 11! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFtest1Ek"} : (!fir.ref<i8>, !fir.dscope) -> (!fir.ref<i8>, !fir.ref<i8>) 12! CHECK: %[[VAL_2:.*]] = arith.constant 4 : index 13! CHECK: %[[VAL_3:.*]] = fir.alloca !fir.array<4xi8> {bindc_name = "test1", uniq_name = "_QFtest1Etest1"} 14! CHECK: %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1> 15! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_3]](%[[VAL_4]]) {uniq_name = "_QFtest1Etest1"} : (!fir.ref<!fir.array<4xi8>>, !fir.shape<1>) -> (!fir.ref<!fir.array<4xi8>>, !fir.ref<!fir.array<4xi8>>) 16! CHECK: %[[VAL_6:.*]] = arith.constant 4 : index 17! CHECK: %[[VAL_7:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1> 18! CHECK: %[[VAL_8:.*]] = arith.constant 1 : i64 19! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i64) -> index 20! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 21! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 22! CHECK: %[[VAL_12:.*]] = arith.constant 1 : index 23! CHECK: %[[VAL_13:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 24! CHECK: ^bb0(%[[VAL_14:.*]]: index): 25! CHECK: %[[VAL_15:.*]] = arith.subi %[[VAL_14]], %[[VAL_12]] : index 26! CHECK: %[[VAL_16:.*]] = arith.muli %[[VAL_15]], %[[VAL_11]] : index 27! CHECK: %[[VAL_17:.*]] = arith.addi %[[VAL_9]], %[[VAL_16]] : index 28! CHECK: %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 29! CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_1]]#0 : !fir.ref<i8> 30! CHECK: %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i8) -> i64 31! CHECK: %[[VAL_21:.*]] = arith.muli %[[VAL_18]], %[[VAL_20]] : i64 32! CHECK: hlfir.yield_element %[[VAL_21]] : i64 33! CHECK: } 34! CHECK: %[[VAL_22:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 35! CHECK: ^bb0(%[[VAL_23:.*]]: index): 36! CHECK: %[[VAL_24:.*]] = hlfir.apply %[[VAL_25:.*]], %[[VAL_23]] : (!hlfir.expr<4xi64>, index) -> i64 37! CHECK: %[[VAL_26:.*]] = hlfir.no_reassoc %[[VAL_24]] : i64 38! CHECK: hlfir.yield_element %[[VAL_26]] : i64 39! CHECK: } 40! CHECK: %[[VAL_27:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi8> { 41! CHECK: ^bb0(%[[VAL_28:.*]]: index): 42! CHECK: %[[VAL_29:.*]] = hlfir.apply %[[VAL_30:.*]], %[[VAL_28]] : (!hlfir.expr<4xi64>, index) -> i64 43! CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_29]] : (i64) -> i8 44! CHECK: hlfir.yield_element %[[VAL_31]] : i8 45! CHECK: } 46! CHECK: hlfir.assign %[[VAL_32:.*]] to %[[VAL_5]]#0 : !hlfir.expr<4xi8>, !fir.ref<!fir.array<4xi8>> 47! CHECK: hlfir.destroy %[[VAL_32]] : !hlfir.expr<4xi8> 48! CHECK: hlfir.destroy %[[VAL_33:.*]] : !hlfir.expr<4xi64> 49! CHECK: hlfir.destroy %[[VAL_34:.*]] : !hlfir.expr<4xi64> 50! CHECK: %[[VAL_35:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.array<4xi8>> 51! CHECK: return %[[VAL_35]] : !fir.array<4xi8> 52! CHECK: } 53 54function test2(k) 55 integer*2 :: k 56 integer*2 :: test2(4) 57 test2 = ([(i*k, integer(8)::i=1,4)]) 58end function test2 59! CHECK-LABEL: func.func @_QPtest2( 60! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i16> {fir.bindc_name = "k"}) -> !fir.array<4xi16> { 61! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFtest2Ek"} : (!fir.ref<i16>, !fir.dscope) -> (!fir.ref<i16>, !fir.ref<i16>) 62! CHECK: %[[VAL_2:.*]] = arith.constant 4 : index 63! CHECK: %[[VAL_3:.*]] = fir.alloca !fir.array<4xi16> {bindc_name = "test2", uniq_name = "_QFtest2Etest2"} 64! CHECK: %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1> 65! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_3]](%[[VAL_4]]) {uniq_name = "_QFtest2Etest2"} : (!fir.ref<!fir.array<4xi16>>, !fir.shape<1>) -> (!fir.ref<!fir.array<4xi16>>, !fir.ref<!fir.array<4xi16>>) 66! CHECK: %[[VAL_6:.*]] = arith.constant 4 : index 67! CHECK: %[[VAL_7:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1> 68! CHECK: %[[VAL_8:.*]] = arith.constant 1 : i64 69! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i64) -> index 70! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 71! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 72! CHECK: %[[VAL_12:.*]] = arith.constant 1 : index 73! CHECK: %[[VAL_13:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 74! CHECK: ^bb0(%[[VAL_14:.*]]: index): 75! CHECK: %[[VAL_15:.*]] = arith.subi %[[VAL_14]], %[[VAL_12]] : index 76! CHECK: %[[VAL_16:.*]] = arith.muli %[[VAL_15]], %[[VAL_11]] : index 77! CHECK: %[[VAL_17:.*]] = arith.addi %[[VAL_9]], %[[VAL_16]] : index 78! CHECK: %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 79! CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_1]]#0 : !fir.ref<i16> 80! CHECK: %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i16) -> i64 81! CHECK: %[[VAL_21:.*]] = arith.muli %[[VAL_18]], %[[VAL_20]] : i64 82! CHECK: hlfir.yield_element %[[VAL_21]] : i64 83! CHECK: } 84! CHECK: %[[VAL_22:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 85! CHECK: ^bb0(%[[VAL_23:.*]]: index): 86! CHECK: %[[VAL_24:.*]] = hlfir.apply %[[VAL_25:.*]], %[[VAL_23]] : (!hlfir.expr<4xi64>, index) -> i64 87! CHECK: %[[VAL_26:.*]] = hlfir.no_reassoc %[[VAL_24]] : i64 88! CHECK: hlfir.yield_element %[[VAL_26]] : i64 89! CHECK: } 90! CHECK: %[[VAL_27:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi16> { 91! CHECK: ^bb0(%[[VAL_28:.*]]: index): 92! CHECK: %[[VAL_29:.*]] = hlfir.apply %[[VAL_30:.*]], %[[VAL_28]] : (!hlfir.expr<4xi64>, index) -> i64 93! CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_29]] : (i64) -> i16 94! CHECK: hlfir.yield_element %[[VAL_31]] : i16 95! CHECK: } 96! CHECK: hlfir.assign %[[VAL_32:.*]] to %[[VAL_5]]#0 : !hlfir.expr<4xi16>, !fir.ref<!fir.array<4xi16>> 97! CHECK: hlfir.destroy %[[VAL_32]] : !hlfir.expr<4xi16> 98! CHECK: hlfir.destroy %[[VAL_33:.*]] : !hlfir.expr<4xi64> 99! CHECK: hlfir.destroy %[[VAL_34:.*]] : !hlfir.expr<4xi64> 100! CHECK: %[[VAL_35:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.array<4xi16>> 101! CHECK: return %[[VAL_35]] : !fir.array<4xi16> 102! CHECK: } 103 104function test3(k) 105 integer*4 :: k 106 integer*4 :: test3(4) 107 test3 = ([(i*k, integer(8)::i=1,4)]) 108end function test3 109! CHECK-LABEL: func.func @_QPtest3( 110! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "k"}) -> !fir.array<4xi32> { 111! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFtest3Ek"} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>) 112! CHECK: %[[VAL_2:.*]] = arith.constant 4 : index 113! CHECK: %[[VAL_3:.*]] = fir.alloca !fir.array<4xi32> {bindc_name = "test3", uniq_name = "_QFtest3Etest3"} 114! CHECK: %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1> 115! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_3]](%[[VAL_4]]) {uniq_name = "_QFtest3Etest3"} : (!fir.ref<!fir.array<4xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<4xi32>>, !fir.ref<!fir.array<4xi32>>) 116! CHECK: %[[VAL_6:.*]] = arith.constant 4 : index 117! CHECK: %[[VAL_7:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1> 118! CHECK: %[[VAL_8:.*]] = arith.constant 1 : i64 119! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i64) -> index 120! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 121! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 122! CHECK: %[[VAL_12:.*]] = arith.constant 1 : index 123! CHECK: %[[VAL_13:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 124! CHECK: ^bb0(%[[VAL_14:.*]]: index): 125! CHECK: %[[VAL_15:.*]] = arith.subi %[[VAL_14]], %[[VAL_12]] : index 126! CHECK: %[[VAL_16:.*]] = arith.muli %[[VAL_15]], %[[VAL_11]] : index 127! CHECK: %[[VAL_17:.*]] = arith.addi %[[VAL_9]], %[[VAL_16]] : index 128! CHECK: %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 129! CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_1]]#0 : !fir.ref<i32> 130! CHECK: %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i32) -> i64 131! CHECK: %[[VAL_21:.*]] = arith.muli %[[VAL_18]], %[[VAL_20]] : i64 132! CHECK: hlfir.yield_element %[[VAL_21]] : i64 133! CHECK: } 134! CHECK: %[[VAL_22:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 135! CHECK: ^bb0(%[[VAL_23:.*]]: index): 136! CHECK: %[[VAL_24:.*]] = hlfir.apply %[[VAL_25:.*]], %[[VAL_23]] : (!hlfir.expr<4xi64>, index) -> i64 137! CHECK: %[[VAL_26:.*]] = hlfir.no_reassoc %[[VAL_24]] : i64 138! CHECK: hlfir.yield_element %[[VAL_26]] : i64 139! CHECK: } 140! CHECK: %[[VAL_27:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi32> { 141! CHECK: ^bb0(%[[VAL_28:.*]]: index): 142! CHECK: %[[VAL_29:.*]] = hlfir.apply %[[VAL_30:.*]], %[[VAL_28]] : (!hlfir.expr<4xi64>, index) -> i64 143! CHECK: %[[VAL_31:.*]] = fir.convert %[[VAL_29]] : (i64) -> i32 144! CHECK: hlfir.yield_element %[[VAL_31]] : i32 145! CHECK: } 146! CHECK: hlfir.assign %[[VAL_32:.*]] to %[[VAL_5]]#0 : !hlfir.expr<4xi32>, !fir.ref<!fir.array<4xi32>> 147! CHECK: hlfir.destroy %[[VAL_32]] : !hlfir.expr<4xi32> 148! CHECK: hlfir.destroy %[[VAL_33:.*]] : !hlfir.expr<4xi64> 149! CHECK: hlfir.destroy %[[VAL_34:.*]] : !hlfir.expr<4xi64> 150! CHECK: %[[VAL_35:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.array<4xi32>> 151! CHECK: return %[[VAL_35]] : !fir.array<4xi32> 152! CHECK: } 153 154function test4(k) 155 integer*8 :: k 156 integer*8 :: test4(4) 157 test4 = ([(i*k, integer(8)::i=1,4)]) 158end function test4 159! CHECK-LABEL: func.func @_QPtest4( 160! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i64> {fir.bindc_name = "k"}) -> !fir.array<4xi64> { 161! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %{{[0-9]+}} {uniq_name = "_QFtest4Ek"} : (!fir.ref<i64>, !fir.dscope) -> (!fir.ref<i64>, !fir.ref<i64>) 162! CHECK: %[[VAL_2:.*]] = arith.constant 4 : index 163! CHECK: %[[VAL_3:.*]] = fir.alloca !fir.array<4xi64> {bindc_name = "test4", uniq_name = "_QFtest4Etest4"} 164! CHECK: %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1> 165! CHECK: %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_3]](%[[VAL_4]]) {uniq_name = "_QFtest4Etest4"} : (!fir.ref<!fir.array<4xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<4xi64>>, !fir.ref<!fir.array<4xi64>>) 166! CHECK: %[[VAL_6:.*]] = arith.constant 4 : index 167! CHECK: %[[VAL_7:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1> 168! CHECK: %[[VAL_8:.*]] = arith.constant 1 : i64 169! CHECK: %[[VAL_9:.*]] = fir.convert %[[VAL_8]] : (i64) -> index 170! CHECK: %[[VAL_10:.*]] = arith.constant 1 : i64 171! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_10]] : (i64) -> index 172! CHECK: %[[VAL_12:.*]] = arith.constant 1 : index 173! CHECK: %[[VAL_13:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 174! CHECK: ^bb0(%[[VAL_14:.*]]: index): 175! CHECK: %[[VAL_15:.*]] = arith.subi %[[VAL_14]], %[[VAL_12]] : index 176! CHECK: %[[VAL_16:.*]] = arith.muli %[[VAL_15]], %[[VAL_11]] : index 177! CHECK: %[[VAL_17:.*]] = arith.addi %[[VAL_9]], %[[VAL_16]] : index 178! CHECK: %[[VAL_18:.*]] = fir.convert %[[VAL_17]] : (index) -> i64 179! CHECK: %[[VAL_19:.*]] = fir.load %[[VAL_1]]#0 : !fir.ref<i64> 180! CHECK: %[[VAL_20:.*]] = arith.muli %[[VAL_18]], %[[VAL_19]] : i64 181! CHECK: hlfir.yield_element %[[VAL_20]] : i64 182! CHECK: } 183! CHECK: %[[VAL_21:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<4xi64> { 184! CHECK: ^bb0(%[[VAL_22:.*]]: index): 185! CHECK: %[[VAL_23:.*]] = hlfir.apply %[[VAL_24:.*]], %[[VAL_22]] : (!hlfir.expr<4xi64>, index) -> i64 186! CHECK: %[[VAL_25:.*]] = hlfir.no_reassoc %[[VAL_23]] : i64 187! CHECK: hlfir.yield_element %[[VAL_25]] : i64 188! CHECK: } 189! CHECK: hlfir.assign %[[VAL_26:.*]] to %[[VAL_5]]#0 : !hlfir.expr<4xi64>, !fir.ref<!fir.array<4xi64>> 190! CHECK: hlfir.destroy %[[VAL_26]] : !hlfir.expr<4xi64> 191! CHECK: hlfir.destroy %[[VAL_27:.*]] : !hlfir.expr<4xi64> 192! CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_5]]#1 : !fir.ref<!fir.array<4xi64>> 193! CHECK: return %[[VAL_28]] : !fir.array<4xi64> 194! CHECK: } 195