Ivan Maidanski
4d24d7429f
Remove redundant checking of CPPCHECK macro in gc_cpp.h
...
(fix of commit 5e51e8d )
Issue #229 (bdwgc).
* include/gc_cpp.h [(_MSC_VER || __DMC__ || (__CYGWIN32__ || __CYGWIN__
|| __MINGW32__) && !GC_BUILD && !GC_NOT_DLL) && __cplusplus>201103L
&& GC_OPERATOR_NEW_ARRAY] (operator delete[](void*,size_t)): Define
even in case of CPPCHECK.
2018-08-15 19:33:18 +03:00
Ivan Maidanski
5e51e8de5b
Fix delete operator redirection if gc_cpp is built as .dll (Cygwin, MinGW)
...
Issue #229 (bdwgc).
* include/gc_cpp.h [(__CYGWIN32__ || __CYGWIN__ || __MINGW32__)
&& !GC_BUILD && !GC_NOT_DLL && GC_OPERATOR_NEW_ARRAY] (operator new[],
operator delete[]): Define inline function.
* include/gc_cpp.h [(__CYGWIN32__ || __CYGWIN__ || __MINGW32__)
&& !GC_BUILD && !GC_NOT_DLL] (operator new, operator delete): Likewise.
* include/gc_cpp.h [_MSC_VER || __DMC__ || (__CYGWIN32__ || __CYGWIN__
|| __MINGW32__) && !GC_BUILD && !GC_NOT_DLL && __cplusplus>201103L]
(operator delete(void*,size_t)): Likewise.
* include/gc_cpp.h [_MSC_VER || __DMC__ || (__CYGWIN32__ || __CYGWIN__
|| __MINGW32__) && !GC_BUILD && !GC_NOT_DLL && __cplusplus>201103L
&& GC_OPERATOR_NEW_ARRAY && !CPPCHECK]
(operator delete[](void*,size_t)): Likewise.
* include/gc_cpp.h (operator new(size_t, int, const char*, int),
operator new[](size_t, int, const char*, int)): Do not define
for __DMC__.
2018-08-15 10:24:56 +03:00
Ivan Maidanski
71dee52a3a
Suppress 'non-member operator new/delete may not be inline' VC++ warning
...
* include/gc_cpp.h [_MSC_VER]: Add pragma to disable W4595; add TODO
item.
2018-06-19 10:44:30 +03:00
Ivan Maidanski
2ce94e20e8
Do not include 'new' standard header from gc_cpp.h by default
...
(fix of commit cb1194d17 )
* gc_cpp.cc: Include gc.h (before "new") and "new" standard header
(before gc_cpp.h).
* gc_cpp.cc (GC_ALLOCATOR_THROW_OR_ABORT): New macro (the same
definition as in gc_allocator.h).
* gc_cpp.cc (GC_throw_bad_alloc): New API function definition.
* gc_cpp.cc [!GC_NEW_DELETE_THROW_NOT_NEEDED]
(GC_NEW_DELETE_NEED_THROW): Do not define if _MSC_VER or __DMC__.
* gc_cpp.cc [!_MSC_VER && !__DMC__] (new, new[]): Replace
GC_OP_NEW_OOM_CHECK(obj) to if(!obj)GC_ALLOCATOR_THROW_OR_ABORT().
* gc_cpp.h: Include "new" standard header only if GC_INCLUDE_NEW
and !GC_NEW_ABORTS_ON_OOM and !_LIBCPP_NO_EXCEPTIONS.
* gc_cpp.h [!GC_NEW_ABORTS_ON_OOM && !_LIBCPP_NO_EXCEPTIONS
&& !GC_INCLUDE_NEW] (GC_throw_bad_alloc): Declare API function.
* gc_cpp.h [!GC_NEW_ABORTS_ON_OOM && !_LIBCPP_NO_EXCEPTIONS
&& !GC_INCLUDE_NEW] (GC_OP_NEW_OOM_CHECK): Call GC_throw_bad_alloc()
instead of throw std::bad_alloc; do not use do-while(0) (to eliminate
VC++ warning that the expression is always false).
2018-06-19 10:38:55 +03:00
Ivan Maidanski
4399253c2e
Do not specify throw(bad_alloc) in gc_cpp.h
...
(fix of commit cb1194d17 )
* gc_cpp.cc (GC_NEW_DELETE_NEED_THROW, GC_DECL_NEW_THROW): Move from
gc_cpp.h.
* include/gc_cpp.h (gc::new, new): Remove GC_DECL_NEW_THROW specifier.
* include/gc_cpp.h [GC_OPERATOR_NEW_ARRAY] (gc::new[], new[]):
Likewise.
2018-06-15 11:20:42 +03:00
Ivan Maidanski
81b15cc40f
Use noexcept specifier in gc_cpp if C++11
...
* gc_cpp.cc [!_MSC_VER && !__DMC__] (delete, delete[]): Rename
GC_DECL_DELETE_THROW to GC_NOEXCEPT.
* include/gc_cpp.h: Always include "new" header.
* include/gc_cpp.h [!GC_NEW_DELETE_THROW_NOT_NEEDED]
(GC_NEW_DELETE_NEED_THROW): Do not define if __BORLANDC__ or _MSC_VER,
or __WATCOMC__, or if __cplusplus>=201103L and !__clang__.
* include/gc_cpp.h (GC_DECL_DELETE_THROW): Remove.
* include/gc_cpp.h [!GC_NOEXCEPT] (GC_NOEXCEPT): Define internal macro
to except or throw(), or nothing (same as that in gc_allocator.h).
* include/gc_cpp.h [!GC_NEW_ABORTS_ON_OOM] (GC_NEW_ABORTS_ON_OOM):
Define if GC_NOEXCEPT is defined to nothing.
* include/gc_cpp.h (new(size_t,void*), new[](size_t,void*), delete):
Add GC_NOEXCEPT.
2018-06-08 11:50:36 +03:00
Ivan Maidanski
e965562c76
Workaround 'dynamic exception specifications deprecated in C++11' warning
...
(fix of commit cb1194d17 )
* include/gc_cpp.h [GC_NEW_DELETE_NEED_THROW && __cplusplus>=201103L
&& !__clang__] (GC_DECL_NEW_THROW, GC_DECL_DELETE_THROW): Define to
empty.
2018-06-06 09:14:03 +03:00
Ivan Maidanski
4afeb2fd76
Fix new and delete operators definition for DigitalMars compiler
...
* gc_cpp.cc (new, delete, new[], delete[]): Do not define if __DMC__.
* include/gc_cpp.h (new[], delete[], new, delete): Define also if
__DMC__.
* include/gc_cpp.h [_MSC_VER] (new[], delete[]): Replace _MSC_VER>1020
to defined(GC_OPERATOR_NEW_ARRAY).
2018-06-04 10:04:09 +03:00
Ivan Maidanski
cb1194d17e
Never return null pointer by C++ operator new (gc_cpp)
...
Now, in case of the allocation failure, new and new[] operators throw
bad_alloc (or abort the application if an ancient compiler is used).
* gc_cpp.cc (GC_NEW_DELETE_NEED_THROW): Remove.
* gc_cpp.cc (GC_DECL_NEW_THROW, GC_DECL_DELETE_THROW): Move macro
definition to gc_cpp.h.
* gc_cpp.cc [GC_NEW_DELETE_NEED_THROW]: Do not include "new" header.
* gc_cpp.cc [!_MSC_VER] (operator new): Call GC_OP_NEW_OOM_CHECK() for
the allocation result.
* gc_cpp.cc [!_MSC_VER && GC_OPERATOR_NEW_ARRAY && !CPPCHECK]
(operator new[]): Likewise.
* include/gc.h (GC_abort_on_oom): Declare new API function.
* include/gc_cpp.h [!GC_NEW_DELETE_THROW_NOT_NEEDED
&& (GC_GNUC_PREREQ(4,2) || __BORLANDC__>=0x0550 || _MSC_VER>1020
|| __WATCOMC__>=1050)] (GC_NEW_DELETE_NEED_THROW):
Define macro.
* include/gc_cpp.h [GC_NEW_DELETE_NEED_THROW]: Include "new" header.
* include/gc_cpp.h (GC_OP_NEW_OOM_CHECK): New internal macro (throws
bad_alloc or cals GC_abort_on_oom).
* include/gc_cpp.h (gc::new(size_t), gc::new(size_t,GCPlacement), new):
Add GC_DECL_NEW_THROW; call GC_OP_NEW_OOM_CHECK() for the allocation
result.
* include/gc_cpp.h [GC_OPERATOR_NEW_ARRAY] (gc::new[](size_t),
gc::new[](size_t,GCPlacement, new[]): Likewise.
* misc.c (GC_abort_on_oom): Implement function.
* tests/test.c [CPPCHECK] (main): Call UNTESTED(GC_abort_on_oom).
2018-06-01 11:40:54 +03:00
Ivan Maidanski
1b71491d6e
Remove name of optional arguments of operator new and new[] in gc_cpp.h
...
(code refactoring)
* include/gc_cpp.h (operator new): Comment out cleanup and clientData
argument names.
* include/gc_cpp.h [GC_OPERATOR_NEW_ARRAY] (operator new[]): Likewise.
2017-07-13 23:17:39 +03:00
Ivan Maidanski
442bcbfaf2
Eliminate 'unused formal parameter' compiler warnings in C++ code (MS VC)
...
* include/gc_allocator.h (GC_ATTR_UNUSED): Remove.
* tests/test_cpp.cc (ATTR_UNUSED): Likewise.
* include/gc_allocator.h (gc_allocator::deallocate,
gc_allocator_ignore_off_page::deallocate,
traceable_allocator::deallocate): Comment out unused argument name
instead of using GC_ATTR_UNUSED.
* include/gc_cpp.h [_MSC_VER && !GC_DEBUG] (operator new): Comment out
unused argument names.
* tests/test_cpp.cc [(MSWIN32 && !__MINGW32__ || MSWINCE)
&& !NO_WINMAIN_ENTRY] (WinMain): Comment out unused argument names
instead of using ATTR_UNUSED.
2017-04-20 11:17:20 +03:00
Ivan Maidanski
4f98587ff5
Define CLANG/GNUC_PREREQ macros to check gcc/clang minimum version
...
(code refactoring)
* cord/cordxtra.c (CORD_ATTR_UNUSED): Use GC_GNUC_PREREQ() instead of
direct use of __GNUC[_MINOR]__.
* gc_cpp.cc (GC_NEW_DELETE_NEED_THROW): Likewise.
* include/gc_config_macros.h (GC_API, GC_ATTR_MALLOC, GC_ATTR_ALLOC_SIZE,
GC_ATTR_NONNULL, GC_ATTR_DEPRECATED, GC_RETURN_ADDR,
GC_RETURN_ADDR_PARENT, GC_PTHREAD_EXIT_ATTRIBUTE): Likewise.
* include/gc_cpp.h (GC_NO_OPERATOR_NEW_ARRAY): Likewise.
* include/gc_inline.h (GC_EXPECT, GC_PREFETCH_FOR_WRITE): Likewise.
* include/new_gc_alloc.h: Likewise.
* include/private/gc_priv.h (GC_INNER, GC_ATTR_UNUSED, EXPECT, GC_INLINE,
GC_ATTR_NOINLINE, GC_API_OSCALL, GC_ATTR_FORMAT_PRINTF,
NONNULL_ARG_NOT_NULL): Likewise.
* include/private/gc_priv.h [CANCEL_SAFE] (GC_cancel_disable_count):
Likewise.
* include/private/gcconfig.h (HAVE_BUILTIN_UNWIND_INIT, PREFETCH,
GC_PREFETCH_FOR_WRITE): Likewise.
* include/private/gcconfig.h [I386 && LINUX && __ELF__]
(GC_NO_SIGSETJMP): Likewise.
* include/private/gcconfig.h [X86_64 && MSWIN32] (MPROTECT_VDB):
Likewise.
* include/private/thread_local_alloc.h [CYGWIN32] (USE_PTHREAD_SPECIFIC):
Likewise.
* include/private/thread_local_alloc.h [LINUX && !ARM32 && !AVR32
|| PLATFORM_ANDROID && !__clang__] (USE_COMPILER_TLS): Likewise.
* mark.c [MSWIN32 || MSWINCE] (GC_mark_some): Likewise.
* mark_rts.c (GC_approx_sp): Likewise.
* tests/test_cpp.cc (ATTR_UNUSED): Likewise.
* tools/setjmp_t.c (nested_sp): Likewise.
* include/gc_config_macros.h (GC_GNUC_PREREQ): New macro (not for
public use).
* include/private/gc_priv.h (GC_CLANG_PREREQ): New private macro.
* include/private/gcconfig.h (HAVE_BUILTIN_UNWIND_INIT): Refine comment.
* include/private/thread_local_alloc.h [LINUX && !ARM32 && !AVR32
|| PLATFORM_ANDROID && !__clang__] (USE_COMPILER_TLS): Use
GC_CLANG_PREREQ() instead of direct use of __clang_major__ and
__clang_minor__.
* mark.c [MSWIN32 || MSWINCE] (GC_mark_some): Likewise.
2017-03-07 18:19:29 +03:00
Ivan Maidanski
bb4c81b980
Fix gc_cleanup destructor for non-heap objects (gc_cpp)
...
* include/gc_cpp.h (gc_cleanup::~gc_cleanup): If GC_base(this) returns
null (could be if the object is not allocated dynamically) then do not
call GC_register_finalizer_ignore_self.
2016-12-10 02:19:32 +03:00
Ivan Maidanski
db7266bde3
Fix 'replacement operator delete cannot be inline' GCC warning (Cygwin)
...
(fix commits 83e0a2c , 3379238 )
This commit also eliminates
"operator delete is missing exception specification throw()" compiler
warning.
* gc_cpp.cc (operator delete): Define unconditionally (i.e. for Cygwin
too).
* include/gc_cpp.h [__CYGWIN__]: Do not include "new" header.
* include/gc_cpp.h [__CYGWIN__] (operator delete): Remove (as
replacement function 'operator delete' cannot be declared 'inline').
2016-10-29 17:31:41 +03:00
Ivan Maidanski
c6a48c396c
Eliminate 'suspicious pointer subtraction' cppcheck warning (gc_cpp)
...
* include/gc_cpp.h (gc_cleanup::gc_cleanup): Define this_ptr void
pointer; use this_ptr instead of this keyword to outline that the
pointer subtraction is intentional (i.e., "this->" was not intended).
2016-10-26 11:13:48 +03:00
Ivan Maidanski
7e81c1dc0b
Revert "Workaround 'suspicious ptr subtraction' cppcheck warning in gc_cpp"
...
This reverts commit 363890b2ab .
Because the warning is still reported by the recent versions of
cppcheck (as of Oct 2016).
2016-10-26 01:07:33 +03:00
Ivan Maidanski
363890b2ab
Workaround 'suspicious pointer subtraction' cppcheck warning in gc_cpp
...
* include/gc_cpp.h (gc_cleanup::gc_cleanup): Add extra parentheses
around (char*)this to outline that "this" pointer subtraction is
intentional (i.e., "this->" was not intended).
2016-09-14 09:21:02 +03:00
Ivan Maidanski
590b39d5b7
Avoid new[] debug variant definition for ancient MS VC++
...
(restore behavior broken in commit 3d784ed )
* include/gc_cpp.h (operator new[]): Update comment.
* include/gc_cpp.h (operator new[]): Do not define the debug variant
for MS VC pre-v7; add comment.
Conflicts:
include/gc_cpp.h
2015-05-11 19:11:30 +03:00
Ivan Maidanski
538e9c21b1
Re-enable gc_cpp.h usage for GC compiled without ATOMIC_UNCOLLECTABLE
...
GC_ATOMIC_UNCOLLECTABLE macro is recognized (in gc_cpp.h) to enable
GC_malloc_atomic_uncollectable functionality.
* include/gc_cpp.h (enum GCPlacement): Remove NoGCPointerFree alias.
* include/gc_cpp.h (enum GCPlacement): Do not declare PointerFreeNoGC
element unless GC_ATOMIC_UNCOLLECTABLE defined.
* include/gc_cpp.h (gc::operator new, operator new): Do not handle
PointerFreeNoGC (and do not call GC_MALLOC_ATOMIC_UNCOLLECTABLE) unless
GC_ATOMIC_UNCOLLECTABLE defined.
2015-05-11 19:11:19 +03:00
Ivan Maidanski
3b6f4e9353
Reformat code of gc_cpp.cc/h
...
* include/gc_cpp.h: Reformat code (and comments).
* gc_cpp.cc: Likewise.
* include/gc_cpp.h (operator new): Replace if-then-else with switch.
Conflicts:
include/gc_cpp.h
2015-05-11 19:11:11 +03:00
Ivan Maidanski
28272d58b8
Remove commented out code in gc_cpp.cc/h
...
(code refactoring)
* gc_cpp.cc: Remove commented out code.
* include/gc_cpp.h: Likewise.
Conflicts:
gc_cpp.cc
include/gc_cpp.h
2015-05-11 19:00:15 +03:00
Johannes Totz
3d784edf71
put all the cpp stuff in header
...
otherwise vc9 will mix up new and delete operators (due to arbitrary ordering during linking)
Conflicts:
gc_cpp.cc
include/gc_cpp.h
2015-05-11 19:00:05 +03:00
Johannes Totz
59f7dff85b
enable atomic-uncollectable
...
pretty much the same as system's malloc, but is useful in force-include scenarios
Conflicts:
include/gc.h
include/gc_cpp.h
vc9/libgc.vcproj
2015-05-11 18:59:57 +03:00
Ivan Maidanski
32918f1291
Fix typo in person name in gc_cpp.h comment
...
* include/gc_cpp.h: Fix typo in surname (John Ellis) in comment.
2014-05-15 21:42:49 +04:00
Ondrej Bilka
af45302272
Fix typos in comments
...
* blacklst.c: Fix typo ("even though").
* cord/cordbscs.c: Fix typo ("exponentially").
* cord/cordxtra.c: Fix typo ("represented").
* dyn_load.c: Fix typos ("uncollectible", "occurred").
* extra/AmigaOS: Fix typos ("specific", "necessary", "always",
"effectiveness").
* finalize.c: Fix typo ("descendants").
* include/cord.h: Fix typo ("idiosyncrasies").
* include/gc.h: Fix typo ("collectible").
* include/gc_allocator.h: Fix typos ("allocator", "[un]collectible").
* mach_dep.c: Fix typo ("erroneously").
* malloc.c: Fix typos ("[un]collectible", "pointer-free",
"initialization").
* mallocx.c: Fix typos ("largely", "pointer-free", "uncollectible").
* mark.c: Fix typos ("[un]collectible", "even though").
* misc.c: Fix typo ("erroneously").
* os_dep.c: Fix typos ("non-addressable", "happening", "pointer-free").
* tests/test.c: Fix typos ("uncollectible", "reversed").
* tests/test_cpp.cc: Fix typos ("[un]collectible").
* typd_mlc.c: Fix typo ("copyright").
* win32_threads.c: Fix typos ("optimization", "uncollectible").
2013-07-11 11:59:40 +04:00