brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · c29e2ee Raw
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