Initial push.
diff --git a/src/test/examples/shaking2/SubClass1.java b/src/test/examples/shaking2/SubClass1.java
new file mode 100644
index 0000000..722c6e0
--- /dev/null
+++ b/src/test/examples/shaking2/SubClass1.java
@@ -0,0 +1,92 @@
+// Copyright (c) 2016, 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 shaking2;
+
+public class SubClass1 extends SuperClass {
+  private int used;
+  private int alsoUsed;
+  private boolean usedBoolean;
+  private byte usedByte;
+  private char usedChar;
+  private Object usedObject;
+  private short usedShort;
+  private double usedDouble;
+
+  private int unused;
+
+  public SubClass1(int used) {
+    this.used = used;
+  }
+
+  public SubClass1(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    this.used = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8;
+  }
+
+  @Override
+  public void virtualMethod() {
+    System.out.println("SubClass1::virtualMethod");
+  }
+
+  @Override
+  public void virtualMethod2(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    System.out.println("SubClass1::virtualMethod2 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void virtualMethod3() {
+    super.virtualMethod3();
+    System.out.println("SubClass1::virtualMethod3");
+  }
+
+  @Override
+  public void virtualMethod4(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    super.virtualMethod4(a1, a2, a3, a4, a5, a6, a7, a8);
+    System.out.println("SubClass1::virtualMethod4 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void unusedVirtualMethod() {
+    System.out.println("SubClass1::unusedVirtualMethod");
+  }
+
+  @Override
+  public void interfaceMethod() {
+    System.out.println("SubClass1::interfaceMethod");
+  }
+
+  @Override
+  public void interfaceMethod2() {
+    System.out.println("SubClass1::interfaceMethod2");
+  }
+
+  @Override
+  public void interfaceMethod3() {
+    System.out.println("SubClass1::interfaceMethod3");
+  }
+
+  @Override
+  public void interfaceMethod4() {
+    System.out.println("SubClass1::interfaceMethod4");
+  }
+
+  @Override
+  public void interfaceMethod5(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) {
+    System.out.println("SubClass1::interfaceMethod5 " + (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8));
+  }
+
+  @Override
+  public void accessFields() {
+    super.accessFields();
+    System.out.println("SubClass1::fields: " + used + " " + alsoUsed + " " + usedBoolean +
+        " " + usedByte + " " + usedChar + " " + usedObject + " " + usedShort + " " + usedDouble);
+    used = 1;
+    alsoUsed = 2;
+    usedBoolean = true;
+    usedByte = 3;
+    usedChar = '?';
+    usedObject = new Object();
+    usedShort = 4;
+    usedDouble = 42.42;
+  }
+}