+2013-09-11 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58377
+ * passes.def: Split critical edges before late uninit warning passes.
+ * tree-cfg.c (pass_split_crit_edges): Implement clone method.
+
2013-09-11 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/58385
account for the predicates protecting the set and the use of each
variable. Using a representation like Gated Single Assignment
may help. */
+ /* Split critical edges before late uninit warning to reduce the
+ number of false positives from it. */
+ NEXT_PASS (pass_split_crit_edges);
NEXT_PASS (pass_late_warn_uninitialized);
NEXT_PASS (pass_dse);
NEXT_PASS (pass_forwprop);
/* ??? We do want some kind of loop invariant motion, but we possibly
need to adjust LIM to be more friendly towards preserving accurate
debug information here. */
+ /* Split critical edges before late uninit warning to reduce the
+ number of false positives from it. */
+ NEXT_PASS (pass_split_crit_edges);
NEXT_PASS (pass_late_warn_uninitialized);
NEXT_PASS (pass_uncprop);
NEXT_PASS (pass_local_pure_const);
+2013-09-11 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/58377
+ * g++.dg/uninit-pred-4.C: New testcase.
+
2013-09-11 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/58385
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wuninitialized -Og" } */
+
+int pop ();
+int pop_first_bucket;
+
+int my_pop ()
+{
+ int out; // { dg-bogus "uninitialized" "uninitialized variable warning" }
+
+ while (pop_first_bucket)
+ if (pop_first_bucket && (out = pop()))
+ return out;
+
+ return 0;
+}
/* opt_pass methods: */
unsigned int execute () { return split_critical_edges (); }
+ opt_pass * clone () { return new pass_split_crit_edges (ctxt_); }
}; // class pass_split_crit_edges
} // anon namespace