1 // RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
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
13 // CHECK-LABEL: NormalFunc
14 // CHECK-NEXT: CompoundStmt
17 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
18 #pragma acc shutdown if (some_int() < some_long())
19 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
20 // CHECK-NEXT: if clause
21 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'
22 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'long'
23 // CHECK-NEXT: CallExpr
24 // CHECK-NEXT: ImplicitCastExpr
25 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
26 // CHECK-NEXT: CallExpr
27 // CHECK-NEXT: ImplicitCastExpr
28 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
29 #pragma acc shutdown device_num(some_int())
30 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
31 // CHECK-NEXT: device_num clause
32 // CHECK-NEXT: CallExpr
33 // CHECK-NEXT: ImplicitCastExpr
34 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
35 #pragma acc shutdown device_type(T)
36 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
37 // CHECK-NEXT: device_type(T)
38 #pragma acc shutdown if (some_int() < some_long()) device_type(T) device_num(some_int())
39 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
40 // CHECK-NEXT: if clause
41 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '<'
42 // CHECK-NEXT: ImplicitCastExpr{{.*}} 'long'
43 // CHECK-NEXT: CallExpr
44 // CHECK-NEXT: ImplicitCastExpr
45 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
46 // CHECK-NEXT: CallExpr
47 // CHECK-NEXT: ImplicitCastExpr
48 // CHECK-NEXT: DeclRefExpr{{.*}}'some_long' 'long ()'
49 // CHECK-NEXT: device_type(T)
50 // CHECK-NEXT: device_num clause
51 // CHECK-NEXT: CallExpr
52 // CHECK-NEXT: ImplicitCastExpr
53 // CHECK-NEXT: DeclRefExpr{{.*}}'some_int' 'int ()'
58 // CHECK-LABEL: FunctionTemplateDecl {{.*}}TemplFunc
59 // CHECK-NEXT: TemplateTypeParmDecl
60 // CHECK-NEXT: FunctionDecl{{.*}}TemplFunc
61 // CHECK-NEXT: ParmVarDecl{{.*}} t 'T'
62 // CHECK-NEXT: CompoundStmt
65 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
66 #pragma acc shutdown if (T::value > t)
67 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
68 // CHECK-NEXT: if clause
69 // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '>'
70 // CHECK-NEXT: DependentScopeDeclRefExpr
71 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'
72 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
73 #pragma acc shutdown device_num(t)
74 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
75 // CHECK-NEXT: device_num clause
76 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
77 #pragma acc shutdown device_type(T)
78 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
79 // CHECK-NEXT: device_type(T)
80 #pragma acc shutdown if (T::value > t) device_type(T) device_num(t)
81 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
82 // CHECK-NEXT: if clause
83 // CHECK-NEXT: BinaryOperator{{.*}} '<dependent type>' '>'
84 // CHECK-NEXT: DependentScopeDeclRefExpr
85 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'T'
86 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
87 // CHECK-NEXT: device_type(T)
88 // CHECK-NEXT: device_num clause
89 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'T'
92 // CHECK-NEXT: FunctionDecl{{.*}} TemplFunc 'void (SomeStruct)' implicit_instantiation
93 // CHECK-NEXT: TemplateArgument type 'SomeStruct'
94 // CHECK-NEXT: RecordType{{.*}} 'SomeStruct'
95 // CHECK-NEXT: CXXRecord{{.*}} 'SomeStruct'
96 // CHECK-NEXT: ParmVarDecl{{.*}} t 'SomeStruct'
97 // CHECK-NEXT: CompoundStmt
99 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
101 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
102 // CHECK-NEXT: if clause
103 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '>'
104 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
105 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
106 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'SomeStruct'
107 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
108 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'unsigned int'
109 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int
110 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
112 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
113 // CHECK-NEXT: device_num clause
114 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
115 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
116 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int
117 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
119 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
120 // CHECK-NEXT: device_type(T)
122 // CHECK-NEXT: OpenACCShutdownConstruct{{.*}}shutdown
123 // CHECK-NEXT: if clause
124 // CHECK-NEXT: BinaryOperator{{.*}} 'bool' '>'
125 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
126 // CHECK-NEXT: DeclRefExpr{{.*}}'value' 'const unsigned int'
127 // CHECK-NEXT: NestedNameSpecifier{{.*}} 'SomeStruct'
128 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
129 // CHECK-NEXT: CXXMemberCallExpr{{.*}} 'unsigned int'
130 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int
131 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
132 // CHECK-NEXT: device_type(T)
133 // CHECK-NEXT: device_num clause
134 // CHECK-NEXT: ImplicitCastExpr{{.*}}'unsigned int'
135 // CHECK-NEXT: CXXMemberCallExpr{{.*}}'unsigned int'
136 // CHECK-NEXT: MemberExpr{{.*}} .operator unsigned int
137 // CHECK-NEXT: DeclRefExpr{{.*}} 't' 'SomeStruct'
141 static constexpr unsigned value
= 5;
146 TemplFunc(SomeStruct
{});