Fix latent bug in msp430-tdep.c

-Wshadow=local found this latent bug.  msp430-tdep.c does:

    const gdb_byte *arg_bits;
    {
      /* Aggregates of any size are passed by reference.  */
      gdb_byte struct_addr[4];
[...
      arg_bits = struct_addr;
    }
    ... use arg_bits

Here, arg_bits can point to an object that's gone out of scope.

The fix is to hoist the inner "struct_addr" buffer to an outer scope,
and rename it to avoid shadowing.

gdb/ChangeLog
2018-10-04  Tom Tromey  <tom@tromey.com>

	* msp430-tdep.c (msp430_push_dummy_call): Rename inner
	"structs_addr" and hoist declaration.
This commit is contained in:
Tom Tromey 2018-04-21 22:42:00 -06:00
parent 3fba72f761
commit ef789dc484
2 changed files with 8 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2018-10-04 Tom Tromey <tom@tromey.com>
* msp430-tdep.c (msp430_push_dummy_call): Rename inner
"structs_addr" and hoist declaration.
2018-10-04 Tom Tromey <tom@tromey.com>
* linux-tdep.c (linux_make_mappings_corefile_notes): Introduce new

View File

@ -715,6 +715,7 @@ msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
ULONGEST arg_size = TYPE_LENGTH (arg_type);
int offset;
int current_arg_on_stack;
gdb_byte struct_addr_buf[4];
current_arg_on_stack = 0;
@ -722,11 +723,9 @@ msp430_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|| TYPE_CODE (arg_type) == TYPE_CODE_UNION)
{
/* Aggregates of any size are passed by reference. */
gdb_byte struct_addr[4];
store_unsigned_integer (struct_addr, 4, byte_order,
store_unsigned_integer (struct_addr_buf, 4, byte_order,
value_address (arg));
arg_bits = struct_addr;
arg_bits = struct_addr_buf;
arg_size = (code_model == MSP_LARGE_CODE_MODEL) ? 4 : 2;
}
else