brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 27592e1 Raw
119 lines · cpp
1// RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp    \2// RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions %s3 4// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -verify -fopenmp \5// RUN:   -x c++ -std=c++14 -fexceptions -fcxx-exceptions %s6 7int disp_variant();8#pragma omp declare variant(disp_variant) \9    match(construct = {dispatch}, device = {arch(arm)})10int disp_call();11 12struct Obj {13  int disp_method_variant1();14  #pragma omp declare variant(disp_method_variant1)                            \15    match(construct={dispatch}, device={arch(arm)})16  int disp_method1();17  int disp_method_variant2();18  #pragma omp declare variant(disp_method_variant2)                            \19    match(construct={dispatch}, device={arch(arm)})20  int disp_method2();21};22 23void testit_one(int dnum) {24  // expected-error@+1 {{cannot contain more than one 'device' clause}}25  #pragma omp dispatch device(dnum) device(3)26  disp_call();27 28  // expected-error@+1 {{cannot contain more than one 'nowait' clause}}29  #pragma omp dispatch nowait device(dnum) nowait30  disp_call();31 32  // expected-error@+1 {{expected '(' after 'novariants'}}33  #pragma omp dispatch novariants34  disp_call();35 36  // expected-error@+3 {{expected expression}}37  // expected-error@+2 {{expected ')'}}38  // expected-note@+1 {{to match this '('}}39  #pragma omp dispatch novariants (40  disp_call();41 42  // expected-error@+1 {{cannot contain more than one 'novariants' clause}}43  #pragma omp dispatch novariants(dnum> 4) novariants(3)44  disp_call();45 46  // expected-error@+1 {{use of undeclared identifier 'x'}}47  #pragma omp dispatch novariants(x)48  disp_call();49  50  // expected-error@+1 {{expected '(' after 'nocontext'}}51  #pragma omp dispatch nocontext52  disp_call();53 54  // expected-error@+3 {{expected expression}}55  // expected-error@+2 {{expected ')'}}56  // expected-note@+1 {{to match this '('}}57  #pragma omp dispatch nocontext (58  disp_call();59 60  // expected-error@+1 {{cannot contain more than one 'nocontext' clause}}61  #pragma omp dispatch nocontext(dnum> 4) nocontext(3)62  disp_call();63 64  // expected-error@+1 {{use of undeclared identifier 'x'}}65  #pragma omp dispatch nocontext(x)66  disp_call();67}68 69void testit_two() {70  //expected-error@+2 {{cannot return from OpenMP region}}71  #pragma omp dispatch72  return disp_call();73}74 75void testit_three(int (*fptr)(void), Obj *obj, int (Obj::*mptr)(void)) {76  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}77  #pragma omp dispatch78  fptr();79 80  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}81  #pragma omp dispatch82  (obj->*mptr)();83 84  int ret;85 86  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}87  #pragma omp dispatch88  ret = fptr();89 90  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}91  #pragma omp dispatch92  ret = (obj->*mptr)();93}94 95void testit_four(int *x, int y, Obj *obj)96{97  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}98  #pragma omp dispatch99  *x = y;100 101  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}102  #pragma omp dispatch103  y = disp_call() + disp_call();104 105  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}106  #pragma omp dispatch107  y = (y = disp_call());108 109  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}110  #pragma omp dispatch111  y += disp_call();112 113  //expected-error@+2 {{statement after '#pragma omp dispatch' must be a direct call to a target function or an assignment to one}}114  #pragma omp dispatch115  for (int I = 0; I < 8; ++I) {116    disp_call();117  }118}119