Commit 8b495402 by DJ Delorie Committed by DJ Delorie

dwarf2out.c (rtl_for_decl_location): Adjust rtl for byte variables stored in…

dwarf2out.c (rtl_for_decl_location): Adjust rtl for byte variables stored in word registers, then in memory.

* dwarf2out.c (rtl_for_decl_location): Adjust rtl for byte
variables stored in word registers, then in memory.

From-SVN: r80941
parent e3ab7ec7
2004-04-20 DJ Delorie <dj@redhat.com>
* dwarf2out.c (rtl_for_decl_location): Adjust rtl for byte
variables stored in word registers, then in memory.
2004-04-20 Eric Christopher <echristo@redhat.com>
* cp/parser.c (cp_parser_declaration): Move translate
......
......@@ -9756,6 +9756,24 @@ rtl_for_decl_location (tree decl)
plus_constant (XEXP (rtl, 0), offset));
}
}
else if (TREE_CODE (decl) == VAR_DECL
&& GET_CODE (rtl) == MEM
&& GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
&& BYTES_BIG_ENDIAN)
{
int rsize = GET_MODE_SIZE (GET_MODE (rtl));
int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
/* If a variable is declared "register" yet is smaller than
a register, then if we store the variable to memory, it
looks like we're storing a register-sized value, when in
fact we are not. We need to adjust the offset of the
storage location to reflect the actual value's bytes,
else gdb will not be able to display it. */
if (rsize > dsize)
rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
plus_constant (XEXP (rtl, 0), rsize-dsize));
}
if (rtl != NULL_RTX)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment