On Wed, Jan 30, 2013 at 12:01 AM, Steven Bosscher wrote:
> To prevent that mistake in the future, I've add an assert in dominance.c.
Hmm, that worked with my release-checking compiler of course, but
fails in at least tree-ssa-dom.c (same as for fwprop.c,
loop_optimizer_init destroys fast queries) and tree-ssa-loop-im.c (not
sure yet why).
NB, the fwprop.c change is independent and should go in. The domwalk.c
thing is something to maybe postpone to gcc 4.9.
Testing this patch now:
Index: domwalk.c
===================================================================
--- domwalk.c (revision 195559)
+++ domwalk.c (working copy)
@@ -147,8 +147,17 @@ walk_dominator_tree (struct dom_walk_dat
bitmap_clear (visited);
bitmap_set_bit (visited, ENTRY_BLOCK_PTR->index);
+ /* Make sure dominance information is available, and compute fast queries
+ if necessary. */
+ gcc_assert (dom_info_state (walk_data->dom_direction) >= DOM_NO_FAST_QUERY);
+ calculate_dominance_info (walk_data->dom_direction);
+
while (true)
{
+ /* Thou shall not modify the dominator tree while walking it
+ (nor present it without fast queries available). */
+ gcc_assert (dom_info_state (walk_data->dom_direction) == DOM_OK);
+
/* Don't worry about unreachable blocks. */
if (EDGE_COUNT (bb->preds) > 0
|| bb == ENTRY_BLOCK_PTR