summaryrefslogtreecommitdiff
path: root/test/178-app-image-native-method/src/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/178-app-image-native-method/src/Main.java')
-rw-r--r--test/178-app-image-native-method/src/Main.java25
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();
+}