On Mon, 17 Apr 2023 17:09:44 GMT, Afshin Zafari <d...@openjdk.org> wrote:

> - The `throw()` (i.e., no throw) specifications are removed from the 
> instances of `operator new` where _do not_ return `nullptr`.
> 
> - The `-fcheck-new` is removed from the gcc compile flags.
> 
> - The `operator new` and `operator delete` are deleted from `StackObj`.
> 
> - The `GrowableArrayCHeap::operator delete` is added to be matched with its 
> corresponding allocation`AnyObj::operator new`, because gcc complains on that 
> after removing the `-fcheck-new` flag. 
> - The `Thread::operator new`with and without `null` return are removed.
> 
> ### Tests
> local: linux-x64 gtest:GrowableArrayCHeap, macosx-aarch64 hotspot:tier1
> mach5: tiers 1-5

Changes requested by kbarrett (Reviewer).

src/hotspot/share/jfr/utilities/jfrAllocation.hpp line 58:

> 56:   NOINLINE void* operator new(size_t size);
> 57:   NOINLINE void* operator new (size_t size, const std::nothrow_t&  
> nothrow_constant) throw();
> 58:   NOINLINE void* operator new [](size_t size);

The changes to JfrCHeapObj are not correct, because these allocators currently 
_can_ return null.
Their implementation is just to return the result of calling the non-throwing 
allocator.  That's probably
not an ideal implementation.  Either the declaration needs to be left as-is or 
the implementation changed.

src/hotspot/share/memory/allocation.hpp line 287:

> 285:  private:
> 286:   void* operator new(size_t size) throw() = delete;
> 287:   void* operator new [](size_t size) throw() = delete;

The lingering nothrow exception-specs here are just clutter and can be removed.

src/hotspot/share/memory/allocation.hpp line 289:

> 287:   void* operator new [](size_t size) throw() = delete;
> 288:   void  operator delete(void* p) = delete;
> 289:   void  operator delete [](void* p) = delete;

Making these deleted functions public might provide better error messages if 
someone accidentally attempts to reference them.

src/hotspot/share/memory/allocation.hpp line 504:

> 502:   // Arena allocations
> 503:   void* operator new(size_t size, Arena *arena);
> 504:   void* operator new [](size_t size, Arena *arena) = delete;

`operator new[](size_t)` (down below, where github won't let me comment 
directly) should also have it's nothrow exception-spec removed.

src/hotspot/share/prims/jvmtiRawMonitor.hpp line 114:

> 112: 
> 113:   // Non-aborting operator new
> 114:   void* operator new(size_t size) {

This change is incorrect, as this can quite obviously return null.  And that 
seems to be intentional.
Presumably the callers are checking for a possible null allocation result (else 
there is a bug).  I think
it would be less confusing if this took a `std::nothrow_t` to be explicit about 
it's behavior, and updated
the caller(s) accordingly.  That would match the usual idiom.

-------------

PR Review: https://git.openjdk.org/jdk/pull/13498#pullrequestreview-1390703118
PR Review Comment: https://git.openjdk.org/jdk/pull/13498#discussion_r1170425313
PR Review Comment: https://git.openjdk.org/jdk/pull/13498#discussion_r1170429604
PR Review Comment: https://git.openjdk.org/jdk/pull/13498#discussion_r1170428457
PR Review Comment: https://git.openjdk.org/jdk/pull/13498#discussion_r1170434730
PR Review Comment: https://git.openjdk.org/jdk/pull/13498#discussion_r1170438594

Reply via email to