diff options
| author | Cameron Zwarich <zwarich@apple.com> | 2011-10-23 07:02:10 +0000 |
|---|---|---|
| committer | Cameron Zwarich <zwarich@apple.com> | 2011-10-23 07:02:10 +0000 |
| commit | 057fbb1a10674e64d44d72ed3cdac64407d7e726 (patch) | |
| tree | a5d62bb6d02b9f4caada270eb83ae7c94461fa2a /llvm/lib/Transforms | |
| parent | 142adc492be981bf2ca9527b71f3d623fe141f4f (diff) | |
| download | bcm5719-llvm-057fbb1a10674e64d44d72ed3cdac64407d7e726.tar.gz bcm5719-llvm-057fbb1a10674e64d44d72ed3cdac64407d7e726.zip | |
The element insertion code in scalar replacement doesn't handle incorrect
element types, even though the element extraction code does. It is surprising
that this bug has been here for so long. Fixes <rdar://problem/10318778>.
llvm-svn: 142740
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp index c6d9123d661..b89f7306a28 100644 --- a/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ b/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -806,8 +806,10 @@ ConvertScalar_InsertValue(Value *SV, Value *Old, return Builder.CreateBitCast(SV, AllocaType); // Must be an element insertion. - assert(SV->getType() == VTy->getElementType()); - uint64_t EltSize = TD.getTypeAllocSizeInBits(VTy->getElementType()); + Type *EltTy = VTy->getElementType(); + if (SV->getType() != EltTy) + SV = Builder.CreateBitCast(SV, EltTy); + uint64_t EltSize = TD.getTypeAllocSizeInBits(EltTy); unsigned Elt = Offset/EltSize; return Builder.CreateInsertElement(Old, SV, Builder.getInt32(Elt)); } |

