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