SimplifyCFG: Don't crash when forming a switch bitmap with an undef default value.
[oota-llvm.git] / lib / Transforms / Utils / SimplifyCFG.cpp
index a5e4d44b85ee73312cf808447eb5603cd906b40b..6da791bb1cb55f90c850fef2cc22091d9f743d44 100644 (file)
@@ -3351,8 +3351,11 @@ SwitchLookupTable::SwitchLookupTable(Module &M,
     APInt TableInt(TableSize * IT->getBitWidth(), 0);
     for (uint64_t I = TableSize; I > 0; --I) {
       TableInt <<= IT->getBitWidth();
-      ConstantInt *Val = cast<ConstantInt>(TableContents[I - 1]);
-      TableInt |= Val->getValue().zext(TableInt.getBitWidth());
+      // Insert values into the bitmap. Undef values are set to zero.
+      if (!isa<UndefValue>(TableContents[I - 1])) {
+        ConstantInt *Val = cast<ConstantInt>(TableContents[I - 1]);
+        TableInt |= Val->getValue().zext(TableInt.getBitWidth());
+      }
     }
     BitMap = ConstantInt::get(M.getContext(), TableInt);
     BitMapElementTy = IT;