From f4c222c0358dc0f9f6390e1eee1c6a9214f7f829 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Mon, 7 Aug 2017 17:06:11 +0000 Subject: [PATCH] Fix diff_type in expand_oacc_for char iter_type 2017-08-07 Tom de Vries PR middle-end/78266 * omp-expand.c (expand_oacc_for): Ensure diff_type is large enough. * testsuite/libgomp.oacc-c-c++-common/vprop-2.c: New test. * testsuite/libgomp.oacc-c-c++-common/vprop.c: Remove xfail. From-SVN: r250925 --- gcc/ChangeLog | 5 +++ gcc/omp-expand.c | 2 + libgomp/ChangeLog | 6 +++ .../libgomp.oacc-c-c++-common/vprop-2.c | 45 +++++++++++++++++++ .../libgomp.oacc-c-c++-common/vprop.c | 1 - 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7579f410ea8..2f1a274db16 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-08-07 Tom de Vries + + PR middle-end/78266 + * omp-expand.c (expand_oacc_for): Ensure diff_type is large enough. + 2017-08-07 Martin Liska * config/mips/mips.c: Include attribs.h. diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 0a0098af669..0f635070a21 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -5328,6 +5328,8 @@ expand_oacc_for (struct omp_region *region, struct omp_for_data *fd) } if (POINTER_TYPE_P (diff_type) || TYPE_UNSIGNED (diff_type)) diff_type = signed_type_for (diff_type); + if (TYPE_PRECISION (diff_type) < TYPE_PRECISION (integer_type_node)) + diff_type = integer_type_node; basic_block entry_bb = region->entry; /* BB ending in OMP_FOR */ basic_block exit_bb = region->exit; /* BB ending in OMP_RETURN */ diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 0e6258ff87a..62d4f27d2f3 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,9 @@ +2017-08-07 Tom de Vries + + PR middle-end/78266 + * testsuite/libgomp.oacc-c-c++-common/vprop-2.c: New test. + * testsuite/libgomp.oacc-c-c++-common/vprop.c: Remove xfail. + 2017-07-27 Jakub Jelinek PR c/45784 diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c new file mode 100644 index 00000000000..046ac68014b --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c @@ -0,0 +1,45 @@ +/* { dg-do run } */ + +#include + +#define DO_PRAGMA(x) _Pragma (#x) + +#define test(idx,type,ngangs) \ + void \ + test_##idx () \ + { \ + int b[100]; \ + \ + for (unsigned int i = 0; i < 100; i++) \ + b[i] = 0; \ + \ + DO_PRAGMA(acc parallel num_gangs (ngangs) copy (b)) \ + { \ + _Pragma("acc loop gang") \ + for (type j = 0; j < 5; j++) \ + { \ + _Pragma("acc loop vector") \ + for (unsigned int i = 0; i < 20; i++) \ + b[j * 20 + i] = -2; \ + } \ + } \ + \ + for (unsigned int i = 0; i < 100; i++) \ + assert (b[i] == -2); \ + } + +test (0, signed char, 256) +test (1, unsigned char, 256) +test (2, signed short, 65535) +test (3, unsigned short, 65535) + +int +main () +{ + test_0 (); + test_1 (); + test_2 (); + test_3 (); + + return 0; +} diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c index 0ac0cf62e45..e4dd682e84f 100644 --- a/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c @@ -1,5 +1,4 @@ /* { dg-do run } */ -/* { dg-xfail-run-if "PR78266" { openacc_nvidia_accel_selected } } */ #include -- 2.30.2