diff --git a/test/601-verifier-fails/expected.txt b/test/601-verifier-fails/expected.txt
deleted file mode 100644
index 8399969..0000000
--- a/test/601-verifier-fails/expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-passed A
-passed B
-passed C
-passed D
diff --git a/test/601-verifier-fails/info.txt b/test/601-verifier-fails/info.txt
deleted file mode 100644
index f77de05..0000000
--- a/test/601-verifier-fails/info.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-The situations in these tests were discovered by running the mutating
-dexfuzz on the DEX files of fuzzingly random generated Java test.
-
-(A) b/28908555:
-    soft verification failure (on the final field modification) should
-    not hide the hard verification failure (on the type mismatch) to
-    avoid compiler crash later on
-(B) b/29070461:
-    hard verification failure (not calling super in constructor) should
-    bail immediately and not allow soft verification failures to pile up
-    behind it to avoid fatal message later on
-(C) b/29068831:
-    access validation should occur prior to null reference check
-(D) b/29126870:
-    soft verification failure (cannot access) should not hide the hard
-    verification failure (non-reference type) to avoid a compiler crash
-    later on
-
diff --git a/test/601-verifier-fails/smali/construct.smali b/test/601-verifier-fails/smali/construct.smali
deleted file mode 100644
index 417ced9..0000000
--- a/test/601-verifier-fails/smali/construct.smali
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-.class public LB;
-.super Ljava/lang/Object;
-
-.method public constructor <init>()V
-    .registers 1
-    if-eqz v0, :bail
-    invoke-direct {v0}, LB;->append(Ljava/lang/String;)V
-:bail
-    return-void
-.end method
diff --git a/test/601-verifier-fails/smali/iget.smali b/test/601-verifier-fails/smali/iget.smali
deleted file mode 100644
index 5c045e6..0000000
--- a/test/601-verifier-fails/smali/iget.smali
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-.class public LD;
-.super Ljava/lang/Object;
-
-.method public constructor <init>()V
-    .registers 2
-    invoke-direct {v1}, Ljava/lang/Object;-><init>()V
-    const v0, 2
-    iget v1, v0, LMain;->privateField:I
-    return-void
-.end method
diff --git a/test/601-verifier-fails/smali/iput.smali b/test/601-verifier-fails/smali/iput.smali
deleted file mode 100644
index bd8b928..0000000
--- a/test/601-verifier-fails/smali/iput.smali
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-.class public LC;
-.super Ljava/lang/Object;
-
-.method public constructor <init>()V
-    .registers 2
-    invoke-direct {v1}, Ljava/lang/Object;-><init>()V
-    const v0, 0
-    iput-object v0, v0, LMain;->staticPrivateField:Ljava/lang/String;
-    return-void
-.end method
diff --git a/test/601-verifier-fails/smali/sput.smali b/test/601-verifier-fails/smali/sput.smali
deleted file mode 100644
index e8e56ac..0000000
--- a/test/601-verifier-fails/smali/sput.smali
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright (C) 2016 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-.class public LA;
-.super Ljava/lang/Object;
-
-.method public foo(I)V
-.registers 2
-    sput v1, LMain;->staticFinalField:Ljava/lang/String;
-    return-void
-.end method
diff --git a/test/601-verifier-fails/src/Main.java b/test/601-verifier-fails/src/Main.java
deleted file mode 100644
index a6a07fd..0000000
--- a/test/601-verifier-fails/src/Main.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class Main {
-
-  public static final String staticFinalField = null;
-
-  private static String staticPrivateField = null;
-
-  private int privateField = 0;
-
-  private static void test(String name) throws Exception {
-    try {
-      Class<?> a = Class.forName(name);
-      a.newInstance();
-    } catch (java.lang.LinkageError e) {
-      System.out.println("passed " + name);
-    }
-  }
-
-  public static void main(String[] args) throws Exception {
-    test("A");
-    test("B");
-    test("C");
-    test("D");
-  }
-}
