aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2015-09-16 14:26:04 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2015-09-16 14:26:04 +0000
commit486bc8471fd5de49262f2b36a17b1be5915436e1 (patch)
treea1ad851e4c94d70827a9d1e78a39a7e4e7de0435
parentb0463d3db4c5dffff7c0edbbeb48a564a8476787 (diff)
downloadgcc-486bc8471fd5de49262f2b36a17b1be5915436e1.zip
gcc-486bc8471fd5de49262f2b36a17b1be5915436e1.tar.gz
gcc-486bc8471fd5de49262f2b36a17b1be5915436e1.tar.bz2
re PR middle-end/67271 (ICE with -O1,2,3 on darwin14.5 x86_64)
2015-09-16 Richard Biener <rguenther@suse.de> PR middle-end/67271 * fold-const.c (native_encode_expr): Bail out on bogus offsets. * gcc.dg/pr67271.c: New testcase. From-SVN: r227825
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr67271.c12
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 085de31..2ec6aef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-16 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67271
+ * fold-const.c (native_encode_expr): Bail out on bogus offsets.
+
2015-09-16 Eric Botcazou <ebotcazou@adacore.com>
* tree-ssa-sccvn.c (ao_ref_init_from_vn_reference): Use offset_int for
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index fd1c87e..1521450 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -7110,6 +7110,10 @@ native_encode_string (const_tree expr, unsigned char *ptr, int len, int off)
int
native_encode_expr (const_tree expr, unsigned char *ptr, int len, int off)
{
+ /* We don't support starting at negative offset and -1 is special. */
+ if (off < -1)
+ return 0;
+
switch (TREE_CODE (expr))
{
case INTEGER_CST:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 945db71..87bcebf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-16 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/67271
+ * gcc.dg/pr67271.c: New testcase.
+
2015-09-16 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/opt49.adb: New test.
diff --git a/gcc/testsuite/gcc.dg/pr67271.c b/gcc/testsuite/gcc.dg/pr67271.c
new file mode 100644
index 0000000..b6988a3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr67271.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+extern long int labs (long int j);
+int
+main ()
+{
+ long *a = (long *)"empty";
+ int i = 1441516387;
+ a[i] = labs (a[i]);
+ return 0;
+}