From: Jakub Jelinek Date: Thu, 8 Jun 2017 19:23:34 +0000 (+0200) Subject: re PR c/81006 (ICE with zero-size array and #pragma omp task depend) X-Git-Tag: releases/gcc-5.5.0~219 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24cc8a7421666010dfd53d41d33e387bd52c7c93;p=thirdparty%2Fgcc.git re PR c/81006 (ICE with zero-size array and #pragma omp task depend) PR c/81006 * c-typeck.c (handle_omp_array_sections_1): Convert TYPE_MAX_VALUE to sizetype before size_binop. * semantics.c (handle_omp_array_sections_1): Convert TYPE_MAX_VALUE to sizetype before size_binop. * c-c++-common/gomp/pr81006.c: New test. From-SVN: r249038 --- diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 510bb7fc500d..49dc48fedfb5 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2017-06-08 Jakub Jelinek + + PR c/81006 + * c-typeck.c (handle_omp_array_sections_1): Convert TYPE_MAX_VALUE + to sizetype before size_binop. + 2017-05-30 Jakub Jelinek Backported from mainline diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index ce20eead1393..077960cb6e7b 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -11754,9 +11754,9 @@ handle_omp_array_sections_1 (tree c, tree t, vec &types, && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST) { - tree size = size_binop (PLUS_EXPR, - TYPE_MAX_VALUE (TYPE_DOMAIN (type)), - size_one_node); + tree size + = fold_convert (sizetype, TYPE_MAX_VALUE (TYPE_DOMAIN (type))); + size = size_binop (PLUS_EXPR, size, size_one_node); if (TREE_CODE (low_bound) == INTEGER_CST) { if (tree_int_cst_lt (size, low_bound)) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 54eee0911b56..4db627a131d4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-06-08 Jakub Jelinek + + PR c/81006 + * semantics.c (handle_omp_array_sections_1): Convert TYPE_MAX_VALUE + to sizetype before size_binop. + 2017-05-30 Jakub Jelinek Backported from mainline diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index a4fd77ec6616..a2d07aa2722a 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4410,9 +4410,9 @@ handle_omp_array_sections_1 (tree c, tree t, vec &types, && TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) == INTEGER_CST) { - tree size = size_binop (PLUS_EXPR, - TYPE_MAX_VALUE (TYPE_DOMAIN (type)), - size_one_node); + tree size + = fold_convert (sizetype, TYPE_MAX_VALUE (TYPE_DOMAIN (type))); + size = size_binop (PLUS_EXPR, size, size_one_node); if (TREE_CODE (low_bound) == INTEGER_CST) { if (tree_int_cst_lt (size, low_bound)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 12c9260ef2f1..1bdf9c9d8c97 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-08 Jakub Jelinek + + PR c/81006 + * c-c++-common/gomp/pr81006.c: New test. + 2017-06-06 David S. Miller * gcc.target/sparc/sparc-ret-3.c: New test. diff --git a/gcc/testsuite/c-c++-common/gomp/pr81006.c b/gcc/testsuite/c-c++-common/gomp/pr81006.c new file mode 100644 index 000000000000..d0feaaf26036 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr81006.c @@ -0,0 +1,10 @@ +/* PR c/81006 */ +/* { dg-do compile } */ + +int a[] = {}; + +void foo() +{ + #pragma omp task depend(out: a[:]) /* { dg-error "zero length array section in .depend. clause" "" { xfail *-*-* } } */ + {} +}