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