diff options
author | Vitaly Buka <vitalybuka@google.com> | 2020-05-27 02:45:43 -0700 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2020-05-27 02:48:42 -0700 |
commit | f6383643d9e84a139f68cbe19fa16d4969d20d5c (patch) | |
tree | 730c741ccbf0840100621ecbf52f5698ae3aa96f /llvm/lib/Analysis/StackSafetyAnalysis.cpp | |
parent | 06a07dd6080c72ca886cc7bb21beef2a372d94cf (diff) | |
download | llvm-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.cpp | 6 |
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; } |