summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2011-03-15 00:25:41 +0000
committerEric Christopher <echristo@apple.com>2011-03-15 00:25:41 +0000
commit2139d3148f4004f7e57b2ea715a95b68cdcb091c (patch)
tree63a0c1823b027540550e69cd90b756ae8a622889 /llvm/lib/Transforms
parentfcaa2e1ba492845cbb613ff5d39f16b1e323e89b (diff)
downloadbcm5719-llvm-2139d3148f4004f7e57b2ea715a95b68cdcb091c.tar.gz
bcm5719-llvm-2139d3148f4004f7e57b2ea715a95b68cdcb091c.zip
If we don't know how long a string is we can't fold an _chk version to the
normal version. Fixes rdar://9123638 llvm-svn: 127636
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
index bfdc17eff7e..b5fd0b9af40 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp
@@ -759,9 +759,13 @@ protected:
dyn_cast<ConstantInt>(CI->getArgOperand(SizeCIOp))) {
if (SizeCI->isAllOnesValue())
return true;
- if (isString)
- return SizeCI->getZExtValue() >=
- GetStringLength(CI->getArgOperand(SizeArgOp));
+ if (isString) {
+ uint64_t Len = GetStringLength(CI->getArgOperand(SizeArgOp));
+ // If the length is 0 we don't know how long it is and so we can't
+ // remove the check.
+ if (Len == 0) return false;
+ return SizeCI->getZExtValue() >= Len;
+ }
if (ConstantInt *Arg = dyn_cast<ConstantInt>(
CI->getArgOperand(SizeArgOp)))
return SizeCI->getZExtValue() >= Arg->getZExtValue();
OpenPOWER on IntegriCloud