aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@gcc.gnu.org>2006-12-19 21:00:50 -0800
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-12-19 21:00:50 -0800
commit7954dc21214b87ad8b3cf26994af00f968fcba78 (patch)
treedf882d04a823c13b4fd210d1da5ce8af48652fef
parent69a0f8c61ea99c4cc9dc551e7523180e197d525f (diff)
downloadgcc-7954dc21214b87ad8b3cf26994af00f968fcba78.zip
gcc-7954dc21214b87ad8b3cf26994af00f968fcba78.tar.gz
gcc-7954dc21214b87ad8b3cf26994af00f968fcba78.tar.bz2
re PR tree-optimization/30045 (ICE in nonnull_arg_p with the CHAIN decl)
2006-12-19 Andrew Pinski <pinskia@gmail.com> PR tree-opt/30045 * tree-vrp.c (nonnull_arg_p): Treat the static decl as always non null. 2006-12-19 Andrew Pinski <pinskia@gmail.com> PR tree-opt/30045 * gcc.dg/pr30045.c: New test From-SVN: r120069
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr30045.c15
-rw-r--r--gcc/tree-vrp.c4
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d692458..a5aadaf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-12-19 Andrew Pinski <pinskia@gmail.com>
+
+ PR tree-opt/30045
+ * tree-vrp.c (nonnull_arg_p): Treat the static decl as always
+ non null.
+
2006-12-20 Ben Elliston <bje@au.ibm.com>
* doc/invoke.texi (Optimize Options): Typo fix.
@@ -18,8 +24,8 @@
2006-12-19 Paolo Bonzini <bonzini@gnu.org>
PR bootstrap/29544
- * gcc/Makefile.in (STAGE1_CHECKING): Rename to...
- (STAGE1_CHECKING_CFLAGS): ... this.
+ * gcc/Makefile.in (STAGE1_CHECKING): Rename to...
+ (STAGE1_CHECKING_CFLAGS): ... this.
2006-12-18 Andrew Pinski <pinskia@gmail.com>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 538cba6..2f5d6b7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-19 Andrew Pinski <pinskia@gmail.com>
+
+ PR tree-opt/30045
+ * gcc.dg/pr30045.c: New test.
+
2006-12-20 Ben Elliston <bje@au.ibm.com>
* gcc.dg/20020312-2.c: Add a case for __SPU__.
diff --git a/gcc/testsuite/gcc.dg/pr30045.c b/gcc/testsuite/gcc.dg/pr30045.c
new file mode 100644
index 0000000..6dd22a1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr30045.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-inline" } */
+int f(int *a)
+{
+ int __attribute__((nonnull(1))) g(int *b)
+ {
+ int **c = &a;
+ if (b)
+ return *a + **c;
+ return *b;
+ }
+ if (a)
+ return g(a);
+ return 1;
+}
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 483607e..302a620 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -102,6 +102,10 @@ nonnull_arg_p (tree arg)
gcc_assert (TREE_CODE (arg) == PARM_DECL && POINTER_TYPE_P (TREE_TYPE (arg)));
+ /* The static chain decl is always non null. */
+ if (arg == cfun->static_chain_decl)
+ return true;
+
fntype = TREE_TYPE (current_function_decl);
attrs = lookup_attribute ("nonnull", TYPE_ATTRIBUTES (fntype));