[flang][OpenMP] 'no_openmp_constructs' added to clang broke flang build (#126145)
[llvm-project.git] / clang / test / SemaOpenACC / loop-construct-auto_seq_independent-ast.cpp
blob750b28dbda34399e653e344572fb2c5ddc3e4639
1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
3 // Test this with PCH.
4 // RUN: %clang_cc1 %s -fopenacc -emit-pch -o %t %s
5 // RUN: %clang_cc1 %s -fopenacc -include-pch %t -ast-dump-all | FileCheck %s
6 #ifndef PCH_HELPER
7 #define PCH_HELPER
9 void NormalUses() {
10 // CHECK: FunctionDecl{{.*}}NormalUses
11 // CHECK-NEXT: CompoundStmt
13 #pragma acc loop auto
14 for(int i = 0; i < 5; ++i){}
15 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
16 // CHECK-NEXT: auto clause
17 // CHECK-NEXT: ForStmt
18 // CHECK-NEXT: DeclStmt
19 // CHECK-NEXT: VarDecl{{.*}} i 'int'
20 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
21 // CHECK-NEXT: <<<NULL>>>
22 // CHECK-NEXT: BinaryOperator{{.*}}'<'
23 // CHECK-NEXT: ImplicitCastExpr
24 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
25 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
26 // CHECK-NEXT: UnaryOperator{{.*}}++
27 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
28 // CHECK-NEXT: CompoundStmt
30 #pragma acc loop seq
31 for(;;){}
32 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
33 // CHECK-NEXT: seq clause
34 // CHECK-NEXT: ForStmt
35 // CHECK-NEXT: <<<NULL>>>
36 // CHECK-NEXT: <<<NULL>>>
37 // CHECK-NEXT: <<<NULL>>>
38 // CHECK-NEXT: <<<NULL>>>
39 // CHECK-NEXT: CompoundStmt
41 #pragma acc loop independent
42 for(int i = 0; i < 5; ++i){}
43 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
44 // CHECK-NEXT: independent clause
45 // CHECK-NEXT: ForStmt
46 // CHECK-NEXT: DeclStmt
47 // CHECK-NEXT: VarDecl{{.*}} i 'int'
48 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
49 // CHECK-NEXT: <<<NULL>>>
50 // CHECK-NEXT: BinaryOperator{{.*}}'<'
51 // CHECK-NEXT: ImplicitCastExpr
52 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
53 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
54 // CHECK-NEXT: UnaryOperator{{.*}}++
55 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
56 // CHECK-NEXT: CompoundStmt
59 template<typename T>
60 void TemplUses() {
61 // CHECK: FunctionTemplateDecl{{.*}}TemplUses
62 // CHECK-NEXT: TemplateTypeParmDecl
63 // CHECK-NEXT: FunctionDecl{{.*}} TemplUses
64 // CHECK-NEXT: CompoundStmt
66 #pragma acc loop auto
67 for(int i = 0; i < 5; ++i){}
68 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
69 // CHECK-NEXT: auto clause
70 // CHECK-NEXT: ForStmt
71 // CHECK-NEXT: DeclStmt
72 // CHECK-NEXT: VarDecl{{.*}} i 'int'
73 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
74 // CHECK-NEXT: <<<NULL>>>
75 // CHECK-NEXT: BinaryOperator{{.*}}'<'
76 // CHECK-NEXT: ImplicitCastExpr
77 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
78 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
79 // CHECK-NEXT: UnaryOperator{{.*}}++
80 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
81 // CHECK-NEXT: CompoundStmt
83 #pragma acc loop seq
84 for(;;){}
85 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
86 // CHECK-NEXT: seq clause
87 // CHECK-NEXT: ForStmt
88 // CHECK-NEXT: <<<NULL>>>
89 // CHECK-NEXT: <<<NULL>>>
90 // CHECK-NEXT: <<<NULL>>>
91 // CHECK-NEXT: <<<NULL>>>
92 // CHECK-NEXT: CompoundStmt
94 #pragma acc loop independent
95 for(int i = 0; i < 5; ++i){}
96 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
97 // CHECK-NEXT: independent clause
98 // CHECK-NEXT: ForStmt
99 // CHECK-NEXT: DeclStmt
100 // CHECK-NEXT: VarDecl{{.*}} i 'int'
101 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
102 // CHECK-NEXT: <<<NULL>>>
103 // CHECK-NEXT: BinaryOperator{{.*}}'<'
104 // CHECK-NEXT: ImplicitCastExpr
105 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
106 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
107 // CHECK-NEXT: UnaryOperator{{.*}}++
108 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
109 // CHECK-NEXT: CompoundStmt
111 // Instantiations.
112 // CHECK-NEXT: FunctionDecl{{.*}}TemplUses 'void ()' implicit_instantiation
113 // CHECK-NEXT: TemplateArgument
114 // CHECK-NEXT: BuiltinType
115 // CHECK-NEXT: CompoundStmt
117 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
118 // CHECK-NEXT: auto clause
119 // CHECK-NEXT: ForStmt
120 // CHECK-NEXT: DeclStmt
121 // CHECK-NEXT: VarDecl{{.*}} i 'int'
122 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
123 // CHECK-NEXT: <<<NULL>>>
124 // CHECK-NEXT: BinaryOperator{{.*}}'<'
125 // CHECK-NEXT: ImplicitCastExpr
126 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
127 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
128 // CHECK-NEXT: UnaryOperator{{.*}}++
129 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
130 // CHECK-NEXT: CompoundStmt
132 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
133 // CHECK-NEXT: seq clause
134 // CHECK-NEXT: ForStmt
135 // CHECK-NEXT: <<<NULL>>>
136 // CHECK-NEXT: <<<NULL>>>
137 // CHECK-NEXT: <<<NULL>>>
138 // CHECK-NEXT: <<<NULL>>>
139 // CHECK-NEXT: CompoundStmt
141 // CHECK-NEXT: OpenACCLoopConstruct{{.*}}
142 // CHECK-NEXT: independent clause
143 // CHECK-NEXT: ForStmt
144 // CHECK-NEXT: DeclStmt
145 // CHECK-NEXT: VarDecl{{.*}} i 'int'
146 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
147 // CHECK-NEXT: <<<NULL>>>
148 // CHECK-NEXT: BinaryOperator{{.*}}'<'
149 // CHECK-NEXT: ImplicitCastExpr
150 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
151 // CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
152 // CHECK-NEXT: UnaryOperator{{.*}}++
153 // CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
154 // CHECK-NEXT: CompoundStmt
157 void Inst() {
158 TemplUses<int>();
160 #endif // PCH_HELPER