RFR: 8374445: Fix -Wzero-as-null-pointer-constant warnings in JfrSet

Markus Grönlund mgronlun at openjdk.org
Wed Jan 14 15:19:27 UTC 2026


On Sat, 3 Jan 2026 08:21:15 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

> Please review this change to fix JfrSet to avoid triggering
> -Wzero-as-null-pointer-constant warnings when that warning is enabled.
> 
> The old code uses an entry value with representation 0 to indicate the entry
> doesn't have a value. It compares an entry value against literal 0 to check
> for that. If the key type is a pointer type, this involves an implicit 0 =>
> null pointer constant conversion, so we get a warning when that warning is
> enabled.
> 
> Instead we initialize entry values to a value-initialized key, and compare
> against a value-initialized key. This changes the (currently undocumented)
> requirements on the key type. The key type is no longer required to be
> trivially constructible (to permit memset-based initialization), but is now
> required to be value-initializable. That's currently a wash, since all of the
> in-use key types are fundamental types (traceid (u8) and Klass*).
> 
> Testing: mach5 tier1-3 (tier3 is where most jfr tests are run)

src/hotspot/share/jfr/utilities/jfrSet.hpp line 72:

> 70:     }
> 71:     for (unsigned i = 0; i < table_size; ++i) {
> 72:       ::new (&table[i]) K{};

Is this the new (placement pun intended) way to do a placement new, using the outer scope operator ::? Or is it because we don't know what Hotspot type this is?

src/hotspot/share/jfr/utilities/jfrSet.hpp line 142:

> 140:     for (unsigned i = 0; i < old_table_size; ++i) {
> 141:       const K k = old_table[i];
> 142:       if (k != K{}) {

Are these K{}'s compile constant expressions?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/29022#discussion_r2690861905
PR Review Comment: https://git.openjdk.org/jdk/pull/29022#discussion_r2690859072


More information about the hotspot-jfr-dev mailing list