! Check that the implied-do index value is converted to proper type. ! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck %s function test1(k) integer*1 :: k integer*1 :: test1(4) test1 = ([(i*k, integer(8)::i=1,4)]) end function test1 ! CHECK-LABEL: func.func @_QPtest1( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref {fir.bindc_name = "k"}) -> !fir.array<4xi8> { ! CHECK: %[[ARG0_D:.*]]:2 = hlfir.declare %[[ARG0]] ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]]#0 : !fir.ref ! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i8) -> i64 ! CHECK: arith.muli {{.*}}, %[[VAL_K_I64]] : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: hlfir.no_reassoc {{.*}} : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi8> { ! CHECK: fir.convert {{.*}} : (i64) -> i8 ! CHECK: } ! CHECK: hlfir.assign {{.*}} to {{.*}} : !hlfir.expr<4xi8>, !fir.ref> ! CHECK: } function test2(k) integer*2 :: k integer*2 :: test2(4) test2 = ([(i*k, integer(8)::i=1,4)]) end function test2 ! CHECK-LABEL: func.func @_QPtest2( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref {fir.bindc_name = "k"}) -> !fir.array<4xi16> { ! CHECK: %[[ARG0_D:.*]]:2 = hlfir.declare %[[ARG0]] ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]]#0 : !fir.ref ! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i16) -> i64 ! CHECK: arith.muli {{.*}}, %[[VAL_K_I64]] : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: hlfir.no_reassoc {{.*}} : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi16> { ! CHECK: fir.convert {{.*}} : (i64) -> i16 ! CHECK: } ! CHECK: hlfir.assign {{.*}} to {{.*}} : !hlfir.expr<4xi16>, !fir.ref> ! CHECK: } function test3(k) integer*4 :: k integer*4 :: test3(4) test3 = ([(i*k, integer(8)::i=1,4)]) end function test3 ! CHECK-LABEL: func.func @_QPtest3( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref {fir.bindc_name = "k"}) -> !fir.array<4xi32> { ! CHECK: %[[ARG0_D:.*]]:2 = hlfir.declare %[[ARG0]] ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]]#0 : !fir.ref ! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i32) -> i64 ! CHECK: arith.muli {{.*}}, %[[VAL_K_I64]] : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: hlfir.no_reassoc {{.*}} : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi32> { ! CHECK: fir.convert {{.*}} : (i64) -> i32 ! CHECK: } ! CHECK: hlfir.assign {{.*}} to {{.*}} : !hlfir.expr<4xi32>, !fir.ref> ! CHECK: } function test4(k) integer*8 :: k integer*8 :: test4(4) test4 = ([(i*k, integer(8)::i=1,4)]) end function test4 ! CHECK-LABEL: func.func @_QPtest4( ! CHECK-SAME: %[[ARG0:.*]]: !fir.ref {fir.bindc_name = "k"}) -> !fir.array<4xi64> { ! CHECK: %[[ARG0_D:.*]]:2 = hlfir.declare %[[ARG0]] ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]]#0 : !fir.ref ! CHECK: arith.muli {{.*}}, %[[VAL_K]] : i64 ! CHECK: } ! CHECK: hlfir.elemental {{.*}} -> !hlfir.expr<4xi64> { ! CHECK: hlfir.no_reassoc {{.*}} : i64 ! CHECK: } ! CHECK: hlfir.assign {{.*}} to {{.*}} : !hlfir.expr<4xi64>, !fir.ref> ! CHECK: }