Use a real Dummy node instead of misusing an Unknown node and shortly deactivating...
[libfirm] / ir / ana / irdom.c
index d9a4dc7..1dee09d 100644 (file)
@@ -33,7 +33,7 @@
 #include "xmalloc.h"
 #include "irgwalk.h"
 #include "irdom_t.h"
-#include "irgraph_t.h"   /* To access state field. */
+#include "irgraph_t.h"
 #include "irnode_t.h"
 #include "ircons_t.h"
 #include "array_t.h"
@@ -356,7 +356,7 @@ void dom_tree_walk_irg(ir_graph *irg, irg_walk_func *pre,
        /* The root of the dominator tree should be the Start block. */
        ir_node *root = get_irg_start_block(irg);
 
-  assert(irg->dom_state == dom_consistent
+       assert(irg->dom_state == dom_consistent
                        && "The dominators of the irg must be consistent");
        assert(root && "The start block of the graph is NULL?");
        assert(get_dom_info(root)->idom == NULL
@@ -503,7 +503,11 @@ static void init_tmp_dom_info(ir_node *bl, tmp_dom_info *parent,
        /* Iterate */
        for (i = get_Block_n_cfg_outs_ka(bl) - 1; i >= 0; --i) {
                ir_node *pred = get_Block_cfg_out_ka(bl, i);
-               assert(is_Block(pred));
+               /* can happen for half-optimized dead code (I've seen this in student
+                  projects */
+               if (!is_Block(pred))
+                       continue;
+
                init_tmp_dom_info(pred, tdi, tdi_list, used, n_blocks);
        }
 }