]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/81006 (ICE with zero-size array and #pragma omp task depend)
authorJakub Jelinek <jakub@redhat.com>
Thu, 8 Jun 2017 19:23:34 +0000 (21:23 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 8 Jun 2017 19:23:34 +0000 (21:23 +0200)
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

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/pr81006.c [new file with mode: 0644]

index 510bb7fc500d997af4971cb61f8d31807e1b6b7b..49dc48fedfb596520932bddf793f10de2eb707df 100644 (file)
@@ -1,3 +1,9 @@
+2017-06-08  Jakub Jelinek  <jakub@redhat.com>
+
+       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  <jakub@redhat.com>
 
        Backported from mainline
index ce20eead1393c79cefe0b3cae0f00f340eb514ed..077960cb6e7b2ca0b59450367d5f02cc050f1de8 100644 (file)
@@ -11754,9 +11754,9 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &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))
index 54eee0911b56e574a2668b94183b845dd594304e..4db627a131d4c24ecbed9efb6398e9590a47ebb0 100644 (file)
@@ -1,3 +1,9 @@
+2017-06-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/81006
+       * semantics.c (handle_omp_array_sections_1): Convert TYPE_MAX_VALUE
+       to sizetype before size_binop.
+
 2017-05-30  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index a4fd77ec66167cc8c242e40c19a1459e21fc7bb9..a2d07aa2722aa607276720586749c9b345c7f182 100644 (file)
@@ -4410,9 +4410,9 @@ handle_omp_array_sections_1 (tree c, tree t, vec<tree> &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))
index 12c9260ef2f1c4419dd8f3f94a85444831d3b4e5..1bdf9c9d8c97b3f7ae7ba0792d48c071f5daab1a 100644 (file)
@@ -1,3 +1,8 @@
+2017-06-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/81006
+       * c-c++-common/gomp/pr81006.c: New test.
+
 2017-06-06  David S. Miller  <davem@davemloft.net>
 
        * 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 (file)
index 0000000..d0feaaf
--- /dev/null
@@ -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 *-*-* } } */
+    {}
+}