69 lines · plain
1! Test that lowering can handle entry statements with character2! results where some entries are BIND(C) and not the others.3! RUN: bbc -emit-hlfir %s -o - | FileCheck %s4 5function foo() bind(c)6 character(1) :: foo, bar7entry bar()8 bar = "a"9end function10 11! CHECK-LABEL: func.func @foo() -> !fir.char<1>12! CHECK: %[[VAL_0:.*]] = arith.constant 1 : index13! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.char<1> {bindc_name = "foo", uniq_name = "_QFfooEfoo"}14! CHECK: %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_1]] typeparams %[[VAL_0]] {uniq_name = "_QFfooEfoo"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)15! CHECK: %[[VAL_3:.*]] = arith.constant 1 : index16! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_2]]#0 typeparams %[[VAL_3]] {uniq_name = "_QFfooEbar"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)17! CHECK: cf.br ^bb118! CHECK: ^bb1:19! CHECK: hlfir.assign %{{.*}} to %[[VAL_4]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>20! CHECK: %[[VAL_8:.*]] = fir.load %[[VAL_2]]#0 : !fir.ref<!fir.char<1>>21! CHECK: return %[[VAL_8]] : !fir.char<1>22! CHECK: }23!24! CHECK-LABEL: func.func @_QPbar(25! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.char<1>>,26! CHECK-SAME: %[[VAL_1:.*]]: index) -> !fir.boxchar<1> {27! CHECK: %[[VAL_3:.*]] = arith.constant 1 : index28! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_3]] {uniq_name = "_QFfooEfoo"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)29! CHECK: %[[VAL_5:.*]] = arith.constant 1 : index30! CHECK: %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_5]] {uniq_name = "_QFfooEbar"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)31! CHECK: cf.br ^bb132! CHECK: ^bb1:33! CHECK: hlfir.assign %{{.*}} to %[[VAL_6]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>34! CHECK: %[[VAL_10:.*]] = fir.emboxchar %[[VAL_6]]#0, %[[VAL_5]] : (!fir.ref<!fir.char<1>>, index) -> !fir.boxchar<1>35! CHECK: return %[[VAL_10]] : !fir.boxchar<1>36! CHECK: }37 38function foo2()39 character(1) :: foo2, bar240entry bar2() bind(c)41 bar2 = "a"42end function43! CHECK-LABEL: func.func @_QPfoo2(44! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<!fir.char<1>>,45! CHECK-SAME: %[[VAL_1:.*]]: index) -> !fir.boxchar<1> {46! CHECK: %[[VAL_3:.*]] = arith.constant 1 : index47! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_3]] {uniq_name = "_QFfoo2Efoo2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)48! CHECK: %[[VAL_5:.*]] = arith.constant 1 : index49! CHECK: %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[VAL_5]] {uniq_name = "_QFfoo2Ebar2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)50! CHECK: cf.br ^bb151! CHECK: ^bb1:52! CHECK: hlfir.assign %{{.*}} to %[[VAL_6]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>53! CHECK: %[[VAL_10:.*]] = fir.emboxchar %[[VAL_4]]#0, %[[VAL_3]] : (!fir.ref<!fir.char<1>>, index) -> !fir.boxchar<1>54! CHECK: return %[[VAL_10]] : !fir.boxchar<1>55! CHECK: }56 57! CHECK-LABEL: func.func @bar2() -> !fir.char<1>58! CHECK: %[[VAL_0:.*]] = arith.constant 1 : index59! CHECK: %[[VAL_1:.*]] = fir.alloca !fir.char<1> {bindc_name = "foo2", uniq_name = "_QFfoo2Efoo2"}60! CHECK: %[[VAL_2:.*]]:2 = hlfir.declare %[[VAL_1]] typeparams %[[VAL_0]] {uniq_name = "_QFfoo2Efoo2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)61! CHECK: %[[VAL_3:.*]] = arith.constant 1 : index62! CHECK: %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_2]]#0 typeparams %[[VAL_3]] {uniq_name = "_QFfoo2Ebar2"} : (!fir.ref<!fir.char<1>>, index) -> (!fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>)63! CHECK: cf.br ^bb164! CHECK: ^bb1:65! CHECK: hlfir.assign %{{.*}} to %[[VAL_4]]#0 : !fir.ref<!fir.char<1>>, !fir.ref<!fir.char<1>>66! CHECK: %[[VAL_8:.*]] = fir.load %[[VAL_4]]#0 : !fir.ref<!fir.char<1>>67! CHECK: return %[[VAL_8]] : !fir.char<1>68! CHECK: }69