diff options
author | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-07-24 19:47:15 +0000 |
---|---|---|
committer | segher <segher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-07-24 19:47:15 +0000 |
commit | f5d6296721d3d0ec832aff481d9704e6f6b48e30 (patch) | |
tree | 37d16339c1aa6c156c66f5de8ebeec600674ad83 | |
parent | c80c7b3fc74fc3d37bfbecd116c7b5df0297c047 (diff) | |
download | gcc-f5d6296721d3d0ec832aff481d9704e6f6b48e30.tar.gz |
cfgrtl: Don't crash in rtl_dump_bb if BB_END(bb) is NULL
Currently rtl_dump_bb crashes if BB_END(bb) is NULL, like it can be
during expand (rtl_dump_bb can be called at any time, by the emergency
dump added recently for example).
This fixes it.
* cfgrtl.c (rtl_dump_bb): Don't call NEXT_INSN on NULL.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@250480 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 30 |
2 files changed, 20 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e929c4d50d9..897c605701d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2017-07-24 Segher Boessenkool <segher@kernel.crashing.org> + + * cfgrtl.c (rtl_dump_bb): Don't call NEXT_INSN on NULL. + 2017-07-24 Wilco Dijkstra <wdijkstr@arm.com> PR target/79041 diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 58d87fe09ae..6ef47b7e61f 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2109,8 +2109,6 @@ commit_edge_insertions (void) static void rtl_dump_bb (FILE *outf, basic_block bb, int indent, dump_flags_t flags) { - rtx_insn *insn; - rtx_insn *last; char *s_indent; s_indent = (char *) alloca ((size_t) indent + 1); @@ -2124,18 +2122,22 @@ rtl_dump_bb (FILE *outf, basic_block bb, int indent, dump_flags_t flags) } if (bb->index != ENTRY_BLOCK && bb->index != EXIT_BLOCK) - for (insn = BB_HEAD (bb), last = NEXT_INSN (BB_END (bb)); insn != last; - insn = NEXT_INSN (insn)) - { - if (flags & TDF_DETAILS) - df_dump_insn_top (insn, outf); - if (! (flags & TDF_SLIM)) - print_rtl_single (outf, insn); - else - dump_insn_slim (outf, insn); - if (flags & TDF_DETAILS) - df_dump_insn_bottom (insn, outf); - } + { + rtx_insn *last = BB_END (bb); + if (last) + last = NEXT_INSN (last); + for (rtx_insn *insn = BB_HEAD (bb); insn != last; insn = NEXT_INSN (insn)) + { + if (flags & TDF_DETAILS) + df_dump_insn_top (insn, outf); + if (! (flags & TDF_SLIM)) + print_rtl_single (outf, insn); + else + dump_insn_slim (outf, insn); + if (flags & TDF_DETAILS) + df_dump_insn_bottom (insn, outf); + } + } if (df && (flags & TDF_DETAILS)) { |