diff --git a/src/test/java/com/android/tools/r8/shaking/B112290098.java b/src/test/java/com/android/tools/r8/shaking/B112290098.java
new file mode 100644
index 0000000..429853c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/B112290098.java
@@ -0,0 +1,59 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking;
+
+import static junit.framework.TestCase.assertEquals;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.AndroidApp;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class B112290098 extends TestBase {
+
+  @Ignore("b/112290098")
+  @Test
+  public void test() throws Exception {
+    String mainClass = TestClass.class.getName();
+    AndroidApp input = readClasses(TestClass.class, C.class);
+    AndroidApp output =
+        compileWithR8(
+            input,
+            String.join(
+                System.lineSeparator(),
+                "-keep public class " + mainClass + " {",
+                "  public static void main(...);",
+                "}"));
+    assertEquals(runOnArt(compileWithD8(input), mainClass), runOnArt(output, mainClass));
+  }
+
+  public static class TestClass {
+
+    public static void main(String[] args) {
+      // Instantiation that will be removed as a result of class inlining.
+      new C();
+
+      C obj = null;
+      try {
+        // After inlining this will lead to an iget instruction.
+        obj.getField();
+      } catch (NullPointerException e) {
+        System.out.println("Caught NullPointerException");
+      }
+    }
+  }
+
+  public static class C {
+
+    // In the second round of tree shaking, C is no longer instantiated, but we should still
+    // keep this field to avoid a NoSuchFieldError instead of a NullPointerException at the
+    // obj.getField() invocation.
+    public int field = 42;
+
+    public int getField() {
+      return field;
+    }
+  }
+}
