diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2005-01-20 22:39:41 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2005-01-20 22:39:41 +0000 |
commit | 548414c6fb1352554dcc8f573610bd87a4e7da80 (patch) | |
tree | 24e0703176bce23418652b842250ea6d14c1ffbd /gcc | |
parent | 35fdf04e91648740cbbff8087d7269fef02a678b (diff) | |
download | gcc-548414c6fb1352554dcc8f573610bd87a4e7da80.zip gcc-548414c6fb1352554dcc8f573610bd87a4e7da80.tar.gz gcc-548414c6fb1352554dcc8f573610bd87a4e7da80.tar.bz2 |
tree-cfg.c (tree_verify_flow_info): Check that a nonlocal label is first in a sequence of labels.
* tree-cfg.c (tree_verify_flow_info): Check that a nonlocal
label is first in a sequence of labels.
From-SVN: r93993
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 23 |
2 files changed, 23 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07b5d87..be4bfdd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-01-20 Kazu Hirata <kazu@cs.umass.edu> + + * tree-cfg.c (tree_verify_flow_info): Check that a nonlocal + label is first in a sequence of labels. + 2005-01-20 Janis Johnson <janis187@us.ibm.com> Giovanni Bajo <giovannibajo@gcc.gnu.org> diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 5321fa4..e7abf97 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3595,25 +3595,38 @@ tree_verify_flow_info (void) { bool found_ctrl_stmt = false; + stmt = NULL_TREE; + /* Skip labels on the start of basic block. */ for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) { - if (TREE_CODE (bsi_stmt (bsi)) != LABEL_EXPR) + tree prev_stmt = stmt; + + stmt = bsi_stmt (bsi); + + if (TREE_CODE (stmt) != LABEL_EXPR) break; - if (label_to_block (LABEL_EXPR_LABEL (bsi_stmt (bsi))) != bb) + if (prev_stmt && DECL_NONLOCAL (LABEL_EXPR_LABEL (stmt))) + { + error ("Nonlocal label %s is not first " + "in a sequence of labels in bb %d"", + IDENTIFIER_POINTER (DECL_NAME (LABEL_EXPR_LABEL (stmt))), + bb->index); + err = 1; + } + + if (label_to_block (LABEL_EXPR_LABEL (stmt)) != bb) { - tree stmt = bsi_stmt (bsi); error ("Label %s to block does not match in bb %d\n", IDENTIFIER_POINTER (DECL_NAME (LABEL_EXPR_LABEL (stmt))), bb->index); err = 1; } - if (decl_function_context (LABEL_EXPR_LABEL (bsi_stmt (bsi))) + if (decl_function_context (LABEL_EXPR_LABEL (stmt)) != current_function_decl) { - tree stmt = bsi_stmt (bsi); error ("Label %s has incorrect context in bb %d\n", IDENTIFIER_POINTER (DECL_NAME (LABEL_EXPR_LABEL (stmt))), bb->index); |