RFR: 8339488: Extended NPE message doesn't handle CONSTANT_Dynamic
Coleen Phillimore
coleenp at openjdk.org
Fri Sep 6 13:23:49 UTC 2024
On Fri, 6 Sep 2024 11:22:50 GMT, Oli Gillespie <ogillespie at openjdk.org> wrote:
> Extended NPE messages require walking the bytecode in the method where it was created, and simulating the effect on the stack. `ldc` for dynamic constants is not handled, which can lead to assertion failures in debug builds, or incorrect NPE messages in release builds (possibly worse with the right conditions?).
>
> Simply handle dynamic constants by figuring out their return type so we know how they will affect the stack.
>
> The new test fails without the fix in both release and debug builds. In release, it fails because the NPE message is wrong: `Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.notify()" because "`, and in debug builds it hits this assert:
>
>
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # Internal Error (<redacted>/src/hotspot/share/interpreter/bytecodeUtils.cpp:660), pid=12677, tid=12678
> # assert(false) failed: Unexpected tag
I don't really mind the jasm but I found a small sample of this in: test/hotspot/jtreg/runtime/ConstantPool/IntfMethod.java. Use asmify on the class file from the jasm file to get the asm code. The Classfile API is new and we might want to backport this, so don't use that.
-------------
PR Review: https://git.openjdk.org/jdk/pull/20889#pullrequestreview-2286258009
More information about the hotspot-runtime-dev
mailing list