From 7d75cd45a716ffbdad8292fa1eb88adef6299144 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 8 Jun 2017 21:12:38 +0200 Subject: [PATCH] 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: r249036 --- gcc/c/ChangeLog | 6 ++++++ gcc/c/c-typeck.c | 6 +++--- gcc/cp/ChangeLog | 4 ++++ gcc/cp/semantics.c | 6 +++--- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/c-c++-common/gomp/pr81006.c | 10 ++++++++++ 6 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/gomp/pr81006.c diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 7567aa7418f..9177b723260 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-26 Marek Polacek Backported from mainline diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index ff239e2d628..ee365313c81 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -12355,9 +12355,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 71d9206d0a4..f090ae3f52d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +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. + PR c++/81011 * cp-gimplify.c (cxx_omp_finish_clause): When changing clause to OMP_CLAUSE_SHARED, also clear OMP_CLAUSE_SHARED_FIRSTPRIVATE diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index f02ba6336b0..ad6900258d4 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4707,9 +4707,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 b3f2b319e88..53030dc06cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2017-06-08 Jakub Jelinek + PR c/81006 + * c-c++-common/gomp/pr81006.c: New test. + PR c++/81011 * g++.dg/gomp/pr81011.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 00000000000..a826c5f5a53 --- /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" } */ + {} +}