diff options
| author | Eric Christopher <echristo@apple.com> | 2011-03-15 00:25:41 +0000 |
|---|---|---|
| committer | Eric Christopher <echristo@apple.com> | 2011-03-15 00:25:41 +0000 |
| commit | b9b80c326847ccb1b0611e9b6dc4d372ecc158d3 (patch) | |
| tree | 34f87744fcb4e3c572388c5a22a91787c26be940 /lib/Transforms | |
| parent | 875c3ffcc992efd21e3a54bae36b1961ff0f8333 (diff) | |
If we don't know how long a string is we can't fold an _chk version to the
normal version.
Fixes rdar://9123638
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127636 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
| -rw-r--r-- | lib/Transforms/InstCombine/InstCombineCalls.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineCalls.cpp b/lib/Transforms/InstCombine/InstCombineCalls.cpp index bfdc17eff7..b5fd0b9af4 100644 --- a/lib/Transforms/InstCombine/InstCombineCalls.cpp +++ b/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(); |
