[jdk16] Integrated: 8260927: StringBuilder::insert is incorrect without Compact Strings
Aleksey Shipilev
shade at openjdk.java.net
Tue Feb 2 18:03:47 UTC 2021
On Tue, 2 Feb 2021 13:12:53 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> Discovered it with ARM32 tier1 tests, which runs with -CompactStrings by default. But the bug is actually generic:
>
> $ CONF=linux-x86_64-server-fastdebug make run-test TEST=java/lang/StringBuilder/Insert.java TEST_VM_OPTS="-XX:-CompactStrings"
>
> test Insert.insertOffset(): failure
> java.lang.AssertionError: expected [??abc] but found [efabc]
> at org.testng.Assert.fail(Assert.java:94)
> at org.testng.Assert.failNotEquals(Assert.java:496)
> at org.testng.Assert.assertEquals(Assert.java:125)
> at org.testng.Assert.assertEquals(Assert.java:178)
> at org.testng.Assert.assertEquals(Assert.java:188)
> at Insert.insertOffset(Insert.java:45)
> at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
> I believe this is a regression from [JDK-8254082](https://bugs.openjdk.java.net/browse/JDK-8254082).
>
> void getBytes(byte[] dst, int srcPos, int dstBegin, byte coder, int length) {
> if (coder() == coder) {
> System.arraycopy(value, srcPos, dst, dstBegin << coder, length << coder());
> } else { // this.coder == LATIN && coder == UTF16
> StringLatin1.inflate(value, srcPos, dst, dstBegin, length);
> }
> }
>
> When coder is `UTF16` (which it guaranteed to be without `CompactStrings`), then `srcPos` in `byte[]` array has to be adjusted by `coder` as well.
>
> Additional testing:
> - [x] Linux ARM32, affected test now passes
> - [x] Linux x86_64, affected test now passes
> - [x] Linux x86_64 `tier1` default, passes
> - [x] Linux x86_64 `tier1`, `-XX:-CompactStrings`, passes modulo two testbugs ([JDK-8260933](https://bugs.openjdk.java.net/browse/JDK-8260933), [JDK-8260934](https://bugs.openjdk.java.net/browse/JDK-8260934))
> - [x] Linux x86_64 `tier2` default, passes
> - [x] Linux x86_64 `tier2`, `-XX:-CompactStrings`, passes
This pull request has now been integrated.
Changeset: 081fa3e7
Author: Aleksey Shipilev <shade at openjdk.org>
URL: https://git.openjdk.java.net/jdk16/commit/081fa3e7
Stats: 4 lines in 2 files changed: 2 ins; 1 del; 1 mod
8260927: StringBuilder::insert is incorrect without Compact Strings
Reviewed-by: redestad, alanb, rriggs, jlaskey
-------------
PR: https://git.openjdk.java.net/jdk16/pull/143
More information about the core-libs-dev
mailing list