OSDN Git Service

Fix interpreter to allow 0 size sparse switches.
authorJeff Hao <jeffhao@google.com>
Sat, 21 Mar 2015 02:44:35 +0000 (19:44 -0700)
committerJeff Hao <jeffhao@google.com>
Sat, 21 Mar 2015 02:44:35 +0000 (19:44 -0700)
Bug: 19827056
Change-Id: I12eaf717f1a4b9bd5e0c8e2a508df9da4e61c4ec

runtime/interpreter/interpreter_common.h

index 15396d6..7d413c5 100644 (file)
@@ -317,7 +317,10 @@ static inline int32_t DoSparseSwitch(const Instruction* inst, const ShadowFrame&
   int32_t test_val = shadow_frame.GetVReg(inst->VRegA_31t(inst_data));
   DCHECK_EQ(switch_data[0], static_cast<uint16_t>(Instruction::kSparseSwitchSignature));
   uint16_t size = switch_data[1];
-  DCHECK_GT(size, 0);
+  // Return length of SPARSE_SWITCH if size is 0.
+  if (size == 0) {
+    return 3;
+  }
   const int32_t* keys = reinterpret_cast<const int32_t*>(&switch_data[2]);
   DCHECK(IsAligned<4>(keys));
   const int32_t* entries = keys + size;