1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ferror-limit 100 %s 24fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 34fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevvoid foo() { 44fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 54fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 64fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevbool foobool(int argc) { 74fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev return argc; 84fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 94fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 104fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevstruct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}} 114fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevextern S1 a; 124fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevclass S2 { 134fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev mutable int a; 144fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevpublic: 154fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S2():a(0) { } 16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static float S2s; // expected-note {{static data member is predetermined as shared}} 174fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}; 184fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevconst S2 b; 194fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevconst S2 ba[5]; 204fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevclass S3 { 214fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev int a; 224fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevpublic: 234fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S3():a(0) { } 244fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}; 25ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S3 c; // expected-note {{global variable is predetermined as shared}} 26ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S3 ca[5]; // expected-note {{global variable is predetermined as shared}} 27ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern const int f; // expected-note {{global variable is predetermined as shared}} 284fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevclass S4 { // expected-note {{'S4' declared here}} 294fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev int a; 304fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S4(); 314fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevpublic: 324fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S4(int v):a(v) { } 334fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}; 344fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevclass S5 { // expected-note {{'S5' declared here}} 354fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev int a; 364fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S5():a(0) {} 374fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevpublic: 384fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S5(int v):a(v) { } 394fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev}; 404fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 410c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataevint threadvar; 420c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev#pragma omp threadprivate(threadvar) // expected-note {{defined as threadprivate or thread local}} 430c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev 444fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataevint main(int argc, char **argv) { 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int d = 5; // expected-note {{constant variable is predetermined as shared}} 46ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int da[5] = { 0 }; // expected-note {{constant variable is predetermined as shared}} 474fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S4 e(4); // expected-note {{'e' defined here}} 484fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev S5 g(5); // expected-note {{'g' defined here}} 494fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev int i; 504fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev int &j = i; // expected-note {{'j' defined here}} 514fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private // expected-error {{expected '(' after 'private'}} 524fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 534fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private () // expected-error {{expected expression}} 544fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 554fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 564fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 574fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (argc argv) // expected-error {{expected ',' or ')' in 'private' clause}} 584fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (S1) // expected-error {{'S1' does not refer to a value}} 590c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev #pragma omp parallel private (a, b, c, d, f) // expected-error {{a private variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be private}} 604fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private (argv[1]) // expected-error {{expected variable name}} 614fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private(ba) 620c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev #pragma omp parallel private(ca) // expected-error {{shared variable cannot be private}} 630c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev #pragma omp parallel private(da) // expected-error {{shared variable cannot be private}} 640c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev #pragma omp parallel private(S2::S2s) // expected-error {{shared variable cannot be private}} 654fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private(e, g) // expected-error 2 {{private variable must have an accessible, unambiguous default constructor}} 660c018357b8bbb1f96bbf622a5807421e626b4228Alexey Bataev #pragma omp parallel private(threadvar) // expected-error {{threadprivate or thread local variable cannot be private}} 67d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel shared(i), private(i) // expected-error {{shared variable cannot be private}} expected-note {{defined as shared}} 68d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 69d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(i) private(i) // expected-error {{firstprivate variable cannot be private}} expected-note {{defined as firstprivate}} 704fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev foo(); 714fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private(i) 724fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev #pragma omp parallel private(j) // expected-error {{arguments of OpenMP clause 'private' cannot be of reference type 'int &'}} 734fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev foo(); 74d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(i) 75d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev for (int k = 0; k < 10; ++k) { 76d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel private(i) 77d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 78d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev } 794fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev 804fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev return 0; 814fa7eab771ab8212e1058bd1a91061ff120c8fbbAlexey Bataev} 82