aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2005-01-20 22:39:41 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2005-01-20 22:39:41 +0000
commit548414c6fb1352554dcc8f573610bd87a4e7da80 (patch)
tree24e0703176bce23418652b842250ea6d14c1ffbd /gcc
parent35fdf04e91648740cbbff8087d7269fef02a678b (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/tree-cfg.c23
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);