RFR: 8364588: Export the NPE backtracking functionality to general null-checking APIs

Johan Sjölen jsjolen at openjdk.org
Tue Aug 5 10:23:08 UTC 2025


On Tue, 5 Aug 2025 07:55:41 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Provide a general facility for our null check APIs like Objects::requireNonNull or future Checks::nullCheck (void), converting the existing infrastructure to start tracking from a given stack site (depth offset) and a given stack slot (offset value).
>
> src/hotspot/share/interpreter/bytecodeUtils.cpp line 1483:
> 
>> 1481:   // Is an explicit slot given?
>> 1482:   bool explicit_search = slot >= 0;
>> 1483:   if (explicit_search) {
> 
> Suggestion:
> 
>   if (slot >= 0) {
> 
> No need for the temporary local.

If we don't adopt the enum I suggested, then I do prefer the naming of the condition through a variable. It gives you a hint of what the check is looking for, and not only what the check does.

> src/hotspot/share/interpreter/bytecodeUtils.hpp line 40:
> 
>> 38:   // Slot can be nonnegative to indicate an explicit search for the source of null
>> 39:   // If slot is negative (default), also search for the action that caused the NPE before
>> 40:   // deriving the actual slot and source of null by code parsing
> 
> Suggestion:
> 
>   // Slot can be nonnegative to indicate an explicit search for the source of null.
>   // If slot is negative (default), also search for the action that caused the NPE before
>   // deriving the actual slot and source of null by code parsing.
> 
> Periods at the end of sentences in comments.

I'd like to see the description for `slot` pushed into an enum, and make any negative number except `-1` explicitly forbidden.

```c++
enum class NPESlot : int {
  // docs here
  None = -1,
  // docs here
  Explicit // Anything >= 0
};
bool get_NPE_message_at(outputStream* ss, Method* method, int bci, NPESlot slot) {
  if (slot != NPESlot::None) {
    // Explicit search
  }
}

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26600#discussion_r2253888922
PR Review Comment: https://git.openjdk.org/jdk/pull/26600#discussion_r2253865251


More information about the security-dev mailing list