RFR: 8336080: Fix -Wzero-as-null-pointer-constant warnings in ClassLoaderStats ctor

Kim Barrett kbarrett at openjdk.org
Thu Jul 11 12:33:57 UTC 2024


On Thu, 11 Jul 2024 02:56:26 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Please review this change to member initializers in the ClassLoaderStats
>> constructor.
>> 
>> The initial value for members of pointer type are changed from 0 to nullptr.
>> 
>> The initializers for members of oop type are changed from a value of 0 to
>> using value initialization. In debug builds this calls the provided default
>> ctor for the (debug-only) oop class, which initialized the underlying value to
>> nullptr. In release builds (where oop is a type alias for oopDesc*) this is a
>> zero initialization of the pointer-typed member, but without triggering
>> -Wzero-as-null-pointer-constant warnings.
>> 
>> Testing: mach5 tier1
>
> src/hotspot/share/classfile/classLoaderStats.hpp line 87:
> 
>> 85:     _cld(nullptr),
>> 86:     _class_loader(),
>> 87:     _parent(),
> 
> Why are these not initialized with `nullptr` given we have code like:
> 
> (cls._class_loader == nullptr ? ...)
> 
> ?

It would work to do so, though I kind of wish otherwise.

I wish one wrote

(cls._class_loader == oop() ? ...)

and

_class_loader = oop();

instead of

_class_loader = nullptr;

but I think that ship sailed a long time ago.  Instead we have some really questionable conversions
available in the (debug-only) oop class.  Maybe we can trim those down a bit now that we consistently
use nullptr and can use std::nullptr_t as an overload type.  Maybe I'll take a look at that sometime.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20109#discussion_r1673932349


More information about the hotspot-runtime-dev mailing list