From: Richard Kenner Date: Tue, 27 Sep 1994 22:29:21 +0000 (-0400) Subject: (optimize_bit_field): Put any insns made by change_address in front of INSN. X-Git-Tag: misc/cutover-egcs-0~5809 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=b88a3142921977eaf465ba2c947b1a3b09bae896;p=gcc.git (optimize_bit_field): Put any insns made by change_address in front of INSN. (expand_function_end): Don't pass DECL_INITIAL to setjmp_protect if it is error_mark_node. From-SVN: r8146 --- diff --git a/gcc/function.c b/gcc/function.c index 9737daec444c..ec83bab85084 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2192,6 +2192,8 @@ optimize_bit_field (body, insn, equiv_mem) and then for which byte of the word is wanted. */ register int offset = INTVAL (XEXP (bitfield, 2)); + rtx insns; + /* Adjust OFFSET to count bits from low-address byte. */ #if BITS_BIG_ENDIAN != BYTES_BIG_ENDIAN offset = (GET_MODE_BITSIZE (GET_MODE (XEXP (bitfield, 0))) @@ -2210,8 +2212,12 @@ optimize_bit_field (body, insn, equiv_mem) #endif } - memref = change_address (memref, mode, + start_sequence (); + memref = change_address (memref, mode, plus_constant (XEXP (memref, 0), offset)); + insns = get_insns (); + end_sequence (); + emit_insns_before (insns, insn); /* Store this memory reference where we found the bit field reference. */ @@ -5064,7 +5070,9 @@ expand_function_end (filename, line, end_bindings) on a machine that fails to restore the registers. */ if (NON_SAVING_SETJMP && current_function_calls_setjmp) { - setjmp_protect (DECL_INITIAL (current_function_decl)); + if (DECL_INITIAL (current_function_decl) != error_mark_node) + setjmp_protect (DECL_INITIAL (current_function_decl)); + setjmp_protect_args (); } #endif