re PR middle-end/67133 (ICE at -Os and above on x86_64-linux-gnu in gimple_op, at gimple.h:2274)

PR middle-end/67133
	* gimple.c (infer_nonnull_range_by_attribute): Check that the
	nonnull argument position is not outside function arguments.

	* gcc.dg/torture/pr67133.c: New test.

From-SVN: r226896
This commit is contained in:
Marek Polacek 2015-08-14 16:29:38 +00:00 committed by Marek Polacek
parent 356c32e2f4
commit e37dcf4530
4 changed files with 52 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2015-08-14 Marek Polacek <polacek@redhat.com>
PR middle-end/67133
* gimple.c (infer_nonnull_range_by_attribute): Check that the
nonnull argument position is not outside function arguments.
2015-08-14 Matthew Wahab <matthew.wahab@arm.com>
PR target/67143

View File

@ -2694,10 +2694,13 @@ infer_nonnull_range_by_attribute (gimple stmt, tree op)
/* Now see if op appears in the nonnull list. */
for (tree t = TREE_VALUE (attrs); t; t = TREE_CHAIN (t))
{
int idx = TREE_INT_CST_LOW (TREE_VALUE (t)) - 1;
tree arg = gimple_call_arg (stmt, idx);
if (operand_equal_p (op, arg, 0))
return true;
unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (t)) - 1;
if (idx < gimple_call_num_args (stmt))
{
tree arg = gimple_call_arg (stmt, idx);
if (operand_equal_p (op, arg, 0))
return true;
}
}
}
}

View File

@ -1,3 +1,8 @@
2015-08-14 Marek Polacek <polacek@redhat.com>
PR middle-end/67133
* gcc.dg/torture/pr67133.c: New test.
2015-08-14 Matthew Wahab <matthew.wahab@arm.com>
Matthias Klose <doko@debian.org>

View File

@ -0,0 +1,34 @@
/* { dg-do compile } */
/* { dg-additional-options "-fisolate-erroneous-paths-attribute" } */
int printf (const char *, ...);
int foo (int);
int a, *b, c;
static int
fn1 ()
{
if (a)
return (a = 0);
for (; a; )
a = 0;
return 0;
}
static int
fn2 (int p)
{
fn1 ();
c = 0;
if (p)
printf ("%d", 0);
foo (b != &p);
return 0;
}
void
fn3 ()
{
fn2 (0);
}