1 // RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp -std=c99 -fms-extensions -Wno-pragma-pack %s
2 // RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp-simd -std=c99 -fms-extensions -Wno-pragma-pack %s
4 [[omp::directive(assumes
)]]; // expected-error {{expected at least one 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism' clause for '#pragma omp assumes'}}
5 [[omp::directive(begin
)]]; // expected-error {{expected an OpenMP directive}}
6 [[omp::directive(begin assumes
)]]; // expected-error {{expected at least one 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism' clause for '#pragma omp begin assumes'}}
7 [[omp::directive(end assumes
)]];
9 [[omp::directive(assumes foobar
)]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
10 [[omp::directive(begin assumes foobar
)]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
11 [[omp::directive(end assumes
)]];
13 [[omp::directive(begin assumes
foobar(foo
2 baz
))]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
14 [[omp::directive(assumes
foobar(foo
2 baz
))]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
15 [[omp::directive(end assumes
)]];
17 [[omp::directive(assumes
no_openmp(1))]]; // expected-warning {{'no_openmp' clause should not be followed by arguments; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
18 [[omp::directive(begin assumes
no_openmp(1 2 3))]]; // expected-warning {{'no_openmp' clause should not be followed by arguments; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
19 [[omp::directive(end assumes
no_openmp(1))]];
21 [[omp::directive(assumes foobar no_openmp bazbaz
)]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}} expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
22 [[omp::directive(begin assumes foobar no_openmp bazbaz
)]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}} expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
23 [[omp::directive(end assumes
)]];
25 [[omp::directive(begin assumes
foobar(foo
2 baz
) no_openmp
bazbaz(foo
2 baz
))]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-note {{the ignored tokens spans until here}} expected-note {{the ignored tokens spans until here}}
26 [[omp::directive(assumes
foobar(foo
2 baz
) no_openmp
bazbaz(foo
2 baz
))]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; tokens will be ignored}} expected-note {{the ignored tokens spans until here}} expected-note {{the ignored tokens spans until here}}
27 [[omp::directive(end assumes
)]];
29 [[omp::directive(assumes no_openmp foobar no_openmp
)]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
30 [[omp::directive(begin assumes no_openmp foobar no_openmp
)]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
31 [[omp::directive(end assumes
)]];
33 [[omp::directive(assumes
holds(1, 2 3))]];
34 [[omp::directive(begin assumes
holds(1, 2 3))]];
35 [[omp::directive(end assumes
)]];
37 [[omp::directive(assumes
absent(1, 2 3))]];
38 [[omp::directive(begin assumes
absent(1, 2 3))]];
39 [[omp::directive(end assumes
)]];
41 [[omp::directive(assumes
contains(1, 2 3))]];
42 [[omp::directive(begin assumes
contains(1, 2 3))]];
43 [[omp::directive(end assumes
)]];
45 [[omp::directive(assumes ext
)]]; // expected-warning {{valid assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
46 [[omp::directive(begin assumes ext
)]]; // expected-warning {{valid begin assumes clauses start with 'ext_', 'absent', 'contains', 'holds', 'no_openmp', 'no_openmp_routines', 'no_parallelism'; token will be ignored}}
47 [[omp::directive(end assumes
)]];
49 [[omp::directive(assumes
ext_123(not allowed
))]]; // expected-warning {{'ext_123' clause should not be followed by arguments; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
50 [[omp::directive(begin assumes
ext_123(not allowed
))]]; // expected-warning {{'ext_123' clause should not be followed by arguments; tokens will be ignored}} expected-note {{the ignored tokens spans until here}}
51 [[omp::directive(end assumes
)]];
53 [[omp::directive(end assumes
)]]; // expected-error {{'#pragma omp end assumes' with no matching '#pragma omp begin assumes'}}
55 // TODO: we should emit a warning at least.
56 [[omp::directive(begin assumes ext_abc
)]];