aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2008-02-19 06:47:18 +0000
committerOwen Anderson <resistor@mac.com>2008-02-19 06:47:18 +0000
commit851bfff50f7251e4d00b5fffbb5e140544cc4a63 (patch)
tree78a4a45dc19318395c574b94ce01e5c3ded9eccc
parent61c24e96b1ee5245e0b382a35773d2bc41919880 (diff)
In addition to arguments passed to it, memcpy (and all other calls) can ModRef pointers that alias their arguments as well. This fixes PR2057.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47317 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Analysis/BasicAliasAnalysis.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp
index 57d726df2d..200779f0e7 100644
--- a/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/lib/Analysis/BasicAliasAnalysis.cpp
@@ -263,7 +263,8 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
CI != CE; ++CI)
if (isa<PointerType>((*CI)->getType()) &&
- getUnderlyingObject(*CI) == P)
+ ( getUnderlyingObject(*CI) == P ||
+ alias(cast<Value>(CI), ~0ULL, P, ~0ULL) != NoAlias) )
passedAsArg = true;
if (!passedAsArg)