Patchwork Fix PR55331

login
register
mail settings
Submitter Richard Guenther
Date Nov. 27, 2012, 9:14 a.m.
Message ID <alpine.LNX.2.00.1211271013250.8142@zhemvz.fhfr.qr>
Download mbox | patch
Permalink /patch/202131/
State New
Headers show

Comments

Richard Guenther - Nov. 27, 2012, 9:14 a.m.
This is an alternate fix for PR55331, bootstrapped and tested on
x86_64-unknown-linux-gnu, applied.

Richard.

2012-11-16  Richard Biener  <rguenther@suse.de>

	PR middle-end/55331
	* gimple-fold.c (gimplify_and_update_call_from_tree): Replace
	stmt with a NOP instead of removing it.

	* g++.dg/opt/pr55331.C: New testcase.

Patch

Index: gcc/gimple-fold.c
===================================================================
--- gcc/gimple-fold.c	(revision 193816)
+++ gcc/gimple-fold.c	(working copy)
@@ -607,7 +607,7 @@  gimplify_and_update_call_from_tree (gimp
 	      unlink_stmt_vdef (stmt);
 	      release_defs (stmt);
 	    }
-	  gsi_remove (si_p, true);
+	  gsi_replace (si_p, gimple_build_nop (), true);
 	  return;
 	}
     }
Index: gcc/testsuite/g++.dg/opt/pr55331.C
===================================================================
--- gcc/testsuite/g++.dg/opt/pr55331.C	(revision 0)
+++ gcc/testsuite/g++.dg/opt/pr55331.C	(working copy)
@@ -0,0 +1,14 @@ 
+// PR tree-optimization/55331
+// { dg-do compile }
+// { dg-options "-O2 -fno-tree-fre" }
+
+struct A {};
+
+void
+foo (A *p, bool x)
+{
+  A a;
+  char *e = (char *) (&a + 1);
+  if (x)
+    __builtin_memmove (p, &a, e - (char *) &a);
+}