fix 17051

Richard Henderson rth@twiddle.net
Tue Aug 17 23:41:00 GMT 2004


Missed a case for renaming VDEFs, leading directly to the verify_ssa abort.


r~

        PR 17051
        * tree-sra.c (scalarize_use): Mark all v_defs for !is_output too.

Index: tree-sra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-sra.c,v
retrieving revision 2.23
diff -u -p -r2.23 tree-sra.c
--- tree-sra.c	28 Jul 2004 05:13:08 -0000	2.23
+++ tree-sra.c	17 Aug 2004 23:31:41 -0000
@@ -1780,11 +1780,9 @@ scalarize_use (struct sra_elt *elt, tree
       generate_copy_inout (elt, is_output, generate_element_ref (elt), &list);
       if (list == NULL)
 	return;
+      mark_all_v_defs (expr_first (list));
       if (is_output)
-	{
-	  mark_all_v_defs (expr_first (list));
-	  sra_insert_after (bsi, list);
-	}
+	sra_insert_after (bsi, list);
       else
 	sra_insert_before (bsi, list);
     }
Index: testsuite/gcc.c-torture/compile/20040817-1.c
===================================================================
RCS file: testsuite/gcc.c-torture/compile/20040817-1.c
diff -N testsuite/gcc.c-torture/compile/20040817-1.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ testsuite/gcc.c-torture/compile/20040817-1.c	17 Aug 2004 23:31:45 -0000
@@ -0,0 +1,19 @@
+/* PR 17051: SRA failed to rename the VOPS properly.  */
+
+struct A
+{
+    char c, d;
+};
+
+void foo(struct A *p)
+{
+    struct A a = *p;
+
+    if (p->c)
+        bar1(a);
+    else
+    {
+        if (p) bar2(a,a.c);
+        bar3(a.c);
+    }
+}



More information about the Gcc-patches mailing list