diff options
Diffstat (limited to 'test/178-app-image-native-method/src/Main.java')
-rw-r--r-- | test/178-app-image-native-method/src/Main.java | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/178-app-image-native-method/src/Main.java b/test/178-app-image-native-method/src/Main.java index a9c6f0a967..e6c76ffc5f 100644 --- a/test/178-app-image-native-method/src/Main.java +++ b/test/178-app-image-native-method/src/Main.java @@ -51,6 +51,8 @@ public class Main { $noinline$opt$testMissingCritical(); $noinline$opt$testCriticalSignatures(); + $noinline$regressionTestB181736463(); + new CriticalClinitCheck(); sTestCriticalClinitCheckOtherThread.join(); } @@ -369,6 +371,15 @@ public class Main { 254)); } + static void $noinline$regressionTestB181736463() { + // Regression test for bug 181736463 (GenericJNI crashing when class initializer throws). + try { + BadClassB181736463.nativeMethodVoid(); + throw new Error("Unreachable"); + } catch (B181736463Error expected) { + } + } + static void initializingCriticalClinitCheck() { // Called from CriticalClinitCheck.<clinit>(). // Test @CriticalNative calls on the initializing thread. @@ -823,3 +834,17 @@ class CriticalClinitCheck { Main.initializingCriticalClinitCheck(); } } + +class B181736463Error extends Error { +} + +class BadClassB181736463 { + static { + // Deliberately throw from class initializer. + if (true) { + throw new B181736463Error(); + } + } + + public static native int nativeMethodVoid(); +} |