1*a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized
2e4e893bbSAlexander Musman
3*a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
4a8a9153aSAlexey Bataev
foo()5e4e893bbSAlexander Musman void foo() {
6e4e893bbSAlexander Musman }
7e4e893bbSAlexander Musman
foobool(int argc)8e4e893bbSAlexander Musman bool foobool(int argc) {
9e4e893bbSAlexander Musman return argc;
10e4e893bbSAlexander Musman }
11e4e893bbSAlexander Musman
12e4e893bbSAlexander Musman struct S1; // expected-note {{declared here}}
13e4e893bbSAlexander Musman
14e4e893bbSAlexander Musman template <class T, typename S, int N> // expected-note {{declared here}}
tmain(T argc,S ** argv)15e4e893bbSAlexander Musman T tmain(T argc, S **argv) {
16*a914888bSAlexey Bataev T i, z;
17e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads // expected-error {{expected '(' after 'num_threads'}}
18e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
19e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
20e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
21e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads () // expected-error {{expected expression}}
22e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
23e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
24e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
25e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
26e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
27e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads ((argc > 0) ? argv[1] : argv[2]) // expected-error 2 {{expression must have integral or unscoped enumeration type, not 'char *'}}
28e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
29a056935aSAlexey Bataev #pragma omp parallel for simd num_threads (foobool(argc)), num_threads (true), num_threads (-5) // expected-error 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'num_threads' clause}} expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}}
30e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
31e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (S) // expected-error {{'S' does not refer to a value}}
32e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
33e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error 2 {{expression must have integral or unscoped enumeration type, not 'char *'}}
34e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
35*a914888bSAlexey Bataev #pragma omp parallel for simd num_threads (argc + z)
36e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
37a056935aSAlexey Bataev #pragma omp parallel for simd num_threads (N) // expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}}
38e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
39e4e893bbSAlexander Musman
40e4e893bbSAlexander Musman return argc;
41e4e893bbSAlexander Musman }
42e4e893bbSAlexander Musman
main(int argc,char ** argv)43e4e893bbSAlexander Musman int main(int argc, char **argv) {
44*a914888bSAlexey Bataev int i, z;
45e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads // expected-error {{expected '(' after 'num_threads'}}
46e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
47e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
48e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
49e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads () // expected-error {{expected expression}}
50e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
51e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
52e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
53*a914888bSAlexey Bataev #pragma omp parallel for simd num_threads (argc * z)) // expected-warning {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
54e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
55e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argc > 0 ? argv[1] : argv[2]) // expected-error {{integral }}
56e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
57a056935aSAlexey Bataev #pragma omp parallel for simd num_threads (foobool(argc)), num_threads (true), num_threads (-5) // expected-error 2 {{directive '#pragma omp parallel for simd' cannot contain more than one 'num_threads' clause}} expected-error {{argument to 'num_threads' clause must be a strictly positive integer value}}
58e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
59e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (S1) // expected-error {{'S1' does not refer to a value}}
60e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
61e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expression must have integral or unscoped enumeration type, not 'char *'}}
62e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
63e4e893bbSAlexander Musman #pragma omp parallel for simd num_threads (num_threads(tmain<int, char, -1>(argc, argv) // expected-error 2 {{expected ')'}} expected-note 2 {{to match this '('}} expected-note {{in instantiation of function template specialization 'tmain<int, char, -1>' requested here}}
64e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
65e4e893bbSAlexander Musman
66e4e893bbSAlexander Musman return tmain<int, char, 3>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char, 3>' requested here}}
67e4e893bbSAlexander Musman }
68