Initial push.
diff --git a/src/test/examples/throwing/RenamedClass.java b/src/test/examples/throwing/RenamedClass.java
new file mode 100644
index 0000000..a3fd537
--- /dev/null
+++ b/src/test/examples/throwing/RenamedClass.java
@@ -0,0 +1,59 @@
+// 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.
+
+// This code is not run directly. It needs to be compiled to dex code.
+// 'throwing.dex' is what is run.
+
+package throwing;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * This class' logic is completely bogus. The only purpose is to be recursive to avoid inlining
+ * and terminate.
+ */
+public class RenamedClass {
+  public List list = new ArrayList();
+
+  public List getList() {
+    if (list == null) { // always false
+      setList(getList());
+    }
+    return list;
+  }
+
+  public void setList(List list) {
+    if (list == null) {
+      setList(new LinkedList());
+    } else {
+      this.list = list;
+    }
+  }
+
+  // Another method with the same signature as getList
+  public void swap(List list) {
+    List before = getList();
+    setList(list);
+    if (before == null) { // always false
+      swap(list);
+    }
+  }
+
+  static RenamedClass create() {
+    RenamedClass theClass = new RenamedClass();
+    theClass.setList(new LinkedList());
+    return theClass;
+  }
+
+  void takeThingsForASpin(int value) {
+    if (value == 42) {
+      swap(new LinkedList<>());
+      setList(getList());
+    } else {
+      takeThingsForASpin(42);
+    }
+  }
+}