X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firvrfy.c;h=0f852aa9c42295dd7a819b3bb867f086526a54d7;hb=071a25888579c12f2975cec66c844e043ab9a8e9;hp=beeb0c0ce966729277c201d397fe68e2f5b692c3;hpb=4352072fe72b03685d837ff64d6647601e94465d;p=libfirm diff --git a/ir/ir/irvrfy.c b/ir/ir/irvrfy.c index beeb0c0ce..0f852aa9c 100644 --- a/ir/ir/irvrfy.c +++ b/ir/ir/irvrfy.c @@ -254,6 +254,26 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg) switch (opcode) { + + case iro_Block: + for (i = 0; i < get_Block_n_cfgpreds(n); ++i) { + ir_node *pred = get_Block_cfgpred(n, i); + ASSERT_AND_RET((is_Bad(pred) || (get_irn_mode(pred) == mode_X)), "Block node", 0); + } + // End block may only have Return, Raise or fragile ops as preds. + if (n == get_irg_end_block(irg)) + for (i = 0; i < get_Block_n_cfgpreds(n); ++i) { + ir_node *pred = skip_Proj(get_Block_cfgpred(n, i)); + if (is_Proj(pred) || get_irn_op(pred) == op_Tuple) + break; // We can not test properly. How many tuples are there? + ASSERT_AND_RET(((get_irn_op(pred) == op_Return) || + is_Bad(pred) || + (get_irn_op(pred) == op_Raise) || + is_fragile_op(pred) ), + "End Block node", 0); + } + break; + case iro_Start: ASSERT_AND_RET( /* Start: BB --> X x M x ref x data1 x ... x datan x ref */ @@ -365,7 +385,7 @@ int irn_vrfy_irg(ir_node *n, ir_graph *irg) /* Compare arguments of node with those of type */ mt = get_Call_type(n); - if (get_method_variadicity(mt) == variadic) { + if (get_method_variadicity(mt) == variadicity_variadic) { ASSERT_AND_RET( get_Call_n_params(n) >= get_method_n_params(mt), "Number of args for Call doesn't match number of args in variadic type.",