diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-12-13 19:48:23 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-12-13 19:48:23 +0100 |
commit | 7bd169c861d0e696db036753c2935f86583fef49 (patch) | |
tree | a1ae549ee0c7749ca98677ccd2b290b58a71fb6d /gcc | |
parent | 60012ddc08d9bbaa078c2ac830d594e3e6b4e2e0 (diff) | |
download | gcc-7bd169c861d0e696db036753c2935f86583fef49.zip gcc-7bd169c861d0e696db036753c2935f86583fef49.tar.gz gcc-7bd169c861d0e696db036753c2935f86583fef49.tar.bz2 |
tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts with the exception of debug begin stmt markers appear...
* tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts
with the exception of debug begin stmt markers appear before
labels.
From-SVN: r255611
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 943c879..420d84b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2017-12-13 Jakub Jelinek <jakub@redhat.com> + * tree-cfg.c (verify_gimple_in_cfg): Verify no non-label stmts + with the exception of debug begin stmt markers appear before + labels. + PR bootstrap/83396 * final.c (rest_of_handle_final): Call variable_tracking_main only if !flag_var_tracking. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 9a4e3e2..75a0a30 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -5380,6 +5380,7 @@ verify_gimple_in_cfg (struct function *fn, bool verify_nothrow) err |= err2; } + bool label_allowed = true; for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); @@ -5396,6 +5397,19 @@ verify_gimple_in_cfg (struct function *fn, bool verify_nothrow) err2 = true; } + /* Labels may be preceded only by debug markers, not debug bind + or source bind or any other statements. */ + if (gimple_code (stmt) == GIMPLE_LABEL) + { + if (!label_allowed) + { + error ("gimple label in the middle of a basic block"); + err2 = true; + } + } + else if (!gimple_debug_begin_stmt_p (stmt)) + label_allowed = false; + err2 |= verify_gimple_stmt (stmt); err2 |= verify_location (&blocks, gimple_location (stmt)); |