aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-08-22 11:01:58 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-08-22 11:01:58 +0000
commitacc2580750f930440cabe85650df8a2f20ff520d (patch)
tree87fb853e26710c2432d55e0a90685db4cd815017 /gcc
parent66c4f4d8c4399c499f1af5f550bf28878a8d69db (diff)
downloadgcc-acc2580750f930440cabe85650df8a2f20ff520d.zip
gcc-acc2580750f930440cabe85650df8a2f20ff520d.tar.gz
gcc-acc2580750f930440cabe85650df8a2f20ff520d.tar.bz2
re PR tree-optimization/86988 (ICE: tree check: expected integer_cst, have var_decl in get_len, at tree.h:5563)
2018-08-22 Richard Biener <rguenther@suse.de> PR tree-optimization/86988 * tree-vrp.c (vrp_prop::check_mem_ref): Bail out on VLAs. * g++.dg/pr86988.C: New testcase. From-SVN: r263762
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/pr86988.C16
-rw-r--r--gcc/tree-vrp.c1
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a67b23..7dfdd45 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2018-08-22 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/86988
+ * tree-vrp.c (vrp_prop::check_mem_ref): Bail out on VLAs.
+
+2018-08-22 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/86945
* tree-cfg.c (generate_range_test): Use unsigned arithmetic.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4e38d71..e238d93 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2018-08-22 Richard Biener <rguenther@suse.de>
+ PR tree-optimization/86988
+ * g++.dg/pr86988.C: New testcase.
+
+2018-08-22 Richard Biener <rguenther@suse.de>
+
PR tree-optimization/86945
* tree-cfg.c (generate_range_test): Use unsigned arithmetic.
diff --git a/gcc/testsuite/g++.dg/pr86988.C b/gcc/testsuite/g++.dg/pr86988.C
new file mode 100644
index 0000000..62fb0f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr86988.C
@@ -0,0 +1,16 @@
+// { dg-do compile }
+// { dg-options "-O2 -Warray-bounds" }
+
+struct R { int r; };
+void baz (char *, char *, char *, char *);
+
+void
+foo ()
+{
+ const R a = { 12 };
+ char b[1][a.r] = { { "12345678901" } };
+ char c[a.r] = { "12345678901" };
+ char d[1][a.r] = { { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '\0' } };
+ char e[a.r] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '\0' };
+ baz (b[0], c, d[0], e);
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 24e089b..ead19f1 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -4581,6 +4581,7 @@ vrp_prop::check_mem_ref (location_t location, tree ref,
tree reftype = TREE_TYPE (arg);
if (POINTER_TYPE_P (reftype)
|| !COMPLETE_TYPE_P (reftype)
+ || TREE_CODE (TYPE_SIZE_UNIT (reftype)) != INTEGER_CST
|| RECORD_OR_UNION_TYPE_P (reftype))
return;