Quick: fix tranmission of block info

When operating on the Quick path, we use named basic blocks
to transmit the original Dalvik offset and block type.  However,
not all blocks are named.  Code changed to handle that case.

Change-Id: Ibeafc18ac83e2d8d6dcf70d0f2dcfebeafc84b8f
diff --git a/src/compiler/codegen/MethodBitcode.cc b/src/compiler/codegen/MethodBitcode.cc
index a9e134f..58678a0 100644
--- a/src/compiler/codegen/MethodBitcode.cc
+++ b/src/compiler/codegen/MethodBitcode.cc
@@ -29,6 +29,7 @@
 #include <llvm/Support/InstIterator.h>
 
 static const char* kLabelFormat = "%c0x%x_%d";
+static const char kInvalidBlock = 0xff;
 static const char kNormalBlock = 'L';
 static const char kCatchBlock = 'C';
 
@@ -2885,15 +2886,21 @@
     // Define the starting label
     LIR* blockLabel = cUnit->blockToLabelMap.Get(bb);
     // Extract the type and starting offset from the block's name
-    char blockType = kNormalBlock;
-    if (!isEntry) {
-      const char* blockName = bb->getName().str().c_str();
-      int dummy;
-      sscanf(blockName, kLabelFormat, &blockType, &blockLabel->operands[0], &dummy);
-      cUnit->currentDalvikOffset = blockLabel->operands[0];
+    char blockType = kInvalidBlock;
+    if (isEntry) {
+      blockType = kNormalBlock;
+      blockLabel->operands[0] = 0;
+    } else if (!bb->hasName()) {
+      blockType = kNormalBlock;
+      blockLabel->operands[0] = DexFile::kDexNoIndex;
     } else {
-      cUnit->currentDalvikOffset = 0;
+      std::string blockName = bb->getName().str();
+      int dummy;
+      sscanf(blockName.c_str(), kLabelFormat, &blockType, &blockLabel->operands[0], &dummy);
+      cUnit->currentDalvikOffset = blockLabel->operands[0];
     }
+    DCHECK((blockType == kNormalBlock) || (blockType == kCatchBlock));
+    cUnit->currentDalvikOffset = blockLabel->operands[0];
     // Set the label kind
     blockLabel->opcode = kPseudoNormalBlockLabel;
     // Insert the label