diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 11:32:37 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2020-02-05 11:32:37 +0100 |
commit | b843bcb89519293404bb00d2ed09aae529b54d7f (patch) | |
tree | bcc9c051915ffe04939c1c31d9460d9bcf97d08f /gcc/testsuite/c-c++-common | |
parent | 27736735f6fcba464b90c3a9dff13b7e5c8bdc6e (diff) |
openmp: Avoid ICEs with declare simd; declare simd inbranch [PR93555]
The testcases ICE because when processing the declare simd inbranch,
we don't create the i == 0 clone as it already exists, which means
clone_info->nargs is not adjusted, but we then rely on it being adjusted
when trying other clones.
2020-02-05 Jakub Jelinek <jakub@redhat.com>
PR middle-end/93555
* omp-simd-clone.c (expand_simd_clones): If simd_clone_mangle or
simd_clone_create failed when i == 0, adjust clone->nargs by
clone->inbranch.
* c-c++-common/gomp/pr93555-1.c: New test.
* c-c++-common/gomp/pr93555-2.c: New test.
* gfortran.dg/gomp/pr93555.f90: New test.
Diffstat (limited to 'gcc/testsuite/c-c++-common')
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/pr93555-1.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/pr93555-2.c | 16 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/gomp/pr93555-1.c b/gcc/testsuite/c-c++-common/gomp/pr93555-1.c new file mode 100644 index 00000000000..2eb76a2d9de --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr93555-1.c @@ -0,0 +1,18 @@ +/* PR middle-end/93555 */ +/* { dg-do compile } */ + +#pragma omp declare simd +#pragma omp declare simd inbranch +int +foo (int x) +{ + return x; +} + +#pragma omp declare simd inbranch +#pragma omp declare simd +int +bar (int x) +{ + return x; +} diff --git a/gcc/testsuite/c-c++-common/gomp/pr93555-2.c b/gcc/testsuite/c-c++-common/gomp/pr93555-2.c new file mode 100644 index 00000000000..091f5bd5ff1 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr93555-2.c @@ -0,0 +1,16 @@ +/* PR middle-end/93555 */ +/* { dg-do compile } */ + +#pragma omp declare simd +#pragma omp declare simd inbranch +void +foo (void) +{ +} + +#pragma omp declare simd inbranch +#pragma omp declare simd +void +bar (void) +{ +} |