Bootstrapped / tested on x86_64-unknown-linux-gnu, applied. Richard.
2015-09-16 Richard Biener <rguent...@suse.de> PR middle-end/67271 * fold-const.c (native_encode_expr): Bail out on bogus offsets. * gcc.dg/pr67271.c: New testcase. Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c (revision 227779) +++ gcc/fold-const.c (working copy) @@ -7106,6 +7127,10 @@ native_encode_string (const_tree expr, u 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: Index: gcc/testsuite/gcc.dg/pr67271.c =================================================================== --- gcc/testsuite/gcc.dg/pr67271.c (revision 0) +++ gcc/testsuite/gcc.dg/pr67271.c (working copy) @@ -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; +}