Add test for "TreeShaking: Detect instance fields never written"

Bug: 80455722
Change-Id: I65de4c34eafb982fa85f7081613ed7d71b3e959a
diff --git a/src/test/examples/shaking18/Shaking.java b/src/test/examples/shaking18/Shaking.java
new file mode 100644
index 0000000..73ba5df
--- /dev/null
+++ b/src/test/examples/shaking18/Shaking.java
@@ -0,0 +1,38 @@
+// 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 shaking18;
+
+public class Shaking {
+
+  public static void main(String[] args) {
+    int i = args.length;
+    run(i);
+  }
+
+  private static void run(int i) {
+    // Three invocations of each method to avoid inlining.
+    Options o =
+        i % 2 == 0 ? getOptions(i % 3) : i % 5 == 0 ? getOptions(i % 7) : getOptions(i % 11);
+    print(make(o, i % 13));
+    print(make(o, i % 17));
+    print(make(o, i % 19));
+  }
+
+  private static Base make(Options o, int i) {
+    if (o.alwaysFalse) {
+      return new DerivedUnused();
+    }
+    return o.dummy ? new Derived1() : new Derived2();
+  }
+
+  private static Options getOptions(int i) {
+    Options o = new Options();
+    o.dummy = i % 101 < 23;
+    return o;
+  }
+
+  private static void print(Base b) {
+    System.out.println(b.getMessage());
+  }
+}