Explicitly constructed NPE is showing (wrong) message
Christoph Dreis
christoph.dreis at freenet.de
Sat Jun 27 09:54:19 UTC 2020
Hi,
I hope this is the correct mailing list.
The latest changes on JDK-8233014 to enable ShowCodeDetailsInExceptionMessages by default have uncovered a likely bug (I think).
To my understanding explicitly created NullPointerExceptions should not print any message.
With the following example:
public class Main {
public static void main(String[] args) {
NullPointerException ex = new NullPointerException();
Throwable throwable = ex.fillInStackTrace();
System.out.println(throwable);
}
}
I see the following output though:
java.lang.NullPointerException: Cannot invoke "java.lang.NullPointerException.fillInStackTrace()" (on slot 0) because "ex" is null
Which obviously is not really true.
I was debugging the thing (hence the additional "on slot 0") output, but couldn't find the error so far.
I'm suspecting the error to be somewhere around bytecodeUtils.cpp 1155:
if (name != vmSymbols::object_initializer_name()) {
int type_index = cp->signature_ref_index_at(name_and_type_index);
Symbol* signature = cp->symbol_at(type_index);
// The 'this' parameter was null. Return the slot of it.
return ArgumentSizeComputer(signature).size();
} else {
return NPE_EXPLICIT_CONSTRUCTED;
}
I initially hoped to find a fix for it directly, but I would probably need a bit more time for it, so I decided to report it.
Is this a bug even or am I chasing ghosts here? In case it is, I would be happy about a mentioning somewhere in an eventual commit.
Cheers,
Christoph
More information about the hotspot-runtime-dev
mailing list