8sa1-binutils-gdb/gdb/common
Simon Marchi 8172f16b5b Poison XNEW and friends for types that should use new/delete
This patch (finally!) makes it so that trying to use XNEW with a type
that requires "new" will cause a compilation error.  The criterion I
initially used to allow a type to use XNEW (which calls malloc in the
end) was std::is_trivially_constructible, but then realized that gcc 4.8
did not have it.  Instead, I went with:

  using IsMallocatable = std::is_pod<T>;

which is just a bit more strict, which doesn't hurt.  A similar thing is
done for macros that free instead of allocated, the criterion is:

  using IsFreeable = gdb::Or<std::is_trivially_destructible<T>, std::is_void<T>>;

Trying to use XNEW on a type that requires new will result in an error
like this:

    In file included from /home/simark/src/binutils-gdb/gdb/common/common-utils.h:26:0,
                     from /home/simark/src/binutils-gdb/gdb/common/common-defs.h:78,
                     from /home/simark/src/binutils-gdb/gdb/defs.h:28,
                     from /home/simark/src/binutils-gdb/gdb/lala.c:1:
    /home/simark/src/binutils-gdb/gdb/common/poison.h: In instantiation of ‘T* xnew() [with T = bar]’:
    /home/simark/src/binutils-gdb/gdb/lala.c:13:3:   required from here
    /home/simark/src/binutils-gdb/gdb/common/poison.h:103:3: error: static assertion failed: Trying to use XNEW with a non-POD data type.  Use operator new instead.
       static_assert (IsMallocatable<T>::value, "Trying to use XNEW with a non-POD\
       ^~~~~~~~~~~~~

Generated-code-wise, it adds one more function call (xnew<T>) when using
XNEW and building with -O0, but it all goes away with optimizations
enabled.

gdb/ChangeLog:

	* common/common-utils.h: Include poison.h.
	(xfree): Remove declaration, add definition with static_assert.
	* common/common-utils.c (xfree): Remove.
	* common/poison.h (IsMallocatable): Define.
	(IsFreeable): Define.
	(free): Delete for non-freeable types.
	(xnew): New.
	(XNEW): Undef and redefine.
	(xcnew): New.
	(XCNEW): Undef and redefine.
	(xdelete): New.
	(XDELETE): Undef and redefine.
	(xnewvec): New.
	(XNEWVEC): Undef and redefine.
	(xcnewvec): New.
	(XCNEWVEC): Undef and redefine.
	(xresizevec): New.
	(XRESIZEVEC): Undef and redefine.
	(xdeletevec): New.
	(XDELETEVEC): Undef and redefine.
	(xnewvar): New.
	(XNEWVAR): Undef and redefine.
	(xcnewvar): New.
	(XCNEWVAR): Undef and redefine.
	(xresizevar): New.
	(XRESIZEVAR): Undef and redefine.
2017-11-24 10:42:25 -05:00
..
agent.c
agent.h
array-view.h Introduce gdb::array_view 2017-09-04 17:10:12 +01:00
ax.def
break-common.h
btrace-common.c
btrace-common.h
buffer.c Make xml_escape_text return an std::string 2017-09-16 14:19:31 +02:00
buffer.h
byte-vector.h
cleanups.c
cleanups.h
common-debug.c
common-debug.h
common-defs.h
common-exceptions.c Eliminate catch_errors 2017-10-10 16:45:50 +01:00
common-exceptions.h Eliminate catch_exceptions/catch_exceptions_with_msg 2017-10-10 17:01:25 +01:00
common-gdbthread.h
common-inferior.h Extend "set cwd" to work on gdbserver 2017-10-04 02:01:45 -04:00
common-regcache.c
common-regcache.h
common-types.h
common-utils.c Poison XNEW and friends for types that should use new/delete 2017-11-24 10:42:25 -05:00
common-utils.h Poison XNEW and friends for types that should use new/delete 2017-11-24 10:42:25 -05:00
common.host
common.m4 Don't check termio.h and sgtty.h in common/common.m4 either 2017-11-06 16:19:12 +00:00
create-version.sh
def-vector.h
default-init-alloc.h
diagnostics.h
enum-flags.h
environ.c Implement the ability to set/unset environment variables to GDBserver when starting the inferior 2017-08-31 17:22:10 -04:00
environ.h Implement the ability to set/unset environment variables to GDBserver when starting the inferior 2017-08-31 17:22:10 -04:00
errors.c
errors.h
fileio.c
fileio.h
filestuff.c Make open_fds an std::vector 2017-11-17 13:03:34 -05:00
filestuff.h
format.c Target FP printing: Simplify and fix ui_printf 2017-10-24 18:00:50 +02:00
format.h Target FP printing: Simplify and fix ui_printf 2017-10-24 18:00:50 +02:00
function-view.h
gdb_assert.h
gdb_locale.h
gdb_optional.h
gdb_ref_ptr.h
gdb_setjmp.h
gdb_signals.h
gdb_splay_tree.h Remove free_splay_tree cleanup 2017-10-09 17:39:29 -06:00
gdb_sys_time.h
gdb_tilde_expand.c Introduce gdb_tilde_expand 2017-10-04 01:57:29 -04:00
gdb_tilde_expand.h Introduce gdb_tilde_expand 2017-10-04 01:57:29 -04:00
gdb_unique_ptr.h Allow gdb::unique_xmalloc_ptr<T[]> 2017-08-10 14:18:02 +01:00
gdb_unlinker.h
gdb_vecs.c
gdb_vecs.h Remove DEF_VEC_I (int) 2017-11-17 13:03:34 -05:00
gdb_wait.h
host-defs.h
job-control.c Assume termios is available, remove support for termio and sgtty 2017-11-06 15:36:46 +00:00
job-control.h
mingw-strerror.c
new-op.c
offset-type.h
poison.h Poison XNEW and friends for types that should use new/delete 2017-11-24 10:42:25 -05:00
posix-strerror.c
preprocessor.h
print-utils.c
print-utils.h
ptid.c
ptid.h
queue.h
refcounted-object.h Use DISABLE_COPY_AND_ASSIGN 2017-09-19 10:10:03 +01:00
rsp-low.c remote: C++ify thread_item and threads_listing_context 2017-11-24 10:40:15 -05:00
rsp-low.h remote: C++ify thread_item and threads_listing_context 2017-11-24 10:40:15 -05:00
run-time-clock.c
run-time-clock.h
scoped_restore.h
selftest.c Add selftests run filtering 2017-09-16 14:06:03 +02:00
selftest.h Add selftests run filtering 2017-09-16 14:06:03 +02:00
signals-state-save-restore.c
signals-state-save-restore.h
signals.c
symbol.h
traits.h
underlying.h
valid-expr.h
vec.c
vec.h
version.h
x86-xstate.h
xml-utils.c Make xml_escape_text return an std::string 2017-09-16 14:19:31 +02:00
xml-utils.h Make xml_escape_text return an std::string 2017-09-16 14:19:31 +02:00