1 // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHDEF %s 2 // RUN: %clang_cc1 -verify -fopenmp -std=c++11 -o - -DWITHOUTDEF %s 3 4 #ifdef WITHDEF 5 typedef void *omp_interop_t; 6 7 void foo(int *Ap) { 8 omp_interop_t InteropVar; 9 omp_interop_t Another; 10 11 //expected-error@+1 {{expected interop type: 'target' and/or 'targetsync'}} 12 #pragma omp interop init(target,foo:InteropVar) init(target:Another) 13 14 //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}} 15 #pragma omp interop init(target:NoDeclVar) init(target:Another) 16 17 //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}} 18 #pragma omp interop use(NoDeclVar) use(Another) 19 20 //expected-error@+1 {{use of undeclared identifier 'NoDeclVar'}} 21 #pragma omp interop destroy(NoDeclVar) destroy(Another) 22 23 //expected-error@+2 {{expected interop type: 'target' and/or 'targetsync'}} 24 //expected-error@+1 {{expected expression}} 25 #pragma omp interop init(InteropVar) init(target:Another) 26 27 //expected-warning@+1 {{missing ':' after interop types}} 28 #pragma omp interop init(target InteropVar) 29 30 //expected-error@+1 {{expected expression}} 31 #pragma omp interop init(prefer_type(1,+,3),target:InteropVar) \ 32 init(target:Another) 33 34 int IntVar; 35 struct S { int I; } SVar; 36 37 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 38 #pragma omp interop init(prefer_type(1,"sycl",3),target:IntVar) \ 39 init(target:Another) 40 41 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 42 #pragma omp interop use(IntVar) use(Another) 43 44 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 45 #pragma omp interop destroy(IntVar) destroy(Another) 46 47 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 48 #pragma omp interop init(prefer_type(1,"sycl",3),target:SVar) \ 49 init(target:Another) 50 51 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 52 #pragma omp interop use(SVar) use(Another) 53 54 //expected-error@+1 {{interop variable must be of type 'omp_interop_t'}} 55 #pragma omp interop destroy(SVar) destroy(Another) 56 57 int a, b; 58 //expected-error@+1 {{expected variable of type 'omp_interop_t'}} 59 #pragma omp interop init(target:a+b) init(target:Another) 60 61 //expected-error@+1 {{expected variable of type 'omp_interop_t'}} 62 #pragma omp interop use(a+b) use(Another) 63 64 //expected-error@+1 {{expected variable of type 'omp_interop_t'}} 65 #pragma omp interop destroy(a+b) destroy(Another) 66 67 const omp_interop_t C = (omp_interop_t)5; 68 //expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}} 69 #pragma omp interop init(target:C) init(target:Another) 70 71 //expected-error@+1 {{expected non-const variable of type 'omp_interop_t'}} 72 #pragma omp interop destroy(C) destroy(Another) 73 74 //expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}} 75 #pragma omp interop init(prefer_type(1.0),target:InteropVar) \ 76 init(target:Another) 77 78 //expected-error@+1 {{prefer_list item must be a string literal or constant integral expression}} 79 #pragma omp interop init(prefer_type(a),target:InteropVar) \ 80 init(target:Another) 81 82 //expected-error@+1 {{expected at least one 'init', 'use', 'destroy', or 'nowait' clause for '#pragma omp interop'}} 83 #pragma omp interop device(0) 84 85 //expected-warning@+1 {{interop type 'target' cannot be specified more than once}} 86 #pragma omp interop init(target,targetsync,target:InteropVar) 87 88 //expected-error@+1 {{'depend' clause requires the 'targetsync' interop type}} 89 #pragma omp interop init(target:InteropVar) depend(inout:Ap) 90 91 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 92 #pragma omp interop init(target:InteropVar) init(target:InteropVar) 93 94 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 95 #pragma omp interop use(InteropVar) use(InteropVar) 96 97 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 98 #pragma omp interop destroy(InteropVar) destroy(InteropVar) 99 100 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 101 #pragma omp interop init(target:InteropVar) use(InteropVar) 102 103 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 104 #pragma omp interop init(target:InteropVar) destroy(InteropVar) 105 106 //expected-error@+1 {{interop variable 'InteropVar' used in multiple action clauses}} 107 #pragma omp interop use(InteropVar) destroy(InteropVar) 108 109 //expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'device' clause}} 110 #pragma omp interop init(target:InteropVar) device(0) device(1) 111 112 //expected-error@+1 {{argument to 'device' clause must be a non-negative integer value}} 113 #pragma omp interop init(target:InteropVar) device(-4) 114 115 //expected-error@+1 {{directive '#pragma omp interop' cannot contain more than one 'nowait' clause}} 116 #pragma omp interop nowait init(target:InteropVar) nowait 117 } 118 #endif 119 #ifdef WITHOUTDEF 120 void foo() { 121 int InteropVar; 122 //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}} 123 #pragma omp interop init(prefer_type(1,"sycl",3),target:InteropVar) nowait 124 //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}} 125 #pragma omp interop use(InteropVar) nowait 126 //expected-error@+1 {{'omp_interop_t' type not found; include <omp.h>}} 127 #pragma omp interop destroy(InteropVar) nowait 128 } 129 #endif 130