diff --git a/test/008-exceptions/src/Main.java b/test/008-exceptions/src/Main.java
index 008576a..0ba5f80 100644
--- a/test/008-exceptions/src/Main.java
+++ b/test/008-exceptions/src/Main.java
@@ -23,7 +23,7 @@
 
 // A class that throws BadError during static initialization.
 class BadInit {
-    static int dummy;
+    static int intField;
     static {
         System.out.println("Static Init");
         if (true) {
@@ -41,7 +41,7 @@
 
 // A class that throws BadErrorNoStringInit during static initialization.
 class BadInitNoStringInit {
-    static int dummy;
+    static int intField;
     static {
         System.out.println("Static BadInitNoStringInit");
         if (true) {
@@ -52,7 +52,7 @@
 
 // A class that throws BadError during static initialization, serving as a super class.
 class BadSuperClass {
- static int dummy;
+ static int intField;
  static {
      System.out.println("BadSuperClass Static Init");
      if (true) {
@@ -104,7 +104,7 @@
     private static void exceptionsRethrowClassInitFailure() {
         try {
             try {
-                BadInit.dummy = 1;
+                BadInit.intField = 1;
                 throw new IllegalStateException("Should not reach here.");
             } catch (BadError e) {
                 System.out.println(e);
@@ -113,7 +113,7 @@
             // Check if it works a second time.
 
             try {
-                BadInit.dummy = 1;
+                BadInit.intField = 1;
                 throw new IllegalStateException("Should not reach here.");
             } catch (NoClassDefFoundError e) {
                 System.out.println(e);
@@ -127,7 +127,7 @@
     private static void exceptionsRethrowClassInitFailureNoStringInit() {
         try {
             try {
-                BadInitNoStringInit.dummy = 1;
+                BadInitNoStringInit.intField = 1;
                 throw new IllegalStateException("Should not reach here.");
             } catch (BadErrorNoStringInit e) {
                 System.out.println(e);
@@ -136,7 +136,7 @@
             // Check if it works a second time.
 
             try {
-                BadInitNoStringInit.dummy = 1;
+                BadInitNoStringInit.intField = 1;
                 throw new IllegalStateException("Should not reach here.");
             } catch (NoClassDefFoundError e) {
                 System.out.println(e);
@@ -150,7 +150,7 @@
     private static void exceptionsForSuperClassInitFailure() {
         try {
             // Resolve DerivedFromBadSuperClass.
-            BadSuperClass.dummy = 1;
+            BadSuperClass.intField = 1;
             throw new IllegalStateException("Should not reach here.");
         } catch (BadError e) {
             System.out.println(e);
@@ -181,7 +181,7 @@
 
     private static void exceptionsInMultiDex() {
         try {
-            MultiDexBadInit.dummy = 1;
+            MultiDexBadInit.intField = 1;
             throw new IllegalStateException("Should not reach here.");
         } catch (Error e) {
             System.out.println(e);
@@ -194,7 +194,7 @@
         // wrapped in NoClassDefFoundError but the exception
         // from wrapper 2 would have been unwrapped.
         try {
-            MultiDexBadInitWrapper1.setDummy(1);
+            MultiDexBadInitWrapper1.setIntField(1);
             throw new IllegalStateException("Should not reach here.");
         } catch (NoClassDefFoundError ncdfe) {
             System.out.println(ncdfe);
@@ -203,7 +203,7 @@
             t.printStackTrace(System.out);
         }
         try {
-            MultiDexBadInitWrapper2.setDummy(1);
+            MultiDexBadInitWrapper2.setIntField(1);
             throw new IllegalStateException("Should not reach here.");
         } catch (NoClassDefFoundError ncdfe) {
             System.out.println(ncdfe);
