RFR: 8364751: ConstantBootstraps.explicitCast contradictory specification for null-to-primitive

Jorn Vernee jvernee at openjdk.org
Mon Aug 25 17:37:34 UTC 2025


On Sun, 10 Aug 2025 01:11:43 GMT, Chen Liang <liach at openjdk.org> wrote:

> ConstantBootstraps.explicitCast behaves like a snippet of code in its specification. However, in the rest of the nominal spec, it incorrectly assumes a null `value` and a primitive `dstType` results in a ClassCastException instead of the zero value of that primitive type. This is inconsistent with that snippet and the actual code behavior.
> 
> The specification is fixed, the test for `explicitCast` is merged into the main `ConstantBootstraps` test, and a new unit test case for `value = null` and `dstType = char.class` is added, verifying the outcome is `'u0000'`.

src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java line 382:

> 380:      *     or {@code false} depending on whether the least-significant-bit
> 381:      *     is 1 or 0 respectively.  If {@code value} is null, the zero value for
> 382:      *     the {@code dstType} is returned.  Otherwise, a {@link ClassCastException}

Is 'zero value' a well-defined term?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26714#discussion_r2298693941


More information about the core-libs-dev mailing list