diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2011-07-09 22:35:43 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@gcc.gnu.org> | 2011-07-09 22:35:43 +0000 |
commit | a50023f9a8f3a7dcf40228d268463e5dbe3a8c55 (patch) | |
tree | 3ad75c371ac51964e2281f98d24222a563b55ef4 | |
parent | f6da75edebdec948d0f93682237fe02cc55024fe (diff) | |
download | gcc-a50023f9a8f3a7dcf40228d268463e5dbe3a8c55.zip gcc-a50023f9a8f3a7dcf40228d268463e5dbe3a8c55.tar.gz gcc-a50023f9a8f3a7dcf40228d268463e5dbe3a8c55.tar.bz2 |
re PR bootstrap/49680 (IRIX 6.5 bootstrap broken: SEGV in __register_frame_info_bases)
PR bootstrap/49680
* config/cris/cris.c (cris_asm_output_case_end): Robustify against
stray notes and debug insns by using prev_nonnote_nondebug_insn
instead of PREV_INSN.
From-SVN: r176110
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/cris/cris.c | 22 |
2 files changed, 21 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 436e037..fba2db9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-07-10 Hans-Peter Nilsson <hp@axis.com> + + PR bootstrap/49680 + * config/cris/cris.c (cris_asm_output_case_end): Robustify against + stray notes and debug insns by using prev_nonnote_nondebug_insn + instead of PREV_INSN. + 2011-07-09 Richard Henderson <rth@redhat.com> * defaults.h (DWARF2_ADDR_SIZE, DWARF_OFFSET_SIZE, diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 54a0f26..0c31826 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -2275,12 +2275,22 @@ cris_legitimate_pic_operand (rtx x) void cris_asm_output_case_end (FILE *stream, int num, rtx table) { + /* Step back, over the label for the table, to the actual casejump and + assert that we find only what's expected. */ + rtx whole_jump_insn = prev_nonnote_nondebug_insn (table); + gcc_assert (whole_jump_insn != NULL_RTX && LABEL_P (whole_jump_insn)); + whole_jump_insn = prev_nonnote_nondebug_insn (whole_jump_insn); + gcc_assert (whole_jump_insn != NULL_RTX + && (JUMP_P (whole_jump_insn) + || (TARGET_V32 && INSN_P (whole_jump_insn) + && GET_CODE (PATTERN (whole_jump_insn)) == SEQUENCE))); + /* Get the pattern of the casejump, so we can extract the default label. */ + whole_jump_insn = PATTERN (whole_jump_insn); + if (TARGET_V32) { - rtx whole_jump_insn = PATTERN (PREV_INSN (PREV_INSN (table))); - /* This can be a SEQUENCE, meaning the delay-slot of the jump is - filled. */ + filled. We also output the offset word a little differently. */ rtx parallel_jump = (GET_CODE (whole_jump_insn) == SEQUENCE ? PATTERN (XVECEXP (whole_jump_insn, 0, 0)) : whole_jump_insn); @@ -2298,11 +2308,7 @@ cris_asm_output_case_end (FILE *stream, int num, rtx table) "\t.word %LL%d-%LL%d%s\n", CODE_LABEL_NUMBER (XEXP (XEXP - (XEXP - (XVECEXP - (PATTERN - (PREV_INSN - (PREV_INSN (table))), 0, 0), 1), + (XEXP (XVECEXP (whole_jump_insn, 0, 0), 1), 2), 0)), num, (TARGET_PDEBUG ? "; default" : "")); |