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
|
// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHDEF %s
// RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHOUTDEF %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 of type 'omp_interop_t'}}
#pragma omp interop init(target:a+b) init(target:Another)
//expected-error@+1 {{expected variable of type 'omp_interop_t'}}
#pragma omp interop use(a+b) use(Another)
//expected-error@+1 {{expected variable 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
}
#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
|