Poison non-POD memset & non-trivially-copyable memcpy/memmove
authorPedro Alves <palves@redhat.com>
Tue, 25 Apr 2017 00:27:41 +0000 (01:27 +0100)
committerPedro Alves <palves@redhat.com>
Tue, 25 Apr 2017 00:46:19 +0000 (01:46 +0100)
commitb0b92aeb3828219075fce23543fb39fee8608e99
treeef03fd94c57f25008280f5c7597fcdec8834188a
parent16c4d54a71d8052988ed9c8005a03a7f934245f4
Poison non-POD memset & non-trivially-copyable memcpy/memmove

This patch catches invalid initialization of non-POD types with
memset, at compile time.

This is what I used to catch the problems fixed by the previous
patches in the series:

  $ make -k 2>&1 | grep "deleted function"
  src/gdb/breakpoint.c:951: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]’
  src/gdb/breakpoint.c:7325:32: 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]’
  src/gdb/btrace.c:1153:42: error: use of deleted function ‘void* memset(T*, int, size_t) [with T = btrace_insn; <template-parameter-1-2> = void; size_t = long unsigned int]’
...

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

* common/common-defs.h: Include "common/poison.h".
* common/function-view.h: (Not, Or, Requires): Move to traits.h
and adjust.
* common/poison.h: New file.
* common/traits.h: Include <type_traits>.
(Not, Or, Requires): New, moved from common/function-view.h.
gdb/ChangeLog
gdb/common/common-defs.h
gdb/common/function-view.h
gdb/common/poison.h [new file with mode: 0644]
gdb/common/traits.h