/* Test parsing of #pragma omp declare variant */ /* { dg-do compile } */ int fn0 (int); int fn6 (int); #pragma omp declare variant (fn0) match (user={condition(0)}) int a; /* { dg-error "not immediately followed by a function declaration or definition" } */ #pragma omp declare variant (fn0) match (user={condition(0)}) int fn1 (int a), fn2 (int a); /* { dg-error "not immediately followed by a single function declaration or definition" } */ #pragma omp declare variant (fn0) match (user={condition(0)}) int b, fn3 (int a); /* { dg-error "not immediately followed by a function declaration or definition" } */ #pragma omp declare variant (fn0) match (user={condition(0)}) int fn4 (int a), c; /* { dg-error "not immediately followed by a function declaration or definition" } */ int t; #pragma omp declare variant (fn0) match (user={condition(0)}) #pragma omp declare variant (fn6) match (implementation={vendor(unknown)}) #pragma omp threadprivate(t) /* { dg-error "must be followed by function declaration or definition or another" } */ int fn5 (int a); #pragma omp declare variant (1 + 2) match (user={condition(0)}) /* { dg-error "expected identifier before numeric constant" } */ int fn7 (int); #pragma omp declare variant (t) match (user={condition(0)}) /* { dg-error "variant 't' is not a function" } */ int fn8 (int); long fn9 (char, short); #pragma omp declare variant (fn9) match (implementation={vendor(unknown)}) /* { dg-error "variant 'fn9' and base 'fn10' have incompatible types" } */ int fn10 (int, long long); #pragma omp declare variant (memcpy) match (implementation={vendor(llvm)}) /* { dg-error "'memcpy' undeclared here" } */ void *fn11 (void *, const void *, __SIZE_TYPE__); #pragma omp declare variant (__builtin_memmove) match (implementation={vendor(gnu)}) /* { dg-error "variant '__builtin_memmove' is a built-in" } */ void *fn12 (void *, const void *, __SIZE_TYPE__);