aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/StackSafetyAnalysis.cpp
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2020-05-27 02:45:43 -0700
committerVitaly Buka <vitalybuka@google.com>2020-05-27 02:48:42 -0700
commitf6383643d9e84a139f68cbe19fa16d4969d20d5c (patch)
tree730c741ccbf0840100621ecbf52f5698ae3aa96f /llvm/lib/Analysis/StackSafetyAnalysis.cpp
parent06a07dd6080c72ca886cc7bb21beef2a372d94cf (diff)
downloadllvm-f6383643d9e84a139f68cbe19fa16d4969d20d5c.zip
llvm-f6383643d9e84a139f68cbe19fa16d4969d20d5c.tar.gz
llvm-f6383643d9e84a139f68cbe19fa16d4969d20d5c.tar.bz2
[StackSafety] Bailout on some function calls
Don't miss values used in calls outside regular argument list.
Diffstat (limited to 'llvm/lib/Analysis/StackSafetyAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/StackSafetyAnalysis.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/StackSafetyAnalysis.cpp b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
index 9c937b0..a447326 100644
--- a/llvm/lib/Analysis/StackSafetyAnalysis.cpp
+++ b/llvm/lib/Analysis/StackSafetyAnalysis.cpp
@@ -345,12 +345,18 @@ bool StackSafetyLocalAnalysis::analyzeAllUses(Value *Ptr, UseInfo &US) {
assert(isa<Function>(Callee) || isa<GlobalAlias>(Callee));
auto B = CB.arg_begin(), E = CB.arg_end();
+ int Found = 0;
for (auto A = B; A != E; ++A) {
if (A->get() == V) {
+ ++Found;
ConstantRange Offset = offsetFrom(UI, Ptr);
US.Calls.emplace_back(Callee, A - B, Offset);
}
}
+ if (!Found) {
+ US.updateRange(UnknownRange);
+ return false;
+ }
break;
}