diff options
| author | Dale Johannesen <dalej@apple.com> | 2008-04-15 17:41:34 +0000 |
|---|---|---|
| committer | Dale Johannesen <dalej@apple.com> | 2008-04-15 17:41:34 +0000 |
| commit | 8fc8a272e0caf21930a73b3df33f4a75bc38e34b (patch) | |
| tree | c2631a244447fcde86bbc3769b4bd1c1ba2486dd /llvm/lib | |
| parent | 53d3241b52c413b2f5862a93b81d14cca595d0dc (diff) | |
| download | bcm5719-llvm-8fc8a272e0caf21930a73b3df33f4a75bc38e34b.tar.gz bcm5719-llvm-8fc8a272e0caf21930a73b3df33f4a75bc38e34b.zip | |
Don't assume a tail call can't reference a byval
argument to the outer function, this isn't correct.
llvm-svn: 49731
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/BasicAliasAnalysis.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index b696a800cf6..ad462076385 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -273,8 +273,10 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { // If this is a tail call and P points to a stack location, we know that // the tail call cannot access or modify the local stack. - if (isa<AllocaInst>(Object) || - (isa<Argument>(Object) && cast<Argument>(Object)->hasByValAttr())) + // We cannot exclude byval arguments here; these belong to the caller of + // the current function not to the current function, and a tail callee + // may reference them. + if (isa<AllocaInst>(Object)) if (CallInst *CI = dyn_cast<CallInst>(CS.getInstruction())) if (CI->isTailCall()) return NoModRef; |

