From 3a37d6f68c50d38303cf04039f79fc65e72d5a27 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 19 Jun 2019 00:13:54 +0200 Subject: [PR90862] OpenACC 'declare' ICE when nested inside another construct gcc/ PR middle-end/90862 * omp-low.c (check_omp_nesting_restrictions): Handle GF_OMP_TARGET_KIND_OACC_DECLARE. gcc/testsuite/ PR middle-end/90862 * c-c++-common/goacc/declare-1.c: Update. * c-c++-common/goacc/declare-2.c: Likewise. libgomp/ PR middle-end/90862 * testsuite/libgomp.oacc-c-c++-common/declare-1.c: Update. From-SVN: r272444 --- libgomp/ChangeLog | 5 ++ .../libgomp.oacc-c-c++-common/declare-1.c | 98 ++++++++++++++++++++-- 2 files changed, 97 insertions(+), 6 deletions(-) (limited to 'libgomp') diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 827bab2..06004aa 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2019-06-18 Thomas Schwinge + + PR middle-end/90862 + * testsuite/libgomp.oacc-c-c++-common/declare-1.c: Update. + 2019-06-16 Tom de Vries PR tree-optimization/89376 diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c index bc7261742..087b954 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/declare-1.c @@ -1,6 +1,5 @@ #include #include -#include #define N 8 @@ -39,14 +38,14 @@ subr1 (int *a) } } -int b[8]; +int b[N]; #pragma acc declare create (b) -int d[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; +int d[N] = { 1, 2, 3, 4, 5, 6, 7, 8 }; #pragma acc declare copyin (d) -int -main (int argc, char **argv) +static void +f (void) { int a[N]; int e[N]; @@ -110,11 +109,98 @@ main (int argc, char **argv) subr2 (&a[0]); - for (i = 0; i < 1; i++) + for (i = 0; i < N; i++) { if (a[i] != 1234 * 6) abort (); } +} + + +/* The same as 'f' but everything contained in an OpenACC 'data' construct. */ + +static void +f_data (void) +{ +#pragma acc data + { + int a[N]; + int e[N]; +# pragma acc declare create (e) + int i; + + for (i = 0; i < N; i++) + a[i] = i + 1; + + if (!acc_is_present (&b, sizeof (b))) + abort (); + + if (!acc_is_present (&d, sizeof (d))) + abort (); + + if (!acc_is_present (&e, sizeof (e))) + abort (); + +# pragma acc parallel copyin (a[0:N]) + { + for (i = 0; i < N; i++) + { + b[i] = a[i]; + a[i] = b[i]; + } + } + + for (i = 0; i < N; i++) + { + if (a[i] != i + 1) + abort (); + } + +# pragma acc parallel copy (a[0:N]) + { + for (i = 0; i < N; i++) + { + e[i] = a[i] + d[i]; + a[i] = e[i]; + } + } + + for (i = 0; i < N; i++) + { + if (a[i] != (i + 1) * 2) + abort (); + } + + for (i = 0; i < N; i++) + { + a[i] = 1234; + } + + subr1 (&a[0]); + + for (i = 0; i < N; i++) + { + if (a[i] != 1234 * 2) + abort (); + } + + subr2 (&a[0]); + + for (i = 0; i < N; i++) + { + if (a[i] != 1234 * 6) + abort (); + } + } +} + + +int +main (int argc, char **argv) +{ + f (); + + f_data (); return 0; } -- cgit v1.1