Skip to content

Conversation

@vicente-romero-oracle
Copy link
Contributor

@vicente-romero-oracle vicente-romero-oracle commented Jan 26, 2026

Javac is generating erroneous null checks for code like, test case provided by Jan:

public class Main {
    public String g() {
        return Other.str = "";
    }
}
class Other {
    public static String! str = "";
}

so there is no point in generating null checks on the left side of an assignment statement. So the proposal is to use a switch to indicate when null checks shouldn't be generated.

TIA


Progress

  • Change must not contain extraneous whitespace

Contributors

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/valhalla.git pull/1972/head:pull/1972
$ git checkout pull/1972

Update a local copy of the PR:
$ git checkout pull/1972
$ git pull https://git.openjdk.org/valhalla.git pull/1972/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 1972

View PR using the GUI difftool:
$ git pr show -t 1972

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/valhalla/pull/1972.diff

Using Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Jan 26, 2026

👋 Welcome back vromero! A progress list of the required criteria for merging this PR into bworld will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk
Copy link

openjdk bot commented Jan 26, 2026

@vicente-romero-oracle This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

fixing bug in null checks generation

Co-authored-by: Jan Lahoda <[email protected]>

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been no new commits pushed to the bworld branch. If another commit should be pushed before you perform the /integrate command, your PR will be automatically rebased. If you prefer to avoid any potential automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the bworld branch, type /integrate in a new comment.

@openjdk openjdk bot added ready Pull request is ready to be integrated rfr Pull request is ready for review labels Jan 26, 2026
@mlbridge
Copy link

mlbridge bot commented Jan 26, 2026

Webrevs

@vicente-romero-oracle
Copy link
Contributor Author

updated the PR with Jan's proposal

@vicente-romero-oracle
Copy link
Contributor Author

/contributor add @lahodaj

@openjdk
Copy link

openjdk bot commented Jan 26, 2026

@vicente-romero-oracle
Contributor Jan Lahoda <[email protected]> successfully added.

@lahodaj
Copy link
Contributor

lahodaj commented Jan 26, 2026

The change, as such, looks OK to me, but it would be good to add the test for the problem as well. (I know JShell tests will fail, but it is better to have a test closer to the javac code. Maybe something like:

diff --git a/test/langtools/tools/javac/nullability/RuntimeNullChecks.java b/test/langtools/tools/javac/nullability/RuntimeNullChecks.java
index c8a9ce5d67f..20f7bfcb856 100644
--- a/test/langtools/tools/javac/nullability/RuntimeNullChecks.java
+++ b/test/langtools/tools/javac/nullability/RuntimeNullChecks.java
@@ -310,6 +310,20 @@ public static void main(String... args) {
                         test.isSystemProperty("1", "2", "3", null);
                     }
                 }
+                """,
+                //should not crash javac:
+                """
+                class Test {
+                    static String get() {
+                        return Other.str = "";
+                    }
+                    public static void main(String... args) {
+                        get();
+                    }
+                }
+                class Other {
+                    public static String! str = "";
+                }
                 """
         }) {
             System.err.println("executing test " + i++);

?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready Pull request is ready to be integrated rfr Pull request is ready for review

Development

Successfully merging this pull request may close these issues.

2 participants