diff options
author | Chris Lattner <sabre@nondot.org> | 2012-01-25 01:32:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2012-01-25 01:32:59 +0000 |
commit | af7b4fb9bec3858f0374d713dcbf3398a23c6fbe (patch) | |
tree | 5320eb10bc18e29dc860f77c25de62ed2475f975 /lib/VMCore/Constants.cpp | |
parent | 0f193b8a6846dab25323788638e760ae03b7cd87 (diff) | |
download | external_llvm-af7b4fb9bec3858f0374d713dcbf3398a23c6fbe.zip external_llvm-af7b4fb9bec3858f0374d713dcbf3398a23c6fbe.tar.gz external_llvm-af7b4fb9bec3858f0374d713dcbf3398a23c6fbe.tar.bz2 |
Remove the Type::getNumElements() method, which is only called in 4 places,
did something extremely surprising, and shadowed actually useful
implementations that had completely different behavior.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148898 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Constants.cpp')
-rw-r--r-- | lib/VMCore/Constants.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 1976832..0fcce09 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -1505,8 +1505,10 @@ Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy) { "PtrToInt source must be pointer or pointer vector"); assert(DstTy->getScalarType()->isIntegerTy() && "PtrToInt destination must be integer or integer vector"); - assert(C->getType()->getNumElements() == DstTy->getNumElements() && - "Invalid cast between a different number of vector elements"); + assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); + if (VectorType *VT = dyn_cast<VectorType>(C->getType())) + assert(VT->getNumElements() == cast<VectorType>(DstTy)->getNumElements() && + "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::PtrToInt, C, DstTy); } @@ -1515,8 +1517,10 @@ Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy) { "IntToPtr source must be integer or integer vector"); assert(DstTy->getScalarType()->isPointerTy() && "IntToPtr destination must be a pointer or pointer vector"); - assert(C->getType()->getNumElements() == DstTy->getNumElements() && - "Invalid cast between a different number of vector elements"); + assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); + if (VectorType *VT = dyn_cast<VectorType>(C->getType())) + assert(VT->getNumElements() == cast<VectorType>(DstTy)->getNumElements() && + "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::IntToPtr, C, DstTy); } @@ -2018,7 +2022,9 @@ bool ConstantDataSequential::isElementTypeCompatible(const Type *Ty) { /// getNumElements - Return the number of elements in the array or vector. unsigned ConstantDataSequential::getNumElements() const { - return getType()->getNumElements(); + if (ArrayType *AT = dyn_cast<ArrayType>(getType())) + return AT->getNumElements(); + return cast<VectorType>(getType())->getNumElements(); } |