blob: 11be23cab8dcff59d760016416a5e465f65bd2cf [file] [log] [blame]
Alexey Bataeva9148882019-07-08 15:45:24 +00001// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +00002
Alexey Bataeva9148882019-07-08 15:45:24 +00003// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
Alexey Bataeva8a9153a2017-12-29 18:07:07 +00004
Alexey Bataev471171c2019-03-28 19:15:36 +00005typedef void **omp_allocator_handle_t;
6extern const omp_allocator_handle_t omp_default_mem_alloc;
7extern const omp_allocator_handle_t omp_large_cap_mem_alloc;
8extern const omp_allocator_handle_t omp_const_mem_alloc;
9extern const omp_allocator_handle_t omp_high_bw_mem_alloc;
10extern const omp_allocator_handle_t omp_low_lat_mem_alloc;
11extern const omp_allocator_handle_t omp_cgroup_mem_alloc;
12extern const omp_allocator_handle_t omp_pteam_mem_alloc;
13extern const omp_allocator_handle_t omp_thread_mem_alloc;
14
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000015void foo() {
16}
17
18bool foobool(int argc) {
19 return argc;
20}
21
Alexey Bataev25569292019-07-22 13:51:07 +000022void xxx(int argc) {
23 int fp; // expected-note {{initialize the variable 'fp' to silence this warning}}
24#pragma omp target parallel firstprivate(fp) // expected-warning {{variable 'fp' is uninitialized when used here}}
25 for (int i = 0; i < 10; ++i)
26 ;
27}
28
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000029struct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}}
30extern S1 a;
31class S2 {
32 mutable int a;
33public:
34 S2():a(0) { }
35 S2(const S2 &s2):a(s2.a) { }
36 static float S2s;
37 static const float S2sc;
38};
39const float S2::S2sc = 0;
40const S2 b;
41const S2 ba[5];
42class S3 {
43 int a;
44public:
45 S3():a(0) { }
46 S3(const S3 &s3):a(s3.a) { }
47};
48const S3 c;
49const S3 ca[5];
50extern const int f;
51class S4 {
52 int a;
53 S4();
54 S4(const S4 &s4); // expected-note {{implicitly declared private here}}
55public:
56 S4(int v):a(v) { }
57};
58class S5 {
59 int a;
60 S5():a(0) {}
61 S5(const S5 &s5):a(s5.a) { } // expected-note {{implicitly declared private here}}
62public:
63 S5(int v):a(v) { }
64};
65
66S3 h;
67#pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}}
68
69namespace A {
70double x;
71#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}
72}
73namespace B {
74using A::x;
75}
76
77int main(int argc, char **argv) {
78 const int d = 5;
79 const int da[5] = { 0 };
80 S4 e(4);
81 S5 g(5);
Alexey Bataeva9148882019-07-08 15:45:24 +000082 int i, z;
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000083 int &j = i;
84 static int m;
85 #pragma omp target parallel firstprivate // expected-error {{expected '(' after 'firstprivate'}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000086 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000087 #pragma omp target parallel firstprivate ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000088 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000089 #pragma omp target parallel firstprivate () // expected-error {{expected expression}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000090 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000091 #pragma omp target parallel firstprivate (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000092 foo();
Alexey Bataevc5970622016-04-01 08:43:42 +000093 #pragma omp target parallel firstprivate (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000094 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000095 #pragma omp target parallel firstprivate (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000096 foo();
Alexey Bataeve04483e2019-03-27 14:14:31 +000097 #pragma omp target parallel firstprivate (argc) allocate , allocate(, allocate(omp_default , allocate(omp_default_mem_alloc, allocate(omp_default_mem_alloc:, allocate(omp_default_mem_alloc: argc, allocate(omp_default_mem_alloc: argv), allocate(argv) // expected-error {{expected '(' after 'allocate'}} expected-error 2 {{expected expression}} expected-error 2 {{expected ')'}} expected-error {{use of undeclared identifier 'omp_default'}} expected-note 2 {{to match this '('}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +000098 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +000099 #pragma omp target parallel firstprivate (S1) // expected-error {{'S1' does not refer to a value}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000100 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000101 #pragma omp target parallel firstprivate (a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000102 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000103 #pragma omp target parallel firstprivate (argv[1]) // expected-error {{expected variable name}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000104 foo();
Alexey Bataev471171c2019-03-28 19:15:36 +0000105 #pragma omp target parallel firstprivate(ba) allocate(omp_thread_mem_alloc: ba) // expected-warning {{allocator with the 'thread' trait access has unspecified behavior on 'target parallel' directive}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000106 foo();
Alexey Bataeva9148882019-07-08 15:45:24 +0000107 #pragma omp target parallel firstprivate(ca, z)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000108 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000109 #pragma omp target parallel firstprivate(da)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000110 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000111 #pragma omp target parallel firstprivate(S2::S2s)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000112 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000113 #pragma omp target parallel firstprivate(S2::S2sc)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000114 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000115 #pragma omp target parallel firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000116 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000117 #pragma omp target parallel firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}}
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000118 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000119 #pragma omp target parallel private(i), firstprivate(i) // expected-error {{private variable cannot be firstprivate}} expected-note{{defined as private}}
120 foo();
121 #pragma omp target parallel shared(i)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000122 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000123 #pragma omp target parallel firstprivate(i)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000124 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000125 #pragma omp target parallel firstprivate(j)
Arpith Chacko Jacob3d58f262016-02-02 04:00:47 +0000126 foo();
Arpith Chacko Jacobe955b3d2016-01-26 18:48:41 +0000127 #pragma omp target parallel firstprivate(m)
128 foo();
129
130 return 0;
131}