brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · ea8fa23 Raw
106 lines · cpp
1// RUN: %clang_cc1 -verify=expected -fopenmp -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized2// RUN: %clang_cc1 -verify=expected -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized3 4void foo() {}5 6template <class T, typename S, int N>7T tmain(T argc, S **argv) {8  // Correct usage9  #pragma omp parallel message("correct message")10 11  // Template parameter is not yet instantiated.12  #pragma omp parallel message(argv[0]) // expected-warning {{expected string in 'clause message' - ignoring}}13 14  // Missing parentheses15  #pragma omp parallel message // expected-error {{expected '(' after 'message'}}16  17  // Empty parentheses18  #pragma omp parallel message() // expected-error {{expected expression}}19 20  // Non-string literal21  #pragma omp parallel message(123) // expected-warning {{expected string in 'clause message' - ignoring}}22  #pragma omp parallel message(argc) // expected-warning {{expected string in 'clause message' - ignoring}}23 24  // Multiple arguments25  #pragma omp parallel message("msg1", "msg2") // expected-error {{expected ')'}} expected-note {{to match this '('}}26  27  // Unterminated string28  // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-warning@+1 {{missing terminating '"' character}} expected-note@+1 {{to match this '('}}29  #pragma omp parallel message("unterminated30 31  // Unterminated clause32  // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}33  #pragma omp parallel message("msg"34 35  // Extra tokens after clause36  #pragma omp parallel message("msg") extra // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}37 38  // Multiple message clauses39  #pragma omp parallel message("msg1") message("msg2") // expected-error {{directive '#pragma omp parallel' cannot contain more than one 'message' clause}}40 41  // Message clause with other clauses (should be valid, but test for interaction)42  #pragma omp parallel message("msg") num_threads(2)43 44  // Message clause with invalid clause45  #pragma omp parallel message("msg") invalid_clause // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}46 47  // Message clause with missing string and other clause48  #pragma omp parallel message() num_threads(2) // expected-error {{expected expression}}49 50  // Message clause with macro that is not a string51  #define NOT_A_STRING 12352  #pragma omp parallel message(NOT_A_STRING) // expected-warning {{expected string in 'clause message' - ignoring}}53 54  // Message clause with template parameter that is not a string55  #pragma omp parallel message(N) // expected-warning {{expected string in 'clause message' - ignoring}}56 57  // Message clause with macro that is a string58  #define A_STRING "macro string"59  #pragma omp parallel message(A_STRING)60 61  // Message clause with concatenated string literals62  #pragma omp parallel message("hello" " world")63 64  // Message clause with wide string literal65  #pragma omp parallel message(L"wide string")66 67  // Message clause with UTF-8 string literal68  #pragma omp parallel message(u8"utf8 string")69 70  // Message clause with raw string literal71  #pragma omp parallel message(R"(raw string)")72 73  foo();74 75  return argc;76}77 78template<int N> int tmain(int argc, char **argv);79 80int main(int argc, char **argv) {81  const char str1[] = "msg";82  const char *str2 = "msg";83  char str3[] = "msg";84  char *str4 = str3;85  char * const str5 = str3;86 87  // Correct usage88  #pragma omp parallel message("main correct")89  #pragma omp parallel message(argv[0])90  #pragma omp parallel message(str1)91  #pragma omp parallel message(str2)92  #pragma omp parallel message(str3)93  #pragma omp parallel message(str4)94  #pragma omp parallel message(str5)95 96  // Invalid: missing string97  #pragma omp parallel message() // expected-error {{expression}}98 99  // Invalid: non-string100  #pragma omp parallel message(argc) // expected-warning {{expected string in 'clause message' - ignoring}}101 102  foo();103 104  return tmain<int, char, 3>(argc, argv);105}106