1! RUN: bbc -emit-fir -o - %s | FileCheck %s 2 3 4! CHECK-LABEL: func @_QPcompare1( 5! CHECK-SAME: %{{.*}}: !fir.ref<!fir.logical<4>>{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}) { 6subroutine compare1(x, c1, c2) 7 character(*) c1, c2, d1, d2 8 logical x, y 9 x = c1 < c2 10 return 11 12! CHECK-LABEL: func @_QPcompare2( 13! CHECK-SAME: %{{.*}}: !fir.ref<!fir.logical<4>>{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}) { 14entry compare2(y, d2, d1) 15 y = d1 < d2 16end 17 18program entries 19 character(10) hh, qq, m 20 character(len=4) s1, s2 21 integer mm 22 logical r 23 s1 = 'a111' 24 s2 = 'a222' 25 call compare1(r, s1, s2); print*, r 26 call compare2(r, s1, s2); print*, r 27 call ss(mm); print*, mm 28 call e1(mm, 17); print*, mm 29 call e2(17, mm); print*, mm 30 call e3(mm); print*, mm 31 print*, jj(11) 32 print*, rr(22) 33 m = 'abcd efgh' 34 print*, hh(m) 35 print*, qq(m) 36 call dd1 37 call dd2 38 call dd3(6) 396 continue 40end 41 42! CHECK-LABEL: func @_QPss( 43! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}) { 44subroutine ss(n1) 45 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Enx"} 46 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Eny"} 47 integer n17, n2 48 nx = 100 49 n1 = nx + 10 50 return 51 52! CHECK-LABEL: func @_QPe1( 53! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}, %{{.*}}: !fir.ref<i32>{{.*}}) { 54entry e1(n2, n17) 55 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Enx"} 56 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Eny"} 57 ny = 200 58 n2 = ny + 20 59 return 60 61 ! CHECK-LABEL: func @_QPe2( 62 ! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}, %{{.*}}: !fir.ref<i32>{{.*}}) { 63entry e2(n3, n1) 64 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Enx"} 65 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Eny"} 66 67! CHECK-LABEL: func @_QPe3( 68! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}) { 69entry e3(n1) 70 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Enx"} 71 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Eny"} 72 n1 = 30 73end 74 75! CHECK-LABEL: func @_QPjj( 76! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}) -> i32 77function jj(n1) 78 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Ejj"} 79 jj = 100 80 jj = jj + n1 81 return 82 83 ! CHECK-LABEL: func @_QPrr( 84 ! CHECK-SAME: %{{.*}}: !fir.ref<i32>{{.*}}) -> f32 85entry rr(n2) 86 ! CHECK: fir.alloca i32 {{{.*}}uniq_name = "{{.*}}Ejj"} 87 rr = 200.0 88 rr = rr + n2 89end 90 91! CHECK-LABEL: func @_QPhh( 92! CHECK-SAME: %{{.*}}: !fir.ref<!fir.char<1,10>>{{.*}}, %{{.*}}: index{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}) -> !fir.boxchar<1> 93function hh(c1) 94 character(10) c1, hh, qq 95 hh = c1 96 return 97 ! CHECK-LABEL: func @_QPqq( 98 ! CHECK-SAME: %{{.*}}: !fir.ref<!fir.char<1,10>>{{.*}}, %{{.*}}: index{{.*}}, %{{.*}}: !fir.boxchar<1>{{.*}}) -> !fir.boxchar<1> 99entry qq(c1) 100 qq = c1 101end 102 103! CHECK-LABEL: func @_QPchar_array() 104function char_array() 105 character(10), c(5) 106! CHECK-LABEL: func @_QPchar_array_entry( 107! CHECK-SAME: %{{.*}}: !fir.boxchar<1>{{.*}}) -> f32 { 108entry char_array_entry(c) 109end 110 111! CHECK-LABEL: func @_QPdd1() 112subroutine dd1 113 ! CHECK: %[[kk:[0-9]*]] = fir.alloca i32 {bindc_name = "kk", uniq_name = 114 ! "_QFdd1Ekk"} 115 ! CHECK: br ^bb1 116 ! CHECK: ^bb1: // pred: ^bb0 117 ! CHECK: %[[ten:.*]] = arith.constant 10 : i32 118 ! CHECK: fir.store %[[ten:.*]] to %[[kk]] : !fir.ref<i32> 119 ! CHECK: br ^bb2 120 ! CHECK: ^bb2: // pred: ^bb1 121 ! CHECK: %[[twenty:.*]] = arith.constant 20 : i32 122 ! CHECK: fir.store %[[twenty:.*]] to %[[kk]] : !fir.ref<i32> 123 ! CHECK: br ^bb3 124 ! CHECK: ^bb3: // pred: ^bb2 125 ! CHECK: return 126 kk = 10 127 128 ! CHECK-LABEL: func @_QPdd2() 129 ! CHECK: %[[kk:[0-9]*]] = fir.alloca i32 {bindc_name = "kk", uniq_name = 130 ! "_QFdd1Ekk"} 131 ! CHECK: br ^bb1 132 ! CHECK: ^bb1: // pred: ^bb0 133 ! CHECK: %[[twenty:.*]] = arith.constant 20 : i32 134 ! CHECK: fir.store %[[twenty:.*]] to %[[kk]] : !fir.ref<i32> 135 ! CHECK: br ^bb2 136 ! CHECK: ^bb2: // pred: ^bb1 137 ! CHECK: return 138 entry dd2 139 kk = 20 140 return 141 142 ! CHECK-LABEL: func @_QPdd3 143 ! CHECK: %[[dd3:[0-9]*]] = fir.alloca index {bindc_name = "dd3"} 144 ! CHECK: %[[kk:[0-9]*]] = fir.alloca i32 {bindc_name = "kk", uniq_name = 145 ! "_QFdd1Ekk"} 146 ! CHECK: %[[zero:.*]] = arith.constant 0 : index 147 ! CHECK: fir.store %[[zero:.*]] to %[[dd3]] : !fir.ref<index> 148 ! CHECK: br ^bb1 149 ! CHECK: ^bb1: // pred: ^bb0 150 ! CHECK: %[[thirty:.*]] = arith.constant 30 : i32 151 ! CHECK: fir.store %[[thirty:.*]] to %[[kk:[0-9]*]] : !fir.ref<i32> 152 ! CHECK: br ^bb2 153 ! CHECK: ^bb2: // pred: ^bb1 154 ! CHECK: %[[altret:[0-9]*]] = fir.load %[[dd3]] : !fir.ref<index> 155 ! CHECK: return %[[altret:[0-9]*]] : index 156 entry dd3(*) 157 kk = 30 158end 159