From f99ffaa350319dd28bca797ed54abf8617e866ad Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 2 Nov 2012 12:10:36 +0000 Subject: cfg-flags.def (ABNORMAL_CALL): Fix comment. * cfg-flags.def (ABNORMAL_CALL): Fix comment. (EH): Likewise. (SIBCALL): Likewise. * cfgrtl.c (rtl_verify_flow_info_1): Adjust error messages. Deal with EDGE_SIBCALL and fix the EDGE_ABNORMAL check. From-SVN: r193094 --- gcc/cfgrtl.c | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) (limited to 'gcc/cfgrtl.c') diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 9156ee8..1f601e5 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2095,7 +2095,8 @@ rtl_verify_flow_info_1 (void) /* Now check the basic blocks (boundaries etc.) */ FOR_EACH_BB_REVERSE (bb) { - int n_fallthru = 0, n_eh = 0, n_call = 0, n_abnormal = 0, n_branch = 0; + int n_fallthru = 0, n_branch = 0, n_abnormal_call = 0, n_sibcall = 0; + int n_eh = 0, n_abnormal = 0; edge e, fallthru = NULL; rtx note; edge_iterator ei; @@ -2132,13 +2133,13 @@ rtl_verify_flow_info_1 (void) } if (e->flags & EDGE_FALLTHRU) { - error ("fallthru edge crosses section boundary (bb %i)", + error ("fallthru edge crosses section boundary in bb %i", e->src->index); err = 1; } if (e->flags & EDGE_EH) { - error ("EH edge crosses section boundary (bb %i)", + error ("EH edge crosses section boundary in bb %i", e->src->index); err = 1; } @@ -2158,22 +2159,26 @@ rtl_verify_flow_info_1 (void) n_branch++; if (e->flags & EDGE_ABNORMAL_CALL) - n_call++; + n_abnormal_call++; + + if (e->flags & EDGE_SIBCALL) + n_sibcall++; if (e->flags & EDGE_EH) n_eh++; - else if (e->flags & EDGE_ABNORMAL) + + if (e->flags & EDGE_ABNORMAL) n_abnormal++; } if (n_eh && !find_reg_note (BB_END (bb), REG_EH_REGION, NULL_RTX)) { - error ("missing REG_EH_REGION note in the end of bb %i", bb->index); + error ("missing REG_EH_REGION note at the end of bb %i", bb->index); err = 1; } if (n_eh > 1) { - error ("too many eh edges %i", bb->index); + error ("too many exception handling edges in bb %i", bb->index); err = 1; } if (n_branch @@ -2186,29 +2191,35 @@ rtl_verify_flow_info_1 (void) } if (n_fallthru && any_uncondjump_p (BB_END (bb))) { - error ("fallthru edge after unconditional jump %i", bb->index); + error ("fallthru edge after unconditional jump in bb %i", bb->index); err = 1; } if (n_branch != 1 && any_uncondjump_p (BB_END (bb))) { - error ("wrong number of branch edges after unconditional jump %i", - bb->index); + error ("wrong number of branch edges after unconditional jump" + " in bb %i", bb->index); err = 1; } if (n_branch != 1 && any_condjump_p (BB_END (bb)) && JUMP_LABEL (BB_END (bb)) != BB_HEAD (fallthru->dest)) { - error ("wrong amount of branch edges after conditional jump %i", - bb->index); + error ("wrong amount of branch edges after conditional jump" + " in bb %i", bb->index); + err = 1; + } + if (n_abnormal_call && !CALL_P (BB_END (bb))) + { + error ("abnormal call edges for non-call insn in bb %i", bb->index); err = 1; } - if (n_call && !CALL_P (BB_END (bb))) + if (n_sibcall && !CALL_P (BB_END (bb))) { - error ("call edges for non-call insn in bb %i", bb->index); + error ("sibcall edges for non-call insn in bb %i", bb->index); err = 1; } - if (n_abnormal - && (!CALL_P (BB_END (bb)) && n_call != n_abnormal) + if (n_abnormal > n_eh + && !(CALL_P (BB_END (bb)) + && n_abnormal == n_abnormal_call + n_sibcall) && (!JUMP_P (BB_END (bb)) || any_condjump_p (BB_END (bb)) || any_uncondjump_p (BB_END (bb)))) -- cgit v1.1