! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s ! CHECK-LABEL: func @_QQmain program p ! CHECK-DAG: [[I:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEi"} ! CHECK-DAG: [[N:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEn"} ! CHECK: [[T:%[0-9]+]] = fir.alloca !fir.array<3xi32> {bindc_name = "t", uniq_name = "_QFEt"} integer :: n, foo, t(3) ! CHECK: [[N]] ! CHECK-COUNT-3: fir.coordinate_of [[T]] n = 100; t(1) = 111; t(2) = 222; t(3) = 333 ! CHECK: fir.load [[N]] ! CHECK: addi {{.*}} %c5 ! CHECK: fir.store %{{[0-9]*}} to [[B:%[0-9]+]] ! CHECK: [[C:%[0-9]+]] = fir.coordinate_of [[T]] ! CHECK: fir.call @_QPfoo ! CHECK: fir.store %{{[0-9]*}} to [[D:%[0-9]+]] associate (a => n, b => n+5, c => t(2), d => foo(7)) ! CHECK: fir.load [[N]] ! CHECK: addi %{{[0-9]*}}, %c1 ! CHECK: fir.store %{{[0-9]*}} to [[N]] a = a + 1 ! CHECK: fir.load [[C]] ! CHECK: addi %{{[0-9]*}}, %c1 ! CHECK: fir.store %{{[0-9]*}} to [[C]] c = c + 1 ! CHECK: fir.load [[N]] ! CHECK: addi %{{[0-9]*}}, %c1 ! CHECK: fir.store %{{[0-9]*}} to [[N]] n = n + 1 ! CHECK: fir.load [[N]] ! CHECK: fir.embox [[T]] ! CHECK: fir.load [[N]] ! CHECK: fir.load [[B]] ! CHECK: fir.load [[C]] ! CHECK: fir.load [[D]] print*, n, t, a, b, c, d ! expect: 102 111 223 333 102 105 223 7 end associate call nest do i=1,4 associate (x=>i) ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref ! CHECK: [[TWO:%.*]] = arith.constant 2 : i32 ! CHECK: arith.cmpi eq, [[IVAL]], [[TWO]] : i32 ! CHECK: ^bb if (x==2) goto 9 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref ! CHECK: [[THREE:%.*]] = arith.constant 3 : i32 ! CHECK: arith.cmpi eq, [[IVAL]], [[THREE]] : i32 ! CHECK: ^bb ! CHECK: fir.call @_FortranAStopStatementText ! CHECK: fir.unreachable ! CHECK: ^bb if (x==3) stop 'Halt' ! CHECK: fir.call @_FortranAioOutputAscii print*, "ok" 9 end associate enddo end ! CHECK-LABEL: func @_QPfoo integer function foo(x) integer x integer, save :: i = 0 i = i + x foo = i end function foo ! CHECK-LABEL: func @_QPnest( subroutine nest integer, parameter :: n = 10 integer :: a(5), b(n) associate (s => sequence(size(a))) a = s associate(t => sequence(n)) b = t ! CHECK: cond_br %{{.*}}, [[BB1:\^bb[0-9]]], [[BB2:\^bb[0-9]]] ! CHECK: [[BB1]]: ! CHECK: br [[BB3:\^bb[0-9]]] ! CHECK: [[BB2]]: if (a(1) > b(1)) goto 9 end associate a = a * a end associate ! CHECK: br [[BB3]] ! CHECK: [[BB3]]: 9 print *, sum(a), sum(b) ! expect: 55 55 contains function sequence(n) integer sequence(n) sequence = [(i,i=1,n)] end function end subroutine nest