[PATCH] Fix middle-end/67133, part 2
Richard Biener
richard.guenther@gmail.com
Fri Aug 14 16:25:00 GMT 2015
On August 14, 2015 5:27:15 PM GMT+02:00, Marek Polacek <polacek@redhat.com> wrote:
>This is the second fix for this PR. Here the problem was that we were
>accessing arguments that don't exist. We first need to check that the
>call stmt has sufficient number of arguments. For details see the PR.
>
>Bootstrapped/regtested on x86_64-linux, ok for trunk?
OK.
Thanks,
Richard.
>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.
>
> * gcc.dg/torture/pr67133.c: New test.
>
>diff --git gcc/gimple.c gcc/gimple.c
>index cca328a..1bfa8c7 100644
>--- gcc/gimple.c
>+++ gcc/gimple.c
>@@ -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;
>+ }
> }
> }
> }
>diff --git gcc/testsuite/gcc.dg/torture/pr67133.c
>gcc/testsuite/gcc.dg/torture/pr67133.c
>index e69de29..4eb552e 100644
>--- gcc/testsuite/gcc.dg/torture/pr67133.c
>+++ gcc/testsuite/gcc.dg/torture/pr67133.c
>@@ -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);
>+}
>
> Marek
More information about the Gcc-patches
mailing list