aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-09-27 18:29:21 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-09-27 18:29:21 -0400
commitb88a3142921977eaf465ba2c947b1a3b09bae896 (patch)
tree5cf8244d4e0e795f023d60633bd5f6292e244387
parent5b065c2142e716bad47cacb9d710a1243491d796 (diff)
downloadgcc-b88a3142921977eaf465ba2c947b1a3b09bae896.zip
gcc-b88a3142921977eaf465ba2c947b1a3b09bae896.tar.gz
gcc-b88a3142921977eaf465ba2c947b1a3b09bae896.tar.bz2
(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
-rw-r--r--gcc/function.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 9737dae..ec83bab 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