re PR tree-optimization/78742 (internal compiler error: in int_cst_value, at tree...
authorRichard Biener <rguenther@suse.de>
Tue, 13 Dec 2016 09:17:42 +0000 (09:17 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 13 Dec 2016 09:17:42 +0000 (09:17 +0000)
2016-12-13  Richard Biener  <rguenther@suse.de>

PR middle-end/78742
* tree.c (cst_and_fits_in_hwi): Look if the actual value fits.
* tree-object-size.c (compute_builtin_object_size): Use
tree_fits_shwi_p.
* tree-data-ref.c (initialize_matrix_A): Remove excess assert.

* gcc.dg/torture/pr78742.c: New testcase.

From-SVN: r243598

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr78742.c [new file with mode: 0644]
gcc/tree-data-ref.c
gcc/tree-object-size.c
gcc/tree.c

index 9ae13c5ed054be31ea65619a3480115329376676..5e0562bbbef6ab72251c1be1c06c1bb015e821d1 100644 (file)
@@ -1,3 +1,11 @@
+2016-12-13  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/78742
+       * tree.c (cst_and_fits_in_hwi): Look if the actual value fits.
+       * tree-object-size.c (compute_builtin_object_size): Use
+       tree_fits_shwi_p.
+       * tree-data-ref.c (initialize_matrix_A): Remove excess assert.
+
 2016-12-13  Martin Liska  <mliska@suse.cz>
 
        * asan.c (asan_mark_poison_p): Remove.
index ff7bd7868bce1447c6db1380da62be21d9f6baca..6ad28bf9ce0b7df13957ec9485c3efac5ad7a02a 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-13  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/78742
+       * gcc.dg/torture/pr78742.c: New testcase.
+
 2016-12-13  Martin Liska  <mliska@suse.cz>
 
        * gcc.dg/asan/use-after-scope-goto-1.c: Update first argument of
diff --git a/gcc/testsuite/gcc.dg/torture/pr78742.c b/gcc/testsuite/gcc.dg/torture/pr78742.c
new file mode 100644 (file)
index 0000000..c83ecbc
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target int128 } */
+
+void foo();
+
+void func()
+{
+  int m;
+
+  int tab[m];
+
+  __int128 j;
+  for(; j; j++)
+    {
+      tab[j] = 0;
+      tab[j+1] = 0;
+    }
+
+  foo();
+}
index 8152da3f180343ad9c4382818515920130144d6e..1408c242f228ab1259c86998d3aa078688dcf69a 100644 (file)
@@ -2118,8 +2118,6 @@ initialize_matrix_A (lambda_matrix A, tree chrec, unsigned index, int mult)
   switch (TREE_CODE (chrec))
     {
     case POLYNOMIAL_CHREC:
-      gcc_assert (TREE_CODE (CHREC_RIGHT (chrec)) == INTEGER_CST);
-
       A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec));
       return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult);
 
index 0fae183b330a33b86c544cf733a5a6447fca8369..f9c752198e0f3fda7e63c0b610ed63cce982a556 100644 (file)
@@ -538,7 +538,7 @@ compute_builtin_object_size (tree ptr, int object_size_type,
              tree offset = gimple_assign_rhs2 (def);
              ptr = gimple_assign_rhs1 (def);
 
-             if (cst_and_fits_in_hwi (offset)
+             if (tree_fits_shwi_p (offset)
                  && compute_builtin_object_size (ptr, object_size_type, psize))
                {
                  /* Return zero when the offset is out of bounds.  */
index 0f0e6753b19bcf027594a1b49144d6d8fc250c3b..2a60386652277bcc037cfe6d0b5d29aa0c59ac8d 100644 (file)
@@ -1677,7 +1677,7 @@ bool
 cst_and_fits_in_hwi (const_tree x)
 {
   return (TREE_CODE (x) == INTEGER_CST
-         && TYPE_PRECISION (TREE_TYPE (x)) <= HOST_BITS_PER_WIDE_INT);
+         && (tree_fits_shwi_p (x) || tree_fits_uhwi_p (x)));
 }
 
 /* Build a newly constructed VECTOR_CST node of length LEN.  */