Fix Transforms/ScalarRepl/2006-10-23-PointerUnionCrash.ll

llvm-svn: 31151
diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
index 496449f..ffb095a 100644
--- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
+++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
@@ -611,11 +611,16 @@
           NV = new ExtractElementInst(NV, ConstantInt::get(Type::UIntTy, Elt),
                                       "tmp", LI);
         } else {
-          assert(NV->getType()->isInteger() && "Unknown promotion!");
-          if (Offset && Offset < TD.getTypeSize(NV->getType())*8)
-            NV = new ShiftInst(Instruction::Shr, NV,
-                               ConstantInt::get(Type::UByteTy, Offset),
-                               LI->getName(), LI);
+          if (Offset) {
+            assert(NV->getType()->isInteger() && "Unknown promotion!");
+            if (Offset < TD.getTypeSize(NV->getType())*8)
+              NV = new ShiftInst(Instruction::Shr, NV,
+                                 ConstantInt::get(Type::UByteTy, Offset),
+                                 LI->getName(), LI);
+          } else {
+            assert((NV->getType()->isInteger() ||
+                    isa<PointerType>(NV->getType())) && "Unknown promotion!");
+          }
           NV = new CastInst(NV, LI->getType(), LI->getName(), LI);
         }
       }