Don't memset non-POD types: struct bp_location
authorPedro Alves <palves@redhat.com>
Tue, 25 Apr 2017 00:27:42 +0000 (01:27 +0100)
committerPedro Alves <palves@redhat.com>
Tue, 25 Apr 2017 00:43:06 +0000 (01:43 +0100)
commit5625a2864147f4d92b22edfeeab7600818988be2
treeca0186cbd9c0151663899d86542d2587e230de0d
parent23bcc18f470ee4364bd362a8b78c6c1415a9dadb
Don't memset non-POD types: struct bp_location

struct bp_location is not a POD, so we shouldn't be using memset to
initialize it.

Caught like this:

  src/gdb/breakpoint.c: In function ‘bp_location** get_first_locp_gte_addr(CORE_ADDR)’:
  src/gdb/breakpoint.c:950:53: error: use of deleted function ‘void* memset(T*, int, size_t) [with T = bp_location; <template-parameter-1-2> = void; size_t = long unsigned int]’
     memset (&dummy_loc, 0, sizeof (struct bp_location));
       ^
  In file included from src/gdb/defs.h:28:0,
   from src/gdb/breakpoint.c:20:
  src/gdb/common/common-defs.h:126:7: note: declared here
   void *memset (T *s, int c, size_t n) = delete;
 ^

gdb/ChangeLog:
2017-04-25  Pedro Alves  <palves@redhat.com>

* ada-lang.c (ada_catchpoint_location): Now a "class".  Remove
"base" field and inherit from "bp_location" instead.  Add
non-default ctor.
(allocate_location_exception): Use new non-default ctor.
* breakpoint.c (get_first_locp_gte_addr): Remove memset call.
(init_bp_location): Convert to ...
(bp_location::bp_location): ... this new ctor, and remove memset
call.
(base_breakpoint_allocate_location): Use the new non-default ctor.
* breakpoint.h (bp_location): Now a class.  Declare default and
non-default ctors.  In-class initialize all members.
(init_bp_location): Remove declaration.
gdb/ChangeLog
gdb/ada-lang.c
gdb/breakpoint.c
gdb/breakpoint.h