98 lines · plain
1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s2 3! CHECK-LABEL: func @_QPrandom_test_14subroutine random_test_15 ! CHECK-DAG: [[ss:%[0-9]+]] = fir.alloca {{.*}}random_test_1Ess6 ! CHECK-DAG: [[vv:%[0-9]+]] = fir.alloca {{.*}}random_test_1Evv7 integer ss, vv(40)8 ! CHECK-DAG: [[rr:%[0-9]+]] = fir.alloca {{.*}}random_test_1Err9 ! CHECK-DAG: [[aa:%[0-9]+]] = fir.alloca {{.*}}random_test_1Eaa10 real rr, aa(5)11 ! CHECK: fir.call @_FortranARandomInit(%true{{.*}}, %false{{.*}}) {{.*}}: (i1, i1) -> ()12 call random_init(.true., .false.)13 ! CHECK: [[box:%[0-9]+]] = fir.embox [[ss]]14 ! CHECK: [[argbox:%[0-9]+]] = fir.convert [[box]]15 ! CHECK: fir.call @_FortranARandomSeedSize([[argbox]]16 call random_seed(size=ss)17 print*, 'size: ', ss18 ! CHECK: fir.call @_FortranARandomSeedDefaultPut() {{.*}}: () -> ()19 call random_seed()20 ! CHECK: [[box:%[0-9]+]] = fir.embox [[rr]]21 ! CHECK: [[argbox:%[0-9]+]] = fir.convert [[box]]22 ! CHECK: fir.call @_FortranARandomNumber([[argbox]]23 call random_number(rr)24 print*, rr25 ! CHECK: [[box:%[0-9]+]] = fir.embox [[vv]]26 ! CHECK: [[argbox:%[0-9]+]] = fir.convert [[box]]27 ! CHECK: fir.call @_FortranARandomSeedGet([[argbox]]28 call random_seed(get=vv)29! print*, 'get: ', vv(1:ss)30 ! CHECK: [[box:%[0-9]+]] = fir.embox [[vv]]31 ! CHECK: [[argbox:%[0-9]+]] = fir.convert [[box]]32 ! CHECK: fir.call @_FortranARandomSeedPut([[argbox]]33 call random_seed(put=vv)34 print*, 'put: ', vv(1:ss)35 ! CHECK: [[box:%[0-9]+]] = fir.embox [[aa]]36 ! CHECK: [[argbox:%[0-9]+]] = fir.convert [[box]]37 ! CHECK: fir.call @_FortranARandomNumber([[argbox]]38 call random_number(aa)39 print*, aa40end41 42! CHECK-LABEL: func @_QPrandom_test_243subroutine random_test_244 integer :: size, get(5) = -945 call foo(size)46 call bar(size, get)47contains48 ! CHECK-LABEL: func private @_QFrandom_test_2Pfoo49 subroutine foo(size, put, get)50 ! CHECK: [[s1:%[0-9]+]] = fir.is_present %arg051 ! CHECK: [[s2:%[0-9]+]] = fir.embox %arg052 ! CHECK: [[s3:%[0-9]+]] = fir.absent !fir.box<i32>53 ! CHECK: [[s4:%[0-9]+]] = arith.select [[s1]], [[s2]], [[s3]] : !fir.box<i32>54 integer, optional :: size55 ! CHECK: [[p1:%[0-9]+]] = fir.is_present %arg156 ! CHECK: [[p2:%[0-9]+]] = fir.embox %arg157 ! CHECK: [[p3:%[0-9]+]] = fir.absent !fir.box<!fir.array<5xi32>>58 ! CHECK: [[p4:%[0-9]+]] = arith.select [[p1]], [[p2]], [[p3]] : !fir.box<!fir.array<5xi32>>59 integer, optional :: put(5)60 ! CHECK: [[g1:%[0-9]+]] = fir.is_present %arg261 ! CHECK: [[g2:%[0-9]+]] = fir.embox %arg262 ! CHECK: [[g3:%[0-9]+]] = fir.absent !fir.box<!fir.array<5xi32>>63 ! CHECK: [[g4:%[0-9]+]] = arith.select [[g1]], [[g2]], [[g3]] : !fir.box<!fir.array<5xi32>>64 integer, optional :: get(5)65 ! CHECK: [[s5:%[0-9]+]] = fir.convert [[s4]] : (!fir.box<i32>) -> !fir.box<none>66 ! CHECK: [[p5:%[0-9]+]] = fir.convert [[p4]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>67 ! CHECK: [[g5:%[0-9]+]] = fir.convert [[g4]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>68 ! CHECK: fir.call @_FortranARandomSeed([[s5]], [[p5]], [[g5]]69 call random_seed(size, put, get)70 print*, size71 end subroutine72 73 ! CHECK-LABEL: func private @_QFrandom_test_2Pbar74 subroutine bar(size, get, put)75 integer, optional :: size76 ! CHECK: [[p1:%[0-9]+]] = fir.is_present %arg277 ! CHECK: [[p2:%[0-9]+]] = fir.embox %arg278 ! CHECK: [[p3:%[0-9]+]] = fir.absent !fir.box<!fir.array<5xi32>>79 ! CHECK: [[p4:%[0-9]+]] = arith.select [[p1]], [[p2]], [[p3]] : !fir.box<!fir.array<5xi32>>80 integer, optional :: put(5)81 ! CHECK: [[g1:%[0-9]+]] = fir.is_present %arg182 ! CHECK: [[g2:%[0-9]+]] = fir.embox %arg183 ! CHECK: [[g3:%[0-9]+]] = fir.absent !fir.box<!fir.array<5xi32>>84 ! CHECK: [[g4:%[0-9]+]] = arith.select [[g1]], [[g2]], [[g3]] : !fir.box<!fir.array<5xi32>>85 integer, optional :: get(5)86 ! CHECK: [[s1:%[0-9]+]] = fir.absent !fir.box<none>87 ! CHECK: [[p5:%[0-9]+]] = fir.convert [[p4]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>88 ! CHECK: [[g5:%[0-9]+]] = fir.convert [[g4]] : (!fir.box<!fir.array<5xi32>>) -> !fir.box<none>89 ! CHECK: fir.call @_FortranARandomSeed([[s1]], [[p5]], [[g5]]90 call random_seed(put=put, get=get)91 print*, get(1:size+1) ! "extra" value should be -992 end subroutine93end94 95 call random_test_196 call random_test_297end98