diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9414b24b0578cf85795ab29389665d776fab9eb2..e62c447b7b6034e6103f0af7ad4cbed78408e756 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-01-30  Richard Guenther  <rguenther@suse.de>
+
+	PR tree-optimization/52045
+	* tree-optimize.c (execute_cleanup_cfg_post_optimizing): Update
+	SSA form if cfgcleanup did anything.
+
 2012-01-30  Richard Guenther  <rguenther@suse.de>
 
 	PR tree-optimization/52045
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 77ad64db661aa323fd9516d23809dc5b55dfe82e..65a9a7a0f54b79c7261418c2a78fcec94b39ac4b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-30  Richard Guenther  <rguenther@suse.de>
+
+	PR tree-optimization/52045
+	* gcc.dg/pr52045.c: New testcase.
+
 2012-01-30  Greta Yorsh  <Greta.Yorsh@arm.com>
 
         * gcc.target/arm/di-longlong64-sync-withldrexd.c: Accept
diff --git a/gcc/testsuite/gcc.dg/pr52045.c b/gcc/testsuite/gcc.dg/pr52045.c
new file mode 100644
index 0000000000000000000000000000000000000000..888ddb6a129a17a294608023a1bcb20baf23a4cd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr52045.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -ftracer -fno-tree-ccp -fno-tree-copy-prop -fno-tree-dce" } */
+
+char *vx;
+char buf[20];
+
+void
+foo (void)
+{
+  vx = __builtin___stpcpy_chk (buf, vx ? "gh" : "e", sizeof(buf));
+}
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c
index d242204b6719a6c95d61f43240baf380cf795fbb..3d18d20a003c36568fda6ad8df88db8cf45aa4fe 100644
--- a/gcc/tree-optimize.c
+++ b/gcc/tree-optimize.c
@@ -157,7 +157,9 @@ struct gimple_opt_pass pass_all_early_optimizations =
 static unsigned int
 execute_cleanup_cfg_post_optimizing (void)
 {
-  cleanup_tree_cfg ();
+  unsigned int todo = 0;
+  if (cleanup_tree_cfg ())
+    todo |= TODO_update_ssa;
   maybe_remove_unreachable_handlers ();
   cleanup_dead_labels ();
   group_case_labels ();
@@ -190,7 +192,7 @@ execute_cleanup_cfg_post_optimizing (void)
 	    }
 	}
     }
-  return 0;
+  return todo;
 }
 
 struct gimple_opt_pass pass_cleanup_cfg_post_optimizing =