1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHDEF %s
// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHOUTDEF %s
// RUN: %clang_cc1 -verify -fopenmp -std=c99 -x c -o - -DCTEST %s
#ifdef WITHDEF
typedef void *omp_interop_t;
void foo(int *Ap) {
omp_interop_t InteropVar;
omp_interop_t Another;
//expected-error@+1 {{expected interop type: 'target' and/or 'targetsync'}}
#pragma omp interop init(target,foo:InteropVar) init(target:Another)
//expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
#pragma omp interop init(target:NoDeclVar) init(target:Another)
//expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
#pragma omp interop use(NoDeclVar) use(Another)
//expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}}
#pragma omp interop destroy(NoDeclVar) destroy(Another)
//expected-error@+2 {{expected interop type: 'target' and/or 'targetsync'}}
//expected-error@+1 {{expected expression}}
#pragma omp interop init(InteropVar) init(target:Another)
//expected-warning@+1 {{missing ':' after interop types}}
#pragma omp interop init(target InteropVar)
//expected-error@+1 {{expected expression}}
#pragma omp interop init(prefer_type(1,+,3),target:InteropVar) \
init(target:Another)
int IntVar;
struct S { int I; } SVar;
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop init(prefer_type(1,"sycl",3),target:IntVar) \
init(target:Another)
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop use(IntVar) use(Another)
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop destroy(IntVar) destroy(Another)
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop init(prefer_type(1,"sycl",3),target:SVar) \
init(target:Another)
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop use(SVar) use(Another)
//expected-error@+1 {{interop variable must be of type 'omp_interop_t'}}
#pragma omp interop destroy(SVar) destroy(Another)
int a, b;
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop init(target:a+b) init(target:Another)
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop use(a+b) use(Another)
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop destroy(a+b) destroy(Another)
const omp_interop_t C = (omp_interop_t)5;
//expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}}
#pragma omp interop init(target:C) init(target:Another)
//expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}}
#pragma omp interop destroy(C) destroy(Another)
//expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}}
#pragma omp interop init(prefer_type(1.0),target:InteropVar) \
init(target:Another)
//expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}}
#pragma omp interop init(prefer_type(a),target:InteropVar) \
init(target:Another)
//expected-error@+1 {{expected at least one 'init', 'use', 'destroy', or 'nowait' clause for '#pragma omp interop'}}
#pragma omp interop device(0)
//expected-warning@+1 {{interop type 'target' cannot be specified more than once}}
#pragma omp interop init(target,targetsync,target:InteropVar)
//expected-error@+1 {{'depend' clause requires the 'targetsync' interop type}}
#pragma omp interop init(target:InteropVar) depend(inout:Ap)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) init(target:InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop use(InteropVar) use(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop destroy(InteropVar) destroy(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) use(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) destroy(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop use(InteropVar) destroy(InteropVar)
//expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'device' clause}}
#pragma omp interop init(target:InteropVar) device(0) device(1)
//expected-error@+1 {{argument to 'device' clause must be a non-negative integer value}}
#pragma omp interop init(target:InteropVar) device(-4)
//expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'nowait' clause}}
#pragma omp interop nowait init(target:InteropVar) nowait
}
struct S {
void foo();
omp_interop_t InteropVar;
omp_interop_t func();
static omp_interop_t sfunc();
};
struct T {
static void static_member_func();
};
void T::static_member_func() {
S s;
omp_interop_t o;
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop init(target:s.InteropVar) init(target:o)
}
void S::foo() {
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) init(target:InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop use(InteropVar) use(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop destroy(InteropVar) destroy(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) use(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop init(target:InteropVar) destroy(InteropVar)
//expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}}
#pragma omp interop use(InteropVar) destroy(InteropVar)
//expected-error@+1 {{expected variable, static data member, or non-static data member of current class of type 'omp_interop_t'}}
#pragma omp interop init(target:InteropVar) init(target:func())
//expected-error@+1 {{expected variable, static data member, or non-static data member of current class of type 'omp_interop_t'}}
#pragma omp interop init(target:InteropVar) init(target:sfunc())
}
void foo2() {
S s;
omp_interop_t another;
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop init(target:s.InteropVar) init(target:another)
//expected-error@+1 {{expected variable or static data member of type 'omp_interop_t'}}
#pragma omp interop init(target: S::sfunc()) init(target:another)
}
#endif
#ifdef WITHOUTDEF
void foo() {
int InteropVar;
//expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
#pragma omp interop init(prefer_type(1,"sycl",3),target:InteropVar) nowait
//expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
#pragma omp interop use(InteropVar) nowait
//expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}}
#pragma omp interop destroy(InteropVar) nowait
}
#endif
#ifdef CTEST
typedef void *omp_interop_t;
omp_interop_t bar();
struct S {
omp_interop_t o;
};
void foo() {
omp_interop_t o;
struct S s;
//expected-error@+1 {{expected variable of type 'omp_interop_t'}}
#pragma omp interop init(target:o) init(target:bar())
//expected-error@+1 {{expected variable of type 'omp_interop_t'}}
#pragma omp interop init(target:o) init(target:s.o)
}
#endif
|