Skip to content

Commit 6b2de10

Browse files
committedNov 13, 2024·
[OpenACC] implement 'device_type' for combined constructs
This clause is pretty small/doesn't do much semantic-analysis-wise, , other than have two spellings and disallow certain clauses after it. However, as most of those aren't implemented yet, the diagnostic is left as a TODO.
1 parent 67fb268 commit 6b2de10

11 files changed

+514
-57
lines changed
 

‎clang/include/clang/Basic/DiagnosticSemaKinds.td

+1-1
Original file line numberDiff line numberDiff line change
@@ -12686,7 +12686,7 @@ def err_acc_var_not_pointer_type
1268612686
def note_acc_expected_pointer_var : Note<"expected variable of pointer type">;
1268712687
def err_acc_clause_after_device_type
1268812688
: Error<"OpenACC clause '%0' may not follow a '%1' clause in a "
12689-
"%select{'%3'|compute}2 construct">;
12689+
"'%2' construct">;
1269012690
def err_acc_clause_cannot_combine
1269112691
: Error<"OpenACC clause '%0' may not appear on the same construct as a "
1269212692
"'%1' clause on a '%2' construct">;

‎clang/lib/Sema/SemaOpenACC.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,6 @@ bool checkValidAfterDeviceType(
502502
}
503503
S.Diag(NewClause.getBeginLoc(), diag::err_acc_clause_after_device_type)
504504
<< NewClause.getClauseKind() << DeviceTypeClause.getClauseKind()
505-
<< isOpenACCComputeDirectiveKind(NewClause.getDirectiveKind())
506505
<< NewClause.getDirectiveKind();
507506
S.Diag(DeviceTypeClause.getBeginLoc(), diag::note_acc_previous_clause_here);
508507
return true;
@@ -999,12 +998,13 @@ OpenACCClause *SemaOpenACCClauseVisitor::VisitWaitClause(
999998

1000999
OpenACCClause *SemaOpenACCClauseVisitor::VisitDeviceTypeClause(
10011000
SemaOpenACC::OpenACCParsedClause &Clause) {
1002-
// Restrictions only properly implemented on 'compute' and 'loop'
1003-
// constructs, and 'compute'/'loop' constructs are the only construct that
1004-
// can do anything with this yet, so skip/treat as unimplemented in this
1005-
// case.
1001+
// Restrictions only properly implemented on 'compute', 'combined', and
1002+
// 'loop' constructs, and 'compute'/'combined'/'loop' constructs are the only
1003+
// construct that can do anything with this yet, so skip/treat as
1004+
// unimplemented in this case.
10061005
if (!isOpenACCComputeDirectiveKind(Clause.getDirectiveKind()) &&
1007-
Clause.getDirectiveKind() != OpenACCDirectiveKind::Loop)
1006+
Clause.getDirectiveKind() != OpenACCDirectiveKind::Loop &&
1007+
!isOpenACCCombinedDirectiveKind(Clause.getDirectiveKind()))
10081008
return isNotImplemented();
10091009

10101010
// TODO OpenACC: Once we get enough of the CodeGen implemented that we have

‎clang/test/AST/ast-print-openacc-combined-construct.cpp

+41
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,45 @@ void foo() {
3131
// CHECK-NEXT: ;
3232
#pragma acc kernels loop independent
3333
for(int i = 0;i<5;++i);
34+
35+
bool SomeB;
36+
struct SomeStruct{} SomeStructImpl;
37+
38+
//CHECK: #pragma acc parallel loop dtype(SomeB)
39+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
40+
// CHECK-NEXT: ;
41+
#pragma acc parallel loop dtype(SomeB)
42+
for(int i = 0;i<5;++i);
43+
44+
//CHECK: #pragma acc serial loop device_type(SomeStruct)
45+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
46+
// CHECK-NEXT: ;
47+
#pragma acc serial loop device_type(SomeStruct)
48+
for(int i = 0;i<5;++i);
49+
50+
//CHECK: #pragma acc kernels loop device_type(int)
51+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
52+
// CHECK-NEXT: ;
53+
#pragma acc kernels loop device_type(int)
54+
for(int i = 0;i<5;++i);
55+
56+
//CHECK: #pragma acc parallel loop dtype(bool)
57+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
58+
// CHECK-NEXT: ;
59+
#pragma acc parallel loop dtype(bool)
60+
for(int i = 0;i<5;++i);
61+
62+
//CHECK: #pragma acc serial loop device_type(SomeStructImpl)
63+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
64+
// CHECK-NEXT: ;
65+
#pragma acc serial loop device_type (SomeStructImpl)
66+
for(int i = 0;i<5;++i);
67+
68+
// CHECK: #pragma acc kernels loop dtype(AnotherIdent)
69+
// CHECK-NEXT: for (int i = 0; i < 5; ++i)
70+
// CHECK-NEXT: ;
71+
#pragma acc kernels loop dtype(AnotherIdent)
72+
for(int i = 0;i<5;++i);
73+
74+
3475
}

‎clang/test/SemaOpenACC/combined-construct-auto_seq_independent-clauses.c

-12
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,8 @@ void uses() {
195195
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
196196
#pragma acc parallel loop auto default_async(1)
197197
for(unsigned i = 0; i < 5; ++i);
198-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
199198
#pragma acc parallel loop auto device_type(*)
200199
for(unsigned i = 0; i < 5; ++i);
201-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
202200
#pragma acc parallel loop auto dtype(*)
203201
for(unsigned i = 0; i < 5; ++i);
204202
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
@@ -371,10 +369,8 @@ void uses() {
371369
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
372370
#pragma acc parallel loop default_async(1) auto
373371
for(unsigned i = 0; i < 5; ++i);
374-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
375372
#pragma acc parallel loop device_type(*) auto
376373
for(unsigned i = 0; i < 5; ++i);
377-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
378374
#pragma acc parallel loop dtype(*) auto
379375
for(unsigned i = 0; i < 5; ++i);
380376
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
@@ -548,10 +544,8 @@ void uses() {
548544
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
549545
#pragma acc parallel loop independent default_async(1)
550546
for(unsigned i = 0; i < 5; ++i);
551-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
552547
#pragma acc parallel loop independent device_type(*)
553548
for(unsigned i = 0; i < 5; ++i);
554-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
555549
#pragma acc parallel loop independent dtype(*)
556550
for(unsigned i = 0; i < 5; ++i);
557551
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
@@ -724,10 +718,8 @@ void uses() {
724718
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
725719
#pragma acc parallel loop default_async(1) independent
726720
for(unsigned i = 0; i < 5; ++i);
727-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
728721
#pragma acc parallel loop device_type(*) independent
729722
for(unsigned i = 0; i < 5; ++i);
730-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
731723
#pragma acc parallel loop dtype(*) independent
732724
for(unsigned i = 0; i < 5; ++i);
733725
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
@@ -907,10 +899,8 @@ void uses() {
907899
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
908900
#pragma acc parallel loop seq default_async(1)
909901
for(unsigned i = 0; i < 5; ++i);
910-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
911902
#pragma acc parallel loop seq device_type(*)
912903
for(unsigned i = 0; i < 5; ++i);
913-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
914904
#pragma acc parallel loop seq dtype(*)
915905
for(unsigned i = 0; i < 5; ++i);
916906
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
@@ -1089,10 +1079,8 @@ void uses() {
10891079
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented}}
10901080
#pragma acc parallel loop default_async(1) seq
10911081
for(unsigned i = 0; i < 5; ++i);
1092-
// expected-warning@+1{{OpenACC clause 'device_type' not yet implemented}}
10931082
#pragma acc parallel loop device_type(*) seq
10941083
for(unsigned i = 0; i < 5; ++i);
1095-
// expected-warning@+1{{OpenACC clause 'dtype' not yet implemented}}
10961084
#pragma acc parallel loop dtype(*) seq
10971085
for(unsigned i = 0; i < 5; ++i);
10981086
// TODOexpected-error@+1{{OpenACC 'async' clause is not valid on 'parallel loop' directive}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
// RUN: %clang_cc1 %s -fopenacc -ast-dump | FileCheck %s
2+
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
8+
9+
struct SomeS{};
10+
void NormalUses() {
11+
// CHECK: FunctionDecl{{.*}}NormalUses
12+
// CHECK-NEXT: CompoundStmt
13+
14+
SomeS SomeImpl;
15+
// CHECK-NEXT: DeclStmt
16+
// CHECK-NEXT: VarDecl{{.*}} SomeImpl 'SomeS'
17+
// CHECK-NEXT: CXXConstructExpr
18+
bool SomeVar;
19+
// CHECK-NEXT: DeclStmt
20+
// CHECK-NEXT: VarDecl{{.*}} SomeVar 'bool'
21+
22+
#pragma acc parallel loop device_type(SomeS) dtype(SomeImpl)
23+
for(int i = 0; i < 5; ++i){}
24+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
25+
// CHECK-NEXT: device_type(SomeS)
26+
// CHECK-NEXT: dtype(SomeImpl)
27+
// CHECK-NEXT: ForStmt
28+
// CHECK-NEXT: DeclStmt
29+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
30+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
31+
// CHECK-NEXT: <<<NULL>>>
32+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
33+
// CHECK-NEXT: ImplicitCastExpr
34+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
35+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
36+
// CHECK-NEXT: UnaryOperator{{.*}}++
37+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
38+
// CHECK-NEXT: CompoundStmt
39+
#pragma acc serial loop device_type(SomeVar) dtype(int)
40+
for(int i = 0; i < 5; ++i){}
41+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop
42+
// CHECK-NEXT: device_type(SomeVar)
43+
// CHECK-NEXT: dtype(int)
44+
// CHECK-NEXT: ForStmt
45+
// CHECK-NEXT: DeclStmt
46+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
47+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
48+
// CHECK-NEXT: <<<NULL>>>
49+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
50+
// CHECK-NEXT: ImplicitCastExpr
51+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
52+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
53+
// CHECK-NEXT: UnaryOperator{{.*}}++
54+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
55+
// CHECK-NEXT: CompoundStmt
56+
#pragma acc kernels loop device_type(private) dtype(struct)
57+
for(int i = 0; i < 5; ++i){}
58+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop
59+
// CHECK-NEXT: device_type(private)
60+
// CHECK-NEXT: dtype(struct)
61+
// CHECK-NEXT: ForStmt
62+
// CHECK-NEXT: DeclStmt
63+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
64+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
65+
// CHECK-NEXT: <<<NULL>>>
66+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
67+
// CHECK-NEXT: ImplicitCastExpr
68+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
69+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
70+
// CHECK-NEXT: UnaryOperator{{.*}}++
71+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
72+
// CHECK-NEXT: CompoundStmt
73+
#pragma acc parallel loop device_type(private) dtype(class)
74+
for(int i = 0; i < 5; ++i){}
75+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
76+
// CHECK-NEXT: device_type(private)
77+
// CHECK-NEXT: dtype(class)
78+
// CHECK-NEXT: ForStmt
79+
// CHECK-NEXT: DeclStmt
80+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
81+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
82+
// CHECK-NEXT: <<<NULL>>>
83+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
84+
// CHECK-NEXT: ImplicitCastExpr
85+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
86+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
87+
// CHECK-NEXT: UnaryOperator{{.*}}++
88+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
89+
// CHECK-NEXT: CompoundStmt
90+
#pragma acc serial loop device_type(float) dtype(*)
91+
for(int i = 0; i < 5; ++i){}
92+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} serial loop
93+
// CHECK-NEXT: device_type(float)
94+
// CHECK-NEXT: dtype(*)
95+
// CHECK-NEXT: ForStmt
96+
// CHECK-NEXT: DeclStmt
97+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
98+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
99+
// CHECK-NEXT: <<<NULL>>>
100+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
101+
// CHECK-NEXT: ImplicitCastExpr
102+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
103+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
104+
// CHECK-NEXT: UnaryOperator{{.*}}++
105+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
106+
// CHECK-NEXT: CompoundStmt
107+
#pragma acc kernels loop device_type(float, int) dtype(*)
108+
for(int i = 0; i < 5; ++i){}
109+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} kernels loop
110+
// CHECK-NEXT: device_type(float, int)
111+
// CHECK-NEXT: dtype(*)
112+
// CHECK-NEXT: ForStmt
113+
// CHECK-NEXT: DeclStmt
114+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
115+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
116+
// CHECK-NEXT: <<<NULL>>>
117+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
118+
// CHECK-NEXT: ImplicitCastExpr
119+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
120+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
121+
// CHECK-NEXT: UnaryOperator{{.*}}++
122+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
123+
// CHECK-NEXT: CompoundStmt
124+
}
125+
126+
template<typename T>
127+
void TemplUses() {
128+
// CHECK-NEXT: FunctionTemplateDecl{{.*}}TemplUses
129+
// CHECK-NEXT: TemplateTypeParmDecl{{.*}}T
130+
// CHECK-NEXT: FunctionDecl{{.*}}TemplUses
131+
// CHECK-NEXT: CompoundStmt
132+
#pragma acc parallel loop device_type(T) dtype(T)
133+
for(int i = 0; i < 5; ++i){}
134+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
135+
// CHECK-NEXT: device_type(T)
136+
// CHECK-NEXT: dtype(T)
137+
// CHECK-NEXT: ForStmt
138+
// CHECK-NEXT: DeclStmt
139+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
140+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
141+
// CHECK-NEXT: <<<NULL>>>
142+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
143+
// CHECK-NEXT: ImplicitCastExpr
144+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
145+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
146+
// CHECK-NEXT: UnaryOperator{{.*}}++
147+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
148+
// CHECK-NEXT: CompoundStmt
149+
150+
151+
// Instantiations
152+
// CHECK-NEXT: FunctionDecl{{.*}} TemplUses 'void ()' implicit_instantiation
153+
// CHECK-NEXT: TemplateArgument type 'int'
154+
// CHECK-NEXT: BuiltinType{{.*}} 'int'
155+
// CHECK-NEXT: CompoundStmt
156+
157+
// CHECK-NEXT: OpenACCCombinedConstruct{{.*}} parallel loop
158+
// CHECK-NEXT: device_type(T)
159+
// CHECK-NEXT: dtype(T)
160+
// CHECK-NEXT: ForStmt
161+
// CHECK-NEXT: DeclStmt
162+
// CHECK-NEXT: VarDecl{{.*}} i 'int'
163+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 0
164+
// CHECK-NEXT: <<<NULL>>>
165+
// CHECK-NEXT: BinaryOperator{{.*}}'<'
166+
// CHECK-NEXT: ImplicitCastExpr
167+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
168+
// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 5
169+
// CHECK-NEXT: UnaryOperator{{.*}}++
170+
// CHECK-NEXT: DeclRefExpr{{.*}}'i' 'int'
171+
// CHECK-NEXT: CompoundStmt
172+
}
173+
174+
void Inst() {
175+
TemplUses<int>();
176+
}
177+
178+
#endif // PCH_HELPER
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
// RUN: %clang_cc1 %s -fopenacc -verify
2+
3+
#define MACRO +FOO
4+
5+
void uses() {
6+
typedef struct S{} STy;
7+
STy SImpl;
8+
9+
#pragma acc parallel loop device_type(I)
10+
for(int i = 0; i < 5; ++i);
11+
#pragma acc serial loop device_type(S) dtype(STy)
12+
for(int i = 0; i < 5; ++i);
13+
#pragma acc kernels loop dtype(SImpl)
14+
for(int i = 0; i < 5; ++i);
15+
#pragma acc kernels loop dtype(int) device_type(*)
16+
for(int i = 0; i < 5; ++i);
17+
#pragma acc kernels loop dtype(true) device_type(false)
18+
for(int i = 0; i < 5; ++i);
19+
20+
// expected-error@+1{{expected identifier}}
21+
#pragma acc kernels loop dtype(int, *)
22+
for(int i = 0; i < 5; ++i);
23+
24+
#pragma acc parallel loop device_type(I, int)
25+
for(int i = 0; i < 5; ++i);
26+
// expected-error@+2{{expected ','}}
27+
// expected-error@+1{{expected identifier}}
28+
#pragma acc kernels loop dtype(int{})
29+
for(int i = 0; i < 5; ++i);
30+
// expected-error@+1{{expected identifier}}
31+
#pragma acc kernels loop dtype(5)
32+
for(int i = 0; i < 5; ++i);
33+
// expected-error@+1{{expected identifier}}
34+
#pragma acc kernels loop dtype(MACRO)
35+
for(int i = 0; i < 5; ++i);
36+
37+
// Compute constructs allow 'async', 'wait', num_gangs', 'num_workers',
38+
// 'vector_length' after 'device_type', loop allows 'collapse', 'gang',
39+
// 'worker', 'vector', 'seq', 'independent', 'auto', and 'tile' after
40+
// 'device_type'.
41+
42+
//expected-warning@+1{{OpenACC clause 'vector' not yet implemented, clause ignored}}
43+
#pragma acc parallel loop device_type(*) vector
44+
for(int i = 0; i < 5; ++i);
45+
46+
// TODOexpected-error@+2{{OpenACC clause 'finalize' may not follow a 'device_type' clause in a 'serial loop' construct}}
47+
// TODOexpected-note@+1{{previous clause is here}}
48+
// expected-warning@+1{{OpenACC clause 'finalize' not yet implemented, clause ignored}}
49+
#pragma acc serial loop device_type(*) finalize
50+
for(int i = 0; i < 5; ++i);
51+
// TODOexpected-error@+2{{OpenACC clause 'if_present' may not follow a 'device_type' clause in a 'kernels loop' construct}}
52+
// TODOexpected-note@+1{{previous clause is here}}
53+
// expected-warning@+1{{OpenACC clause 'if_present' not yet implemented, clause ignored}}
54+
#pragma acc kernels loop device_type(*) if_present
55+
for(int i = 0; i < 5; ++i);
56+
#pragma acc parallel loop device_type(*) seq
57+
for(int i = 0; i < 5; ++i);
58+
#pragma acc serial loop device_type(*) independent
59+
for(int i = 0; i < 5; ++i);
60+
#pragma acc kernels loop device_type(*) auto
61+
for(int i = 0; i < 5; ++i);
62+
// expected-warning@+1{{OpenACC clause 'worker' not yet implemented, clause ignored}}
63+
#pragma acc parallel loop device_type(*) worker
64+
for(int i = 0; i < 5; ++i);
65+
// TODOexpected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'loop' construct}}
66+
// TODOexpected-note@+1{{previous clause is here}}
67+
// expected-warning@+1{{OpenACC clause 'nohost' not yet implemented, clause ignored}}
68+
#pragma acc serial loop device_type(*) nohost
69+
for(int i = 0; i < 5; ++i);
70+
// expected-warning@+1{{OpenACC clause 'default' not yet implemented, clause ignored}}
71+
#pragma acc kernels loop device_type(*) default(none)
72+
for(int i = 0; i < 5; ++i);
73+
// expected-warning@+1{{OpenACC clause 'if' not yet implemented, clause ignored}}
74+
#pragma acc parallel loop device_type(*) if(1)
75+
for(int i = 0; i < 5; ++i);
76+
// expected-warning@+1{{OpenACC clause 'self' not yet implemented, clause ignored}}
77+
#pragma acc serial loop device_type(*) self
78+
for(int i = 0; i < 5; ++i);
79+
80+
int Var;
81+
int *VarPtr;
82+
// expected-warning@+1{{OpenACC clause 'copy' not yet implemented, clause ignored}}
83+
#pragma acc kernels loop device_type(*) copy(Var)
84+
for(int i = 0; i < 5; ++i);
85+
// expected-warning@+2{{OpenACC clause name 'pcopy' is a deprecated clause name and is now an alias for 'copy'}}
86+
// expected-warning@+1{{OpenACC clause 'pcopy' not yet implemented, clause ignored}}
87+
#pragma acc parallel loop device_type(*) pcopy(Var)
88+
for(int i = 0; i < 5; ++i);
89+
// expected-warning@+2{{OpenACC clause name 'present_or_copy' is a deprecated clause name and is now an alias for 'copy'}}
90+
// expected-warning@+1{{OpenACC clause 'present_or_copy' not yet implemented, clause ignored}}
91+
#pragma acc serial loop device_type(*) present_or_copy(Var)
92+
for(int i = 0; i < 5; ++i);
93+
// TODOexpected-error@+2{{OpenACC clause 'use_device' may not follow a 'device_type' clause in a 'loop' construct}}
94+
// TODOexpected-note@+1{{previous clause is here}}
95+
// expected-warning@+1{{OpenACC clause 'use_device' not yet implemented, clause ignored}}
96+
#pragma acc kernels loop device_type(*) use_device(Var)
97+
for(int i = 0; i < 5; ++i);
98+
// expected-warning@+1{{OpenACC clause 'attach' not yet implemented, clause ignored}}
99+
#pragma acc parallel loop device_type(*) attach(Var)
100+
for(int i = 0; i < 5; ++i);
101+
// TODOexpected-error@+2{{OpenACC clause 'delete' may not follow a 'device_type' clause in a 'loop' construct}}
102+
// TODOexpected-note@+1{{previous clause is here}}
103+
// expected-warning@+1{{OpenACC clause 'delete' not yet implemented, clause ignored}}
104+
#pragma acc serial loop device_type(*) delete(Var)
105+
for(int i = 0; i < 5; ++i);
106+
// TODOexpected-error@+2{{OpenACC clause 'detach' may not follow a 'device_type' clause in a 'loop' construct}}
107+
// TODOexpected-note@+1{{previous clause is here}}
108+
// expected-warning@+1{{OpenACC clause 'detach' not yet implemented, clause ignored}}
109+
#pragma acc kernels loop device_type(*) detach(Var)
110+
for(int i = 0; i < 5; ++i);
111+
// TODOexpected-error@+2{{OpenACC clause 'device' may not follow a 'device_type' clause in a 'loop' construct}}
112+
// TODOexpected-note@+1{{previous clause is here}}
113+
// expected-warning@+1{{OpenACC clause 'device' not yet implemented, clause ignored}}
114+
#pragma acc parallel loop device_type(*) device(VarPtr)
115+
for(int i = 0; i < 5; ++i);
116+
// expected-warning@+1{{OpenACC clause 'deviceptr' not yet implemented, clause ignored}}
117+
#pragma acc serial loop device_type(*) deviceptr(VarPtr)
118+
for(int i = 0; i < 5; ++i);
119+
// TODOexpected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a 'loop' construct}}
120+
// TODOexpected-note@+1{{previous clause is here}}
121+
// expected-warning@+1{{OpenACC clause 'device_resident' not yet implemented, clause ignored}}
122+
#pragma acc kernels loop device_type(*) device_resident(VarPtr)
123+
for(int i = 0; i < 5; ++i);
124+
// expected-warning@+1{{OpenACC clause 'firstprivate' not yet implemented, clause ignored}}
125+
#pragma acc parallel loop device_type(*) firstprivate(Var)
126+
for(int i = 0; i < 5; ++i);
127+
// TODOexpected-error@+2{{OpenACC clause 'host' may not follow a 'device_type' clause in a 'loop' construct}}
128+
// TODOexpected-note@+1{{previous clause is here}}
129+
// expected-warning@+1{{OpenACC clause 'host' not yet implemented, clause ignored}}
130+
#pragma acc serial loop device_type(*) host(Var)
131+
for(int i = 0; i < 5; ++i);
132+
// TODOexpected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a 'loop' construct}}
133+
// TODOexpected-note@+1{{previous clause is here}}
134+
// expected-warning@+1{{OpenACC clause 'link' not yet implemented, clause ignored}}
135+
#pragma acc parallel loop device_type(*) link(Var)
136+
for(int i = 0; i < 5; ++i);
137+
// expected-warning@+1{{OpenACC clause 'no_create' not yet implemented, clause ignored}}
138+
#pragma acc serial loop device_type(*) no_create(Var)
139+
for(int i = 0; i < 5; ++i);
140+
// expected-warning@+1{{OpenACC clause 'present' not yet implemented, clause ignored}}
141+
#pragma acc kernels loop device_type(*) present(Var)
142+
for(int i = 0; i < 5; ++i);
143+
// TODOexpected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'loop' construct}}
144+
// TODOexpected-note@+1{{previous clause is here}}
145+
// expected-warning@+1{{OpenACC clause 'private' not yet implemented, clause ignored}}
146+
#pragma acc parallel loop device_type(*) private(Var)
147+
for(int i = 0; i < 5; ++i);
148+
// expected-warning@+1{{OpenACC clause 'copyout' not yet implemented, clause ignored}}
149+
#pragma acc serial loop device_type(*) copyout(Var)
150+
for(int i = 0; i < 5; ++i);
151+
// expected-warning@+2{{OpenACC clause name 'pcopyout' is a deprecated clause name and is now an alias for 'copyout'}}
152+
// expected-warning@+1{{OpenACC clause 'pcopyout' not yet implemented, clause ignored}}
153+
#pragma acc serial loop device_type(*) pcopyout(Var)
154+
for(int i = 0; i < 5; ++i);
155+
// expected-warning@+2{{OpenACC clause name 'present_or_copyout' is a deprecated clause name and is now an alias for 'copyout'}}
156+
// expected-warning@+1{{OpenACC clause 'present_or_copyout' not yet implemented, clause ignored}}
157+
#pragma acc parallel loop device_type(*) present_or_copyout(Var)
158+
for(int i = 0; i < 5; ++i);
159+
// expected-warning@+1{{OpenACC clause 'copyin' not yet implemented, clause ignored}}
160+
#pragma acc serial loop device_type(*) copyin(Var)
161+
for(int i = 0; i < 5; ++i);
162+
// expected-warning@+2{{OpenACC clause name 'pcopyin' is a deprecated clause name and is now an alias for 'copyin'}}
163+
// expected-warning@+1{{OpenACC clause 'pcopyin' not yet implemented, clause ignored}}
164+
#pragma acc serial loop device_type(*) pcopyin(Var)
165+
for(int i = 0; i < 5; ++i);
166+
// expected-warning@+2{{OpenACC clause name 'present_or_copyin' is a deprecated clause name and is now an alias for 'copyin'}}
167+
// expected-warning@+1{{OpenACC clause 'present_or_copyin' not yet implemented, clause ignored}}
168+
#pragma acc parallel loop device_type(*) present_or_copyin(Var)
169+
for(int i = 0; i < 5; ++i);
170+
// expected-warning@+1{{OpenACC clause 'create' not yet implemented, clause ignored}}
171+
#pragma acc serial loop device_type(*) create(Var)
172+
for(int i = 0; i < 5; ++i);
173+
// expected-warning@+2{{OpenACC clause name 'pcreate' is a deprecated clause name and is now an alias for 'create'}}
174+
// expected-warning@+1{{OpenACC clause 'pcreate' not yet implemented, clause ignored}}
175+
#pragma acc serial loop device_type(*) pcreate(Var)
176+
for(int i = 0; i < 5; ++i);
177+
// expected-warning@+2{{OpenACC clause name 'present_or_create' is a deprecated clause name and is now an alias for 'create'}}
178+
// expected-warning@+1{{OpenACC clause 'present_or_create' not yet implemented, clause ignored}}
179+
#pragma acc parallel loop device_type(*) present_or_create(Var)
180+
for(int i = 0; i < 5; ++i);
181+
// TODOexpected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'loop' construct}}
182+
// TODOexpected-note@+1{{previous clause is here}}
183+
// expected-warning@+1{{OpenACC clause 'reduction' not yet implemented, clause ignored}}
184+
#pragma acc serial loop device_type(*) reduction(+:Var)
185+
for(int i = 0; i < 5; ++i);
186+
// expected-warning@+1{{OpenACC clause 'collapse' not yet implemented, clause ignored}}
187+
#pragma acc serial loop device_type(*) collapse(1)
188+
for(int i = 0; i < 5; ++i);
189+
// TODOexpected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a 'loop' construct}}
190+
// TODOexpected-note@+1{{previous clause is here}}
191+
// expected-warning@+1{{OpenACC clause 'bind' not yet implemented, clause ignored}}
192+
#pragma acc parallel loop device_type(*) bind(Var)
193+
for(int i = 0; i < 5; ++i);
194+
// expected-error@+1{{OpenACC 'vector_length' clause is not valid on 'serial loop' directive}}
195+
#pragma acc serial loop device_type(*) vector_length(1)
196+
for(int i = 0; i < 5; ++i);
197+
// expected-error@+1{{OpenACC 'num_gangs' clause is not valid on 'serial loop' directive}}
198+
#pragma acc serial loop device_type(*) num_gangs(1)
199+
for(int i = 0; i < 5; ++i);
200+
// expected-warning@+1{{OpenACC clause 'num_workers' not yet implemented, clause ignored}}
201+
#pragma acc parallel loop device_type(*) num_workers(1)
202+
for(int i = 0; i < 5; ++i);
203+
// TODOexpected-error@+2{{OpenACC clause 'device_num' may not follow a 'device_type' clause in a 'loop' construct}}
204+
// TODOexpected-note@+1{{previous clause is here}}
205+
// expected-warning@+1{{OpenACC clause 'device_num' not yet implemented, clause ignored}}
206+
#pragma acc serial loop device_type(*) device_num(1)
207+
for(int i = 0; i < 5; ++i);
208+
// TODOexpected-error@+2{{OpenACC clause 'default_async' may not follow a 'device_type' clause in a 'loop' construct}}
209+
// TODOexpected-note@+1{{previous clause is here}}
210+
// expected-warning@+1{{OpenACC clause 'default_async' not yet implemented, clause ignored}}
211+
#pragma acc serial loop device_type(*) default_async(1)
212+
for(int i = 0; i < 5; ++i);
213+
// expected-warning@+1{{OpenACC clause 'async' not yet implemented, clause ignored}}
214+
#pragma acc parallel loop device_type(*) async
215+
for(int i = 0; i < 5; ++i);
216+
217+
// expected-warning@+1{{OpenACC clause 'tile' not yet implemented, clause ignored}}
218+
#pragma acc serial loop device_type(*) tile(*, 1)
219+
for(int j = 0; j < 5; ++j)
220+
for(int i = 0; i < 5; ++i);
221+
222+
// expected-warning@+1{{OpenACC clause 'gang' not yet implemented, clause ignored}}
223+
#pragma acc serial loop dtype(*) gang
224+
for(int i = 0; i < 5; ++i);
225+
// expected-warning@+1{{OpenACC clause 'wait' not yet implemented, clause ignored}}
226+
#pragma acc parallel loop device_type(*) wait
227+
for(int i = 0; i < 5; ++i);
228+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// RUN: %clang_cc1 %s -fopenacc -verify
2+
3+
template<typename T>
4+
void TemplUses() {
5+
#pragma acc parallel loop device_type(I)
6+
for(int i = 0; i < 5; ++i);
7+
#pragma acc serial loop dtype(*)
8+
for(int i = 0; i < 5; ++i);
9+
#pragma acc kernels loop device_type(class)
10+
for(int i = 0; i < 5; ++i);
11+
#pragma acc parallel loop device_type(private)
12+
for(int i = 0; i < 5; ++i);
13+
#pragma acc serial loop device_type(bool)
14+
for(int i = 0; i < 5; ++i);
15+
#pragma acc kernels loop dtype(true) device_type(false)
16+
for(int i = 0; i < 5; ++i);
17+
// expected-error@+2{{expected ','}}
18+
// expected-error@+1{{expected identifier}}
19+
#pragma acc kernels loop device_type(T::value)
20+
for(int i = 0; i < 5; ++i);
21+
}
22+
23+
void Inst() {
24+
TemplUses<int>(); // #INST
25+
}

‎clang/test/SemaOpenACC/combined-construct.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ struct SomeRAIterator {
2828
int operator*();
2929
void operator+=(int);
3030
bool operator!=(SomeRAIterator&);
31-
// TODO
3231
};
3332

3433
struct HasIteratorCollection {

‎clang/test/SemaOpenACC/compute-construct-device_type-clause.c

+35-35
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ void uses() {
4444

4545
// Only 'async', 'wait', num_gangs', 'num_workers', 'vector_length' allowed after 'device_type'.
4646

47-
// expected-error@+2{{OpenACC clause 'finalize' may not follow a 'device_type' clause in a compute construct}}
47+
// expected-error@+2{{OpenACC clause 'finalize' may not follow a 'device_type' clause in a 'kernels' construct}}
4848
// expected-note@+1{{previous clause is here}}
4949
#pragma acc kernels device_type(*) finalize
5050
while(1);
51-
// expected-error@+2{{OpenACC clause 'if_present' may not follow a 'device_type' clause in a compute construct}}
51+
// expected-error@+2{{OpenACC clause 'if_present' may not follow a 'device_type' clause in a 'kernels' construct}}
5252
// expected-note@+1{{previous clause is here}}
5353
#pragma acc kernels device_type(*) if_present
5454
while(1);
@@ -64,133 +64,133 @@ void uses() {
6464
// expected-error@+1{{OpenACC 'worker' clause is not valid on 'kernels' directive}}
6565
#pragma acc kernels device_type(*) worker
6666
while(1);
67-
// expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a compute construct}}
67+
// expected-error@+2{{OpenACC clause 'nohost' may not follow a 'device_type' clause in a 'kernels' construct}}
6868
// expected-note@+1{{previous clause is here}}
6969
#pragma acc kernels device_type(*) nohost
7070
while(1);
71-
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a compute construct}}
71+
// expected-error@+2{{OpenACC clause 'default' may not follow a 'device_type' clause in a 'kernels' construct}}
7272
// expected-note@+1{{previous clause is here}}
7373
#pragma acc kernels device_type(*) default(none)
7474
while(1);
75-
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a compute construct}}
75+
// expected-error@+2{{OpenACC clause 'if' may not follow a 'device_type' clause in a 'kernels' construct}}
7676
// expected-note@+1{{previous clause is here}}
7777
#pragma acc kernels device_type(*) if(1)
7878
while(1);
79-
// expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a compute construct}}
79+
// expected-error@+2{{OpenACC clause 'self' may not follow a 'device_type' clause in a 'kernels' construct}}
8080
// expected-note@+1{{previous clause is here}}
8181
#pragma acc kernels device_type(*) self
8282
while(1);
8383

8484
int Var;
8585
int *VarPtr;
86-
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a compute construct}}
86+
// expected-error@+2{{OpenACC clause 'copy' may not follow a 'device_type' clause in a 'kernels' construct}}
8787
// expected-note@+1{{previous clause is here}}
8888
#pragma acc kernels device_type(*) copy(Var)
8989
while(1);
90-
// expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a compute construct}}
90+
// expected-error@+2{{OpenACC clause 'pcopy' may not follow a 'device_type' clause in a 'kernels' construct}}
9191
// expected-note@+1{{previous clause is here}}
9292
#pragma acc kernels device_type(*) pcopy(Var)
9393
while(1);
94-
// expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a compute construct}}
94+
// expected-error@+2{{OpenACC clause 'present_or_copy' may not follow a 'device_type' clause in a 'kernels' construct}}
9595
// expected-note@+1{{previous clause is here}}
9696
#pragma acc kernels device_type(*) present_or_copy(Var)
9797
while(1);
98-
// expected-error@+2{{OpenACC clause 'use_device' may not follow a 'device_type' clause in a compute construct}}
98+
// expected-error@+2{{OpenACC clause 'use_device' may not follow a 'device_type' clause in a 'kernels' construct}}
9999
// expected-note@+1{{previous clause is here}}
100100
#pragma acc kernels device_type(*) use_device(Var)
101101
while(1);
102-
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a compute construct}}
102+
// expected-error@+2{{OpenACC clause 'attach' may not follow a 'device_type' clause in a 'kernels' construct}}
103103
// expected-note@+1{{previous clause is here}}
104104
#pragma acc kernels device_type(*) attach(Var)
105105
while(1);
106-
// expected-error@+2{{OpenACC clause 'delete' may not follow a 'device_type' clause in a compute construct}}
106+
// expected-error@+2{{OpenACC clause 'delete' may not follow a 'device_type' clause in a 'kernels' construct}}
107107
// expected-note@+1{{previous clause is here}}
108108
#pragma acc kernels device_type(*) delete(Var)
109109
while(1);
110-
// expected-error@+2{{OpenACC clause 'detach' may not follow a 'device_type' clause in a compute construct}}
110+
// expected-error@+2{{OpenACC clause 'detach' may not follow a 'device_type' clause in a 'kernels' construct}}
111111
// expected-note@+1{{previous clause is here}}
112112
#pragma acc kernels device_type(*) detach(Var)
113113
while(1);
114-
// expected-error@+2{{OpenACC clause 'device' may not follow a 'device_type' clause in a compute construct}}
114+
// expected-error@+2{{OpenACC clause 'device' may not follow a 'device_type' clause in a 'kernels' construct}}
115115
// expected-note@+1{{previous clause is here}}
116116
#pragma acc kernels device_type(*) device(VarPtr)
117117
while(1);
118-
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a compute construct}}
118+
// expected-error@+2{{OpenACC clause 'deviceptr' may not follow a 'device_type' clause in a 'kernels' construct}}
119119
// expected-note@+1{{previous clause is here}}
120120
#pragma acc kernels device_type(*) deviceptr(VarPtr)
121121
while(1);
122-
// expected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a compute construct}}
122+
// expected-error@+2{{OpenACC clause 'device_resident' may not follow a 'device_type' clause in a 'kernels' construct}}
123123
// expected-note@+1{{previous clause is here}}
124124
#pragma acc kernels device_type(*) device_resident(VarPtr)
125125
while(1);
126-
// expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a compute construct}}
126+
// expected-error@+2{{OpenACC clause 'firstprivate' may not follow a 'device_type' clause in a 'parallel' construct}}
127127
// expected-note@+1{{previous clause is here}}
128128
#pragma acc parallel device_type(*) firstprivate(Var)
129129
while(1);
130-
// expected-error@+2{{OpenACC clause 'host' may not follow a 'device_type' clause in a compute construct}}
130+
// expected-error@+2{{OpenACC clause 'host' may not follow a 'device_type' clause in a 'kernels' construct}}
131131
// expected-note@+1{{previous clause is here}}
132132
#pragma acc kernels device_type(*) host(Var)
133133
while(1);
134-
// expected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a compute construct}}
134+
// expected-error@+2{{OpenACC clause 'link' may not follow a 'device_type' clause in a 'kernels' construct}}
135135
// expected-note@+1{{previous clause is here}}
136136
#pragma acc kernels device_type(*) link(Var)
137137
while(1);
138-
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a compute construct}}
138+
// expected-error@+2{{OpenACC clause 'no_create' may not follow a 'device_type' clause in a 'kernels' construct}}
139139
// expected-note@+1{{previous clause is here}}
140140
#pragma acc kernels device_type(*) no_create(Var)
141141
while(1);
142-
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a compute construct}}
142+
// expected-error@+2{{OpenACC clause 'present' may not follow a 'device_type' clause in a 'kernels' construct}}
143143
// expected-note@+1{{previous clause is here}}
144144
#pragma acc kernels device_type(*) present(Var)
145145
while(1);
146-
// expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a compute construct}}
146+
// expected-error@+2{{OpenACC clause 'private' may not follow a 'device_type' clause in a 'parallel' construct}}
147147
// expected-note@+1{{previous clause is here}}
148148
#pragma acc parallel device_type(*) private(Var)
149149
while(1);
150-
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a compute construct}}
150+
// expected-error@+2{{OpenACC clause 'copyout' may not follow a 'device_type' clause in a 'kernels' construct}}
151151
// expected-note@+1{{previous clause is here}}
152152
#pragma acc kernels device_type(*) copyout(Var)
153153
while(1);
154-
// expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a compute construct}}
154+
// expected-error@+2{{OpenACC clause 'pcopyout' may not follow a 'device_type' clause in a 'kernels' construct}}
155155
// expected-note@+1{{previous clause is here}}
156156
#pragma acc kernels device_type(*) pcopyout(Var)
157157
while(1);
158-
// expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a compute construct}}
158+
// expected-error@+2{{OpenACC clause 'present_or_copyout' may not follow a 'device_type' clause in a 'kernels' construct}}
159159
// expected-note@+1{{previous clause is here}}
160160
#pragma acc kernels device_type(*) present_or_copyout(Var)
161161
while(1);
162-
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a compute construct}}
162+
// expected-error@+2{{OpenACC clause 'copyin' may not follow a 'device_type' clause in a 'kernels' construct}}
163163
// expected-note@+1{{previous clause is here}}
164164
#pragma acc kernels device_type(*) copyin(Var)
165165
while(1);
166-
// expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a compute construct}}
166+
// expected-error@+2{{OpenACC clause 'pcopyin' may not follow a 'device_type' clause in a 'kernels' construct}}
167167
// expected-note@+1{{previous clause is here}}
168168
#pragma acc kernels device_type(*) pcopyin(Var)
169169
while(1);
170-
// expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a compute construct}}
170+
// expected-error@+2{{OpenACC clause 'present_or_copyin' may not follow a 'device_type' clause in a 'kernels' construct}}
171171
// expected-note@+1{{previous clause is here}}
172172
#pragma acc kernels device_type(*) present_or_copyin(Var)
173173
while(1);
174-
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a compute construct}}
174+
// expected-error@+2{{OpenACC clause 'create' may not follow a 'device_type' clause in a 'kernels' construct}}
175175
// expected-note@+1{{previous clause is here}}
176176
#pragma acc kernels device_type(*) create(Var)
177177
while(1);
178-
// expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a compute construct}}
178+
// expected-error@+2{{OpenACC clause 'pcreate' may not follow a 'device_type' clause in a 'kernels' construct}}
179179
// expected-note@+1{{previous clause is here}}
180180
#pragma acc kernels device_type(*) pcreate(Var)
181181
while(1);
182-
// expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a compute construct}}
182+
// expected-error@+2{{OpenACC clause 'present_or_create' may not follow a 'device_type' clause in a 'kernels' construct}}
183183
// expected-note@+1{{previous clause is here}}
184184
#pragma acc kernels device_type(*) present_or_create(Var)
185185
while(1);
186-
// expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a compute construct}}
186+
// expected-error@+2{{OpenACC clause 'reduction' may not follow a 'device_type' clause in a 'serial' construct}}
187187
// expected-note@+1{{previous clause is here}}
188188
#pragma acc serial device_type(*) reduction(+:Var)
189189
while(1);
190190
// expected-error@+1{{OpenACC 'collapse' clause is not valid on 'kernels' directive}}
191191
#pragma acc kernels device_type(*) collapse(1)
192192
while(1);
193-
// expected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a compute construct}}
193+
// expected-error@+2{{OpenACC clause 'bind' may not follow a 'device_type' clause in a 'kernels' construct}}
194194
// expected-note@+1{{previous clause is here}}
195195
#pragma acc kernels device_type(*) bind(Var)
196196
while(1);
@@ -200,11 +200,11 @@ void uses() {
200200
while(1);
201201
#pragma acc kernels device_type(*) num_workers(1)
202202
while(1);
203-
// expected-error@+2{{OpenACC clause 'device_num' may not follow a 'device_type' clause in a compute construct}}
203+
// expected-error@+2{{OpenACC clause 'device_num' may not follow a 'device_type' clause in a 'kernels' construct}}
204204
// expected-note@+1{{previous clause is here}}
205205
#pragma acc kernels device_type(*) device_num(1)
206206
while(1);
207-
// expected-error@+2{{OpenACC clause 'default_async' may not follow a 'device_type' clause in a compute construct}}
207+
// expected-error@+2{{OpenACC clause 'default_async' may not follow a 'device_type' clause in a 'kernels' construct}}
208208
// expected-note@+1{{previous clause is here}}
209209
#pragma acc kernels device_type(*) default_async(1)
210210
while(1);

‎clang/test/SemaOpenACC/compute-construct-num_gangs-clause.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ void Test() {
105105
// expected-error@+1{{OpenACC 'num_gangs' clause is not valid on 'serial' directive}}
106106
#pragma acc serial num_gangs(Explicit, NC, Ambiguous)
107107
while(1);
108-
// TODO
109108
}
110109

111110
struct HasInt {

‎clang/test/SemaOpenACC/loop-construct.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ struct SomeRAIterator {
2828
int operator*();
2929
void operator+=(int);
3030
bool operator!=(SomeRAIterator&);
31-
// TODO
3231
};
3332

3433
struct HasIteratorCollection {

0 commit comments

Comments
 (0)
Please sign in to comment.