aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore/Constants.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-08-11 18:28:09 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-08-11 18:28:09 +0000
commitff297a8eeb39e43729faef7567be4d96483f694d (patch)
tree142a74bd5f7125b0d966361ecd1eb2a096699844 /lib/VMCore/Constants.cpp
parent6d2667ac9276f116d4e3e5dfbb822bab8b000f74 (diff)
downloadexternal_llvm-ff297a8eeb39e43729faef7567be4d96483f694d.zip
external_llvm-ff297a8eeb39e43729faef7567be4d96483f694d.tar.gz
external_llvm-ff297a8eeb39e43729faef7567be4d96483f694d.tar.bz2
Simplify ConstantExpr::getInBoundsGetElementPtr and fix a possible crash, if
constant folding eliminated the GEP instruction. - clang was hitting this on its test suite (for x86_64, at least). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78698 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Constants.cpp')
-rw-r--r--lib/VMCore/Constants.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp
index 89578fb..70d4357 100644
--- a/lib/VMCore/Constants.cpp
+++ b/lib/VMCore/Constants.cpp
@@ -1442,14 +1442,11 @@ Constant *ConstantExpr::getGetElementPtr(Constant *C, Value* const *Idxs,
Constant *ConstantExpr::getInBoundsGetElementPtr(Constant *C,
Value* const *Idxs,
unsigned NumIdx) {
- // Get the result type of the getelementptr!
- const Type *Ty =
- GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx);
- assert(Ty && "GEP indices invalid!");
- unsigned As = cast<PointerType>(C->getType())->getAddressSpace();
- Constant *Result = getGetElementPtrTy(PointerType::get(Ty, As), C,
- Idxs, NumIdx);
- cast<GEPOperator>(Result)->setIsInBounds(true);
+ Constant *Result = getGetElementPtr(C, Idxs, NumIdx);
+ // Set in bounds attribute, assuming constant folding didn't eliminate the
+ // GEP.
+ if (GEPOperator *GEP = dyn_cast<GEPOperator>(Result))
+ GEP->setIsInBounds(true);
return Result;
}