RFR: 8335298: Fix -Wzero-as-null-pointer-constant warning in G1CardSetContainers
Kim Barrett
kbarrett at openjdk.org
Tue Jul 2 06:32:19 UTC 2024
On Mon, 1 Jul 2024 08:13:31 GMT, Albert Mingkun Yang <ayang at openjdk.org> wrote:
>> Please review this change to the G1CardSetInlinePtr default constructor to
>> avoid -Wzero-as-null-pointer-constant. The problem is that it is casting a
>> constant 0 to a pointer. Because casting 0 to a pointer is what this code
>> needs to do, the options are to (1) suppress the warning, or (2) write the
>> code in such a way as to dodge the warning. We take the latter approach, as
>> it involves less source code clutter. We expect an optimizing compiler to
>> produce the same code either way.
>>
>> Also simplified the constructors by using delegation.
>>
>> Testing: mach5 tier1.
>> Locally (linux-x64) verified the warning no longer occurs with this change.
>
> src/hotspot/share/gc/g1/g1CardSetContainers.hpp line 96:
>
>> 94: static_assert(G1CardSet::ContainerInlinePtr == 0, "unnecessary warning dodge");
>> 95: auto value = G1CardSet::ContainerInlinePtr;
>> 96: return reinterpret_cast<ContainerPtr>(value);
>
> `reinterpret_cast<ContainerPtr>(G1CardSet::ContainerInlinePtr);` doesn't trigger a warning for Clang. I wonder if this is a bug in gcc.
gcc treats a named constant zero as a null pointer constant. C++14 restricts that to integer literal zeros.
C++03 and C++11 included non-literals. DR903 was where the change was made, and C++14 C.2.2
suggests that DR was supposed to apply to C++11 too, even though not in the published text. I've found
some related gcc bugs, but not about exactly this warning.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52145
So yeah, it's probably a gcc bug that this triggers the warning. I think that doesn't affect the chosen
workaround for the warning, but maybe I should augment the comment to discuss this.
https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#903
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19955#discussion_r1661906836
More information about the hotspot-gc-dev
mailing list