Files
TheRock/compiler/amd-llvm/clang/test/OpenMP/parallel_message_messages.cpp
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

106 lines
3.9 KiB
C++

// RUN: %clang_cc1 -verify=expected -fopenmp -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
// RUN: %clang_cc1 -verify=expected -fopenmp-simd -fopenmp-version=60 -ferror-limit 100 %s -Wuninitialized
void foo() {}
template <class T, typename S, int N>
T tmain(T argc, S **argv) {
// Correct usage
#pragma omp parallel message("correct message")
// Template parameter is not yet instantiated.
#pragma omp parallel message(argv[0]) // expected-warning {{expected string in 'clause message' - ignoring}}
// Missing parentheses
#pragma omp parallel message // expected-error {{expected '(' after 'message'}}
// Empty parentheses
#pragma omp parallel message() // expected-error {{expected expression}}
// Non-string literal
#pragma omp parallel message(123) // expected-warning {{expected string in 'clause message' - ignoring}}
#pragma omp parallel message(argc) // expected-warning {{expected string in 'clause message' - ignoring}}
// Multiple arguments
#pragma omp parallel message("msg1", "msg2") // expected-error {{expected ')'}} expected-note {{to match this '('}}
// Unterminated string
// expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-warning@+1 {{missing terminating '"' character}} expected-note@+1 {{to match this '('}}
#pragma omp parallel message("unterminated
// Unterminated clause
// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
#pragma omp parallel message("msg"
// Extra tokens after clause
#pragma omp parallel message("msg") extra // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
// Multiple message clauses
#pragma omp parallel message("msg1") message("msg2") // expected-error {{directive '#pragma omp parallel' cannot contain more than one 'message' clause}}
// Message clause with other clauses (should be valid, but test for interaction)
#pragma omp parallel message("msg") num_threads(2)
// Message clause with invalid clause
#pragma omp parallel message("msg") invalid_clause // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
// Message clause with missing string and other clause
#pragma omp parallel message() num_threads(2) // expected-error {{expected expression}}
// Message clause with macro that is not a string
#define NOT_A_STRING 123
#pragma omp parallel message(NOT_A_STRING) // expected-warning {{expected string in 'clause message' - ignoring}}
// Message clause with template parameter that is not a string
#pragma omp parallel message(N) // expected-warning {{expected string in 'clause message' - ignoring}}
// Message clause with macro that is a string
#define A_STRING "macro string"
#pragma omp parallel message(A_STRING)
// Message clause with concatenated string literals
#pragma omp parallel message("hello" " world")
// Message clause with wide string literal
#pragma omp parallel message(L"wide string")
// Message clause with UTF-8 string literal
#pragma omp parallel message(u8"utf8 string")
// Message clause with raw string literal
#pragma omp parallel message(R"(raw string)")
foo();
return argc;
}
template<int N> int tmain(int argc, char **argv);
int main(int argc, char **argv) {
const char str1[] = "msg";
const char *str2 = "msg";
char str3[] = "msg";
char *str4 = str3;
char * const str5 = str3;
// Correct usage
#pragma omp parallel message("main correct")
#pragma omp parallel message(argv[0])
#pragma omp parallel message(str1)
#pragma omp parallel message(str2)
#pragma omp parallel message(str3)
#pragma omp parallel message(str4)
#pragma omp parallel message(str5)
// Invalid: missing string
#pragma omp parallel message() // expected-error {{expression}}
// Invalid: non-string
#pragma omp parallel message(argc) // expected-warning {{expected string in 'clause message' - ignoring}}
foo();
return tmain<int, char, 3>(argc, argv);
}