[PATCH] Fix PR78229

Richard Biener rguenther@suse.de
Mon Nov 7 12:20:00 GMT 2016


Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk
and branch.

Richard.

2016-11-07  Richard Biener  <rguenther@suse.de>

	PR target/78229
	* config/i386/i386.c (ix86_gimple_fold_builtin): Do not adjust
	EH info.

	* g++.dg/pr78229.C: New testcase.

Index: gcc/config/i386/i386.c
===================================================================
--- gcc/config/i386/i386.c	(revision 241891)
+++ gcc/config/i386/i386.c	(working copy)
@@ -37664,7 +37664,7 @@ ix86_gimple_fold_builtin (gimple_stmt_it
 	  gsi_insert_before (gsi, g, GSI_SAME_STMT);
 	  g = gimple_build_assign (gimple_call_lhs (stmt), NOP_EXPR, lhs);
 	  gimple_set_location (g, loc);
-	  gsi_replace (gsi, g, true);
+	  gsi_replace (gsi, g, false);
 	  return true;
 	}
       break;
Index: gcc/testsuite/g++.dg/pr78229.C
===================================================================
--- gcc/testsuite/g++.dg/pr78229.C	(revision 0)
+++ gcc/testsuite/g++.dg/pr78229.C	(working copy)
@@ -0,0 +1,24 @@
+/* { dg-do compile { target x86_64-*-* i?86-*-* } } */
+/* { dg-options "-O2 -mbmi -w" } */
+
+void a();
+inline int b(int c) {
+    int d = c;
+    return __builtin_ia32_tzcnt_u32(d);
+}
+struct e {};
+int f, g, h;
+void fn3() {
+    float j;
+    &j;
+      {
+	e k;
+	while (h) {
+	    if (g == 0)
+	      continue;
+	    int i = b(g);
+	    f = i;
+	}
+	a();
+      }
+}



More information about the Gcc-patches mailing list