[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / flang / test / Lower / associate-construct.f90
blob8aa5e50c611d9fd9033a2c8b75c40bf64c0707aa
1 ! RUN: bbc -emit-fir -o - %s | FileCheck %s
3 ! CHECK-LABEL: func @_QQmain
4 program p
5 ! CHECK-DAG: [[I:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEi"}
6 ! CHECK-DAG: [[N:%[0-9]+]] = fir.alloca i32 {{{.*}}uniq_name = "_QFEn"}
7 ! CHECK: [[T:%[0-9]+]] = fir.alloca !fir.array<3xi32> {bindc_name = "t", uniq_name = "_QFEt"}
8 integer :: n, foo, t(3)
9 ! CHECK: [[N]]
10 ! CHECK-COUNT-3: fir.coordinate_of [[T]]
11 n = 100; t(1) = 111; t(2) = 222; t(3) = 333
12 ! CHECK: fir.load [[N]]
13 ! CHECK: addi {{.*}} %c5
14 ! CHECK: fir.store %{{[0-9]*}} to [[B:%[0-9]+]]
15 ! CHECK: [[C:%[0-9]+]] = fir.coordinate_of [[T]]
16 ! CHECK: fir.call @_QPfoo
17 ! CHECK: fir.store %{{[0-9]*}} to [[D:%[0-9]+]]
18 associate (a => n, b => n+5, c => t(2), d => foo(7))
19 ! CHECK: fir.load [[N]]
20 ! CHECK: addi %{{[0-9]*}}, %c1
21 ! CHECK: fir.store %{{[0-9]*}} to [[N]]
22 a = a + 1
23 ! CHECK: fir.load [[C]]
24 ! CHECK: addi %{{[0-9]*}}, %c1
25 ! CHECK: fir.store %{{[0-9]*}} to [[C]]
26 c = c + 1
27 ! CHECK: fir.load [[N]]
28 ! CHECK: addi %{{[0-9]*}}, %c1
29 ! CHECK: fir.store %{{[0-9]*}} to [[N]]
30 n = n + 1
31 ! CHECK: fir.load [[N]]
32 ! CHECK: fir.embox [[T]]
33 ! CHECK: fir.load [[N]]
34 ! CHECK: fir.load [[B]]
35 ! CHECK: fir.load [[C]]
36 ! CHECK: fir.load [[D]]
37 print*, n, t, a, b, c, d ! expect: 102 111 223 333 102 105 223 7
38 end associate
40 call nest
42 do i=1,4
43 associate (x=>i)
44 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32>
45 ! CHECK: [[TWO:%.*]] = arith.constant 2 : i32
46 ! CHECK: arith.cmpi eq, [[IVAL]], [[TWO]] : i32
47 ! CHECK: ^bb
48 if (x==2) goto 9
49 ! CHECK: [[IVAL:%[0-9]+]] = fir.load [[I]] : !fir.ref<i32>
50 ! CHECK: [[THREE:%.*]] = arith.constant 3 : i32
51 ! CHECK: arith.cmpi eq, [[IVAL]], [[THREE]] : i32
52 ! CHECK: ^bb
53 ! CHECK: fir.call @_FortranAStopStatementText
54 ! CHECK: fir.unreachable
55 ! CHECK: ^bb
56 if (x==3) stop 'Halt'
57 ! CHECK: fir.call @_FortranAioOutputAscii
58 print*, "ok"
59 9 end associate
60 enddo
61 end
63 ! CHECK-LABEL: func @_QPfoo
64 integer function foo(x)
65 integer x
66 integer, save :: i = 0
67 i = i + x
68 foo = i
69 end function foo
71 ! CHECK-LABEL: func @_QPnest(
72 subroutine nest
73 integer, parameter :: n = 10
74 integer :: a(5), b(n)
75 associate (s => sequence(size(a)))
76 a = s
77 associate(t => sequence(n))
78 b = t
79 ! CHECK: cond_br %{{.*}}, [[BB1:\^bb[0-9]]], [[BB2:\^bb[0-9]]]
80 ! CHECK: [[BB1]]:
81 ! CHECK: br [[BB3:\^bb[0-9]]]
82 ! CHECK: [[BB2]]:
83 if (a(1) > b(1)) goto 9
84 end associate
85 a = a * a
86 end associate
87 ! CHECK: br [[BB3]]
88 ! CHECK: [[BB3]]:
89 9 print *, sum(a), sum(b) ! expect: 55 55
90 contains
91 function sequence(n)
92 integer sequence(n)
93 sequence = [(i,i=1,n)]
94 end function
95 end subroutine nest