RFR: 8271459: C2: Missing NegativeArraySizeException when creating StringBuilder with negative capacity
Christian Hagedorn
chagedorn at openjdk.java.net
Thu Sep 23 13:35:24 UTC 2021
Stringopts does not take into account that a negative `int` argument for `StringBuilder(int)` results in a `NegativeArraySizeException` when optimizing away `StringBuilder` usages into single strings.
The suggested fix does the following:
- Bailout of Stringopts if C2 knows that an `int` argument is always negative.
- Apply stringopts but insert an additional runtime check with an UCT if C2 cannot tell if an `int` argument is positive or negative.
I added some IR tests to verify the fix and also ran some standard benchmarks.
I also updated `TestIRMatching` to test the new and updated default regexes.
Thanks,
Christian
-------------
Commit messages:
- 8271459: C2: Missing NegativeArraySizeException when creating StringBuilder with negative capacity
Changes: https://git.openjdk.java.net/jdk/pull/5652/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5652&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8271459
Stats: 276 lines in 4 files changed: 269 ins; 0 del; 7 mod
Patch: https://git.openjdk.java.net/jdk/pull/5652.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5652/head:pull/5652
PR: https://git.openjdk.java.net/jdk/pull/5652
More information about the hotspot-compiler-dev
mailing list