summaryrefslogtreecommitdiff
path: root/test/084-class-init/src/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/084-class-init/src/Main.java')
-rw-r--r--test/084-class-init/src/Main.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/084-class-init/src/Main.java b/test/084-class-init/src/Main.java
index cf69570854..28eb3e923f 100644
--- a/test/084-class-init/src/Main.java
+++ b/test/084-class-init/src/Main.java
@@ -37,6 +37,7 @@ public class Main {
public static void main(String[] args) {
checkExceptions();
checkTiming();
+ checkStaticMethodInvokeAfterFailedClinit();
}
public static void sleep(int msec) {
@@ -128,4 +129,33 @@ public class Main {
SlowInit.printMsg("MethodThread message");
}
}
+
+ static void checkStaticMethodInvokeAfterFailedClinit() {
+ System.out.println("checkStaticMethodInvokeAfterFailedClinit START");
+
+ // Call static method to cause implicit clinit.
+ try {
+ ClassWithThrowingClinit.staticMethod();
+ System.out.println("checkStaticMethodInvokeAfterFailedClinit FAILED"
+ + " due to missing ExceptionInInitializerError");
+ } catch (ExceptionInInitializerError expected) {
+ }
+
+ // Call again to make sure we still get the expected error.
+ try {
+ ClassWithThrowingClinit.staticMethod();
+ System.out.println("checkStaticMethodInvokeAfterFailedClinit FAILED"
+ + " due to missing NoClassDefFoundError");
+ } catch (NoClassDefFoundError expected) {
+ }
+ System.out.println("checkStaticMethodInvokeAfterFailedClinit PASSED");
+ }
+
+ static class ClassWithThrowingClinit {
+ static {
+ throwDuringClinit();
+ }
+ static void staticMethod() {
+ }
+ }
}