1410f09afSMike Rice // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHDEF %s
2410f09afSMike Rice // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHOUTDEF %s
3410f09afSMike Rice
4410f09afSMike Rice #ifdef WITHDEF
5410f09afSMike Rice typedef void *omp_interop_t;
6410f09afSMike Rice
foo(int * Ap)7410f09afSMike Rice void foo(int *Ap) {
8410f09afSMike Rice omp_interop_t InteropVar;
9410f09afSMike Rice omp_interop_t Another;
10410f09afSMike Rice
11410f09afSMike Rice //expected-error@+1 {{expected interop type: 'target' and/or 'targetsync'}}
12410f09afSMike Rice #pragma omp interop init(target,foo:InteropVar) init(target:Another)
13410f09afSMike Rice
14410f09afSMike Rice //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
15410f09afSMike Rice #pragma omp interop init(target:NoDeclVar) init(target:Another)
16410f09afSMike Rice
17c615927cSMike Rice //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
18c615927cSMike Rice #pragma omp interop use(NoDeclVar) use(Another)
19c615927cSMike Rice
20*c2f8e158SMike Rice //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
21*c2f8e158SMike Rice #pragma omp interop destroy(NoDeclVar) destroy(Another)
22*c2f8e158SMike Rice
23410f09afSMike Rice //expected-error@+2 {{expected interop type: 'target' and/or 'targetsync'}}
24410f09afSMike Rice //expected-error@+1 {{expected expression}}
25410f09afSMike Rice #pragma omp interop init(InteropVar) init(target:Another)
26410f09afSMike Rice
27410f09afSMike Rice //expected-warning@+1 {{missing ':' after interop types}}
28410f09afSMike Rice #pragma omp interop init(target InteropVar)
29410f09afSMike Rice
30410f09afSMike Rice //expected-error@+1 {{expected expression}}
31410f09afSMike Rice #pragma omp interop init(prefer_type(1,+,3),target:InteropVar) \
32410f09afSMike Rice init(target:Another)
33410f09afSMike Rice
34410f09afSMike Rice int IntVar;
35410f09afSMike Rice struct S { int I; } SVar;
36410f09afSMike Rice
37410f09afSMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
38410f09afSMike Rice #pragma omp interop init(prefer_type(1,"sycl",3),target:IntVar) \
39410f09afSMike Rice init(target:Another)
40410f09afSMike Rice
41410f09afSMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
42c615927cSMike Rice #pragma omp interop use(IntVar) use(Another)
43c615927cSMike Rice
44c615927cSMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
45*c2f8e158SMike Rice #pragma omp interop destroy(IntVar) destroy(Another)
46*c2f8e158SMike Rice
47*c2f8e158SMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
48410f09afSMike Rice #pragma omp interop init(prefer_type(1,"sycl",3),target:SVar) \
49410f09afSMike Rice init(target:Another)
50410f09afSMike Rice
51c615927cSMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
52c615927cSMike Rice #pragma omp interop use(SVar) use(Another)
53c615927cSMike Rice
54*c2f8e158SMike Rice //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
55*c2f8e158SMike Rice #pragma omp interop destroy(SVar) destroy(Another)
56*c2f8e158SMike Rice
57410f09afSMike Rice int a, b;
58410f09afSMike Rice //expected-error@+1 {{expected variable of type 'omp_interop_t'}}
59410f09afSMike Rice #pragma omp interop init(target:a+b) init(target:Another)
60410f09afSMike Rice
61c615927cSMike Rice //expected-error@+1 {{expected variable of type 'omp_interop_t'}}
62c615927cSMike Rice #pragma omp interop use(a+b) use(Another)
63c615927cSMike Rice
64*c2f8e158SMike Rice //expected-error@+1 {{expected variable of type 'omp_interop_t'}}
65*c2f8e158SMike Rice #pragma omp interop destroy(a+b) destroy(Another)
66*c2f8e158SMike Rice
67410f09afSMike Rice const omp_interop_t C = (omp_interop_t)5;
68410f09afSMike Rice //expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}}
69410f09afSMike Rice #pragma omp interop init(target:C) init(target:Another)
70410f09afSMike Rice
71*c2f8e158SMike Rice //expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}}
72*c2f8e158SMike Rice #pragma omp interop destroy(C) destroy(Another)
73*c2f8e158SMike Rice
74410f09afSMike Rice //expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}}
75410f09afSMike Rice #pragma omp interop init(prefer_type(1.0),target:InteropVar) \
76410f09afSMike Rice init(target:Another)
77410f09afSMike Rice
78410f09afSMike Rice //expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}}
79410f09afSMike Rice #pragma omp interop init(prefer_type(a),target:InteropVar) \
80410f09afSMike Rice init(target:Another)
81410f09afSMike Rice
82410f09afSMike Rice //expected-error@+1 {{expected at least one 'init', 'use', 'destroy', or 'nowait' clause for '#pragma omp interop'}}
83410f09afSMike Rice #pragma omp interop device(0)
84410f09afSMike Rice
85410f09afSMike Rice //expected-warning@+1 {{interop type 'target' cannot be specified more than once}}
86410f09afSMike Rice #pragma omp interop init(target,targetsync,target:InteropVar)
87410f09afSMike Rice
88410f09afSMike Rice //expected-error@+1 {{'depend' clause requires the 'targetsync' interop type}}
89410f09afSMike Rice #pragma omp interop init(target:InteropVar) depend(inout:Ap)
90410f09afSMike Rice
91410f09afSMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
92410f09afSMike Rice #pragma omp interop init(target:InteropVar) init(target:InteropVar)
93410f09afSMike Rice
94c615927cSMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
95c615927cSMike Rice #pragma omp interop use(InteropVar) use(InteropVar)
96c615927cSMike Rice
97c615927cSMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
98*c2f8e158SMike Rice #pragma omp interop destroy(InteropVar) destroy(InteropVar)
99*c2f8e158SMike Rice
100*c2f8e158SMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
101c615927cSMike Rice #pragma omp interop init(target:InteropVar) use(InteropVar)
102c615927cSMike Rice
103*c2f8e158SMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
104*c2f8e158SMike Rice #pragma omp interop init(target:InteropVar) destroy(InteropVar)
105*c2f8e158SMike Rice
106*c2f8e158SMike Rice //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
107*c2f8e158SMike Rice #pragma omp interop use(InteropVar) destroy(InteropVar)
108*c2f8e158SMike Rice
109410f09afSMike Rice //expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'device' clause}}
110410f09afSMike Rice #pragma omp interop init(target:InteropVar) device(0) device(1)
111410f09afSMike Rice
112410f09afSMike Rice //expected-error@+1 {{argument to 'device' clause must be a non-negative integer value}}
113410f09afSMike Rice #pragma omp interop init(target:InteropVar) device(-4)
114410f09afSMike Rice
115410f09afSMike Rice //expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'nowait' clause}}
116410f09afSMike Rice #pragma omp interop nowait init(target:InteropVar) nowait
117410f09afSMike Rice }
118410f09afSMike Rice #endif
119410f09afSMike Rice #ifdef WITHOUTDEF
foo()120410f09afSMike Rice void foo() {
121410f09afSMike Rice int InteropVar;
122410f09afSMike Rice //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
123410f09afSMike Rice #pragma omp interop init(prefer_type(1,"sycl",3),target:InteropVar) nowait
124c615927cSMike Rice //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
125c615927cSMike Rice #pragma omp interop use(InteropVar) nowait
126*c2f8e158SMike Rice //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
127*c2f8e158SMike Rice #pragma omp interop destroy(InteropVar) nowait
128410f09afSMike Rice }
129410f09afSMike Rice #endif
130