diff --git a/compiler/optimizing/builder.cc b/compiler/optimizing/builder.cc
index cdd7636..1f9287c 100644
--- a/compiler/optimizing/builder.cc
+++ b/compiler/optimizing/builder.cc
@@ -1210,20 +1210,14 @@
 }
 
 void HGraphBuilder::BuildPackedSwitch(const Instruction& instruction, uint32_t dex_pc) {
-  // Verifier guarantees that the payload for PackedSwitch contains:
-  //   (a) number of entries (may be zero)
-  //   (b) first and lowest switch case value (entry 0, always present)
-  //   (c) list of target pcs (entries 1 <= i <= N)
   SwitchTable table(instruction, dex_pc, false);
 
   // Value to test against.
   HInstruction* value = LoadLocal(instruction.VRegA(), Primitive::kPrimInt);
 
-  // Retrieve number of entries.
   uint16_t num_entries = table.GetNumEntries();
-  if (num_entries == 0) {
-    return;
-  }
+  // There should be at least one entry here.
+  DCHECK_GT(num_entries, 0U);
 
   // Chained cmp-and-branch, starting from starting_key.
   int32_t starting_key = table.GetEntryAt(0);
@@ -1235,10 +1229,6 @@
 }
 
 void HGraphBuilder::BuildSparseSwitch(const Instruction& instruction, uint32_t dex_pc) {
-  // Verifier guarantees that the payload for SparseSwitch contains:
-  //   (a) number of entries (may be zero)
-  //   (b) sorted key values (entries 0 <= i < N)
-  //   (c) target pcs corresponding to the switch values (entries N <= i < 2*N)
   SwitchTable table(instruction, dex_pc, true);
 
   // Value to test against.
diff --git a/test/501-regression-packed-switch/expected.txt b/test/501-regression-packed-switch/expected.txt
deleted file mode 100644
index e69de29..0000000
--- a/test/501-regression-packed-switch/expected.txt
+++ /dev/null
diff --git a/test/501-regression-packed-switch/info.txt b/test/501-regression-packed-switch/info.txt
deleted file mode 100644
index f7df49d..0000000
--- a/test/501-regression-packed-switch/info.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Regression test for optimizing's builder which used to trip when compiled code
-contained a packed switch with no targets.
diff --git a/test/501-regression-packed-switch/smali/Test.smali b/test/501-regression-packed-switch/smali/Test.smali
deleted file mode 100644
index 8756ed5..0000000
--- a/test/501-regression-packed-switch/smali/Test.smali
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright (C) 2015 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 LTest;
-
-.super Ljava/lang/Object;
-
-.method public static EmptyPackedSwitch(I)I
-  .registers 1
-  packed-switch v0, :pswitch_data_6a
-  const/4 v0, 0x5
-  return v0
-
-  :pswitch_data_6a
-  .packed-switch 0x0
-  .end packed-switch
-.end method
diff --git a/test/501-regression-packed-switch/src/Main.java b/test/501-regression-packed-switch/src/Main.java
deleted file mode 100644
index b80bc62..0000000
--- a/test/501-regression-packed-switch/src/Main.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2015 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.
- */
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-
-public class Main {
-
-  // Workaround for b/18051191.
-  class InnerClass {}
-
-  public static void main(String args[]) throws Exception {
-    Class<?> c = Class.forName("Test");
-    Method m = c.getMethod("EmptyPackedSwitch", new Class[] { int.class });
-    Integer result = (Integer) m.invoke(null, new Integer(42));
-    if (result != 5) {
-      throw new Error("Expected 5, got " + result);
-    }
-  }
-}
