OpenJDK / amber / amber
changeset 36349:6cc8e6f596b2
8151020: [TESTBUG] UnsafeGetStableArrayElement::testL_* fail intermittently
Reviewed-by: zmajo, shade
author | vlivanov |
---|---|
date | Wed, 02 Mar 2016 15:42:03 +0300 |
parents | f20b8728bad1 |
children | 29d8bb1668f5 c16f26ae72c9 d191b3de2ad3 |
files | hotspot/test/compiler/unsafe/UnsafeGetStableArrayElement.java |
diffstat | 1 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/hotspot/test/compiler/unsafe/UnsafeGetStableArrayElement.java Wed Mar 02 12:29:17 2016 +0300 +++ b/hotspot/test/compiler/unsafe/UnsafeGetStableArrayElement.java Wed Mar 02 15:42:03 2016 +0300 @@ -182,6 +182,10 @@ static long testJ_U() { return U.getLongUnaligned( STABLE_LONG_ARRAY, ARRAY_LONG_BASE_OFFSET + 1); } } + static void run(Callable<?> c) throws Exception { + run(c, null, null); + } + static void run(Callable<?> c, Runnable sameResultAction, Runnable changeResultAction) throws Exception { Object first = c.call(); @@ -295,13 +299,7 @@ testMatched( Test::testD_D, Test::changeD); // Object[], aligned accesses - testMismatched(Test::testL_Z, Test::changeL); - testMismatched(Test::testL_B, Test::changeL); - testMismatched(Test::testL_S, Test::changeL); - testMismatched(Test::testL_C, Test::changeL); - testMismatched(Test::testL_I, Test::changeL); - testMismatched(Test::testL_J, Test::changeL); - testMismatched(Test::testL_F, Test::changeL); + testMismatched(Test::testL_J, Test::changeL); // long & double are always as large as an OOP testMismatched(Test::testL_D, Test::changeL); testMatched( Test::testL_L, Test::changeL); @@ -310,5 +308,17 @@ testMismatched(Test::testC_U, Test::changeC); testMismatched(Test::testI_U, Test::changeI); testMismatched(Test::testJ_U, Test::changeJ); + + // No way to reliably check the expected behavior: + // (1) OOPs change during GC; + // (2) there's no way to reliably change some part of an OOP (e.g., when reading a byte from it). + // + // Just trigger the compilation hoping to catch any problems with asserts. + run(Test::testL_B); + run(Test::testL_Z); + run(Test::testL_S); + run(Test::testL_C); + run(Test::testL_I); + run(Test::testL_F); } }