]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/25481 (Segfault in tree-ssa-structalias.c)
authorRichard Guenther <rguenther@suse.de>
Sun, 18 Dec 2005 22:20:31 +0000 (22:20 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Sun, 18 Dec 2005 22:20:31 +0000 (22:20 +0000)
2005-12-18  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/25481
* tree-ssa-structalias.c (handle_ptr_arith): Handle
accesses we don't have a varinfo for.

* gcc.dg/torture/pr25481.c: New testcase.

From-SVN: r108763

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr25481.c [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index 98468169d1cc4811973072823464ad3f5bc83472..6c9d1b509715d7f6436dbb61083fc0af4f037af8 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-18  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/25481
+       * tree-ssa-structalias.c (handle_ptr_arith): Handle
+       accesses we don't have a varinfo for.
+
 2005-12-17  Jon Grimm  <jgrimm2@us.ibm.com>
            Janis Johnson  <janis187@us.ibm.com>
            Ben Elliston  <bje@au.ibm.com>
index 417496112728ed00ccd0485d0e39accdae344ee0..c12b7885c07b1b529ad83f67e1c2cb3b02f08d26 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-18  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/25481
+       * gcc.dg/torture/pr25481.c: New testcase.
+
 2005-12-18  Ulrich Weigand  <uweigand@de.ibm.com>
 
        PR rtl-optimization/21041
diff --git a/gcc/testsuite/gcc.dg/torture/pr25481.c b/gcc/testsuite/gcc.dg/torture/pr25481.c
new file mode 100644 (file)
index 0000000..3072e5e
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+struct s {
+  int *blah;
+};
+
+static struct s array[] = {
+  { 0 }
+};
+
+void
+foo (struct s *p)
+{
+  unsigned int n = 1;
+  struct s *q = &array[n];
+  while (p < q)
+    p++;
+}
index cf307593b3cea70191db2070985d8b5b0483ceb1..b4251d6f1e3d6fbde5bf6e6fba3654fc65b5b49a 100644 (file)
@@ -3184,9 +3184,13 @@ handle_ptr_arith (VEC (ce_s, heap) *lhsc, tree expr)
        if (c2->type == ADDRESSOF && rhsoffset != 0)
          {
            varinfo_t temp = get_varinfo (c2->var);
-           
-           gcc_assert (first_vi_for_offset (temp, rhsoffset) != NULL);
-           c2->var = first_vi_for_offset (temp, rhsoffset)->id;
+
+           /* An access one after the end of an array is valid,
+              so simply punt on accesses we cannot resolve.  */
+           temp = first_vi_for_offset (temp, rhsoffset);
+           if (temp == NULL)
+             continue;
+           c2->var = temp->id;
            c2->offset = 0;
          }
        else