Fix latent bug in msp430-tdep.c
authorTom Tromey <tom@tromey.com>
Sun, 22 Apr 2018 04:42:00 +0000 (22:42 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 5 Oct 2018 04:51:47 +0000 (22:51 -0600)
-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.

gdb/ChangeLog
gdb/msp430-tdep.c

index c547ee96258fccf64bc5e549a1bec3ab52dc22a9..9a8390b7087fcffa0e0e8132c6842a4dbfdfa1cb 100644 (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
index b6e062a380fea2bd92b90a70f0e15d01a8493c0f..427f58c0ed087047b9e252177f42bf8c37340380 100644 (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