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
109 lines
3.6 KiB
C++
109 lines
3.6 KiB
C++
// OpenMP split / counts: parse and semantic diagnostics.
|
|
//
|
|
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -std=c++17 -fopenmp -fopenmp-version=60 -fsyntax-only -verify %s
|
|
|
|
void body(int);
|
|
|
|
void parse_and_clause_errors() {
|
|
|
|
// Malformed `counts` — missing '('
|
|
// expected-error@+1 {{expected '('}}
|
|
#pragma omp split counts
|
|
;
|
|
|
|
// Empty `counts` list
|
|
// expected-error@+1 {{expected expression}}
|
|
#pragma omp split counts()
|
|
;
|
|
|
|
// Truncated list / missing ')'
|
|
// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
|
|
#pragma omp split counts(3
|
|
for (int i = 0; i < 7; ++i)
|
|
;
|
|
|
|
// Trailing comma only
|
|
// expected-error@+1 {{expected expression}}
|
|
#pragma omp split counts(3,)
|
|
;
|
|
|
|
// Expression after comma missing
|
|
// expected-error@+2 {{expected expression}}
|
|
// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
|
|
#pragma omp split counts(3,
|
|
;
|
|
|
|
// Incomplete arithmetic in count (like `tile_messages` sizes(5+))
|
|
// expected-error@+2 {{expected expression}}
|
|
// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
|
|
#pragma omp split counts(5+
|
|
;
|
|
|
|
// `for` keyword not a constant-expression operand
|
|
// expected-error@+1 {{expected expression}}
|
|
#pragma omp split counts(for)
|
|
;
|
|
|
|
// Duplicate `counts` clauses
|
|
// expected-error@+1 {{directive '#pragma omp split' cannot contain more than one 'counts' clause}}
|
|
#pragma omp split counts(2, omp_fill) counts(3, omp_fill)
|
|
for (int i = 0; i < 7; ++i)
|
|
;
|
|
|
|
// Disallowed extra clause
|
|
// expected-error@+1 {{unexpected OpenMP clause 'collapse' in directive '#pragma omp split'}}
|
|
#pragma omp split counts(2, omp_fill) collapse(2)
|
|
for (int i = 0; i < 7; ++i)
|
|
;
|
|
|
|
// Non-relational loop condition (canonical loop check)
|
|
#pragma omp split counts(omp_fill)
|
|
// expected-error@+1 {{condition of OpenMP for loop must be a relational comparison ('<', '<=', '>', '>=', or '!=') of loop variable 'i'}}
|
|
for (int i = 0; i / 3 < 7; ++i)
|
|
;
|
|
|
|
// More than one `omp_fill`
|
|
// expected-error@+1 {{exactly one 'omp_fill' must appear in the 'counts' clause}}
|
|
#pragma omp split counts(omp_fill, omp_fill)
|
|
for (int i = 0; i < 10; ++i)
|
|
body(i);
|
|
|
|
// No `omp_fill` at all — also triggers "exactly one" diagnostic.
|
|
// expected-error@+1 {{exactly one 'omp_fill' must appear in the 'counts' clause}}
|
|
#pragma omp split counts(2, 3)
|
|
for (int i = 0; i < 10; ++i)
|
|
body(i);
|
|
|
|
// Positive: `omp_fill` may appear at any position in `counts` (not required to be last).
|
|
#pragma omp split counts(omp_fill, 2)
|
|
for (int i = 0; i < 10; ++i)
|
|
body(i);
|
|
|
|
// OpenMP 6.0: non-`omp_fill` list items must be integral constant expressions.
|
|
{
|
|
int v = 3; // expected-note {{declared here}}
|
|
#pragma omp split counts(v, omp_fill) // expected-error {{expression is not an integral constant expression}} \
|
|
// expected-note {{read of non-const variable 'v' is not allowed in a constant expression}}
|
|
for (int i = 0; i < 10; ++i)
|
|
body(i);
|
|
}
|
|
}
|
|
|
|
void associated_statement_diagnostics() {
|
|
{
|
|
// expected-error@+2 {{expected statement}}
|
|
#pragma omp split counts(omp_fill)
|
|
}
|
|
|
|
// Not a `for` loop (contrast `split_diag_errors.c` / `while`)
|
|
// expected-error@+2 {{statement after '#pragma omp split' must be a for loop}}
|
|
#pragma omp split counts(omp_fill)
|
|
int b = 0;
|
|
|
|
// expected-warning@+2 {{extra tokens at the end of '#pragma omp split' are ignored}}
|
|
// expected-error@+1 {{directive '#pragma omp split' requires the 'counts' clause}}
|
|
#pragma omp split foo
|
|
for (int i = 0; i < 7; ++i)
|
|
;
|
|
}
|