X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firdom.c;h=1dee09df4bd5847486687661797fb3963cc4e056;hb=c59d37f47fdab6d74f1da6738b2d3f3373a378b9;hp=d9a4dc72b6afcb9288fa9ee788a9effd352e34b1;hpb=3e1337f622b15ca6edf9d40e588444bee3418ccd;p=libfirm diff --git a/ir/ana/irdom.c b/ir/ana/irdom.c index d9a4dc72b..1dee09df4 100644 --- a/ir/ana/irdom.c +++ b/ir/ana/irdom.c @@ -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); } }