George Karpenkov
a71ec6c00a
[analyzer] Fix an infinite recursion bug while checking parent methods in RetainCountChecker
...
Differential Revision: https://reviews.llvm.org/D55351
llvm-svn: 348531
2018-12-06 22:06:44 +00:00
George Karpenkov
a717bc78b7
[analyzer] Attribute for RetainCountChecker for OSObject should propagate with inheritance
...
rdar://46388388
Differential Revision: https://reviews.llvm.org/D55154
llvm-svn: 348396
2018-12-05 18:34:54 +00:00
George Karpenkov
be3f4bd36b
Revert "Reverting r347949-r347951 because they broke the test bots."
...
This reverts commit 5bad6129c012fbf186eb055be49344e790448ecc.
Hopefully fixing the issue which was breaking the bots.
llvm-svn: 348030
2018-11-30 20:43:42 +00:00
Aaron Ballman
cd5115b74d
Reverting r347949-r347951 because they broke the test bots.
...
http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/440/steps/ninja%20check%202/logs/FAIL%3A%20Clang%3A%3Aosobject-retain-release.cpp
llvm-svn: 348020
2018-11-30 18:52:51 +00:00
George Karpenkov
2620c60545
[analyzer] RetainCountChecker for OSObject model the "free" call
...
The "free" call frees the object immediately, ignoring the reference count.
Sadly, it is actually used in a few places, so we need to model it.
Differential Revision: https://reviews.llvm.org/D55092
llvm-svn: 347950
2018-11-30 02:19:16 +00:00
George Karpenkov
2bd644ebbd
[analyzer] RetainCountChecker: recognize that OSObject can be created directly using an operator "new"
...
Differential Revision: https://reviews.llvm.org/D55076
llvm-svn: 347949
2018-11-30 02:19:03 +00:00
George Karpenkov
b43772d85c
[analyzer] Switch retain count checker for OSObject to use OS_* attributes
...
Instead of generalized reference counting annotations.
Differential Revision: https://reviews.llvm.org/D55041
llvm-svn: 347948
2018-11-30 02:18:50 +00:00
George Karpenkov
3bdbeb155b
[analyzer] For OSObject, trust that functions starting with Get
...
(uppercase) are also getters.
Differential Revision: https://reviews.llvm.org/D55035
llvm-svn: 347945
2018-11-30 02:18:10 +00:00
George Karpenkov
83fb536ff9
[analyzer] Re-add custom OSIterator rule for RetainCountChecker
...
Turns out the rule is quite ubiquitous.
Revert of https://reviews.llvm.org/D53628
llvm-svn: 345747
2018-10-31 17:38:46 +00:00
George Karpenkov
6fd5c86d98
[analyzer] RetainCountChecker: for now, do not trust the summaries of inlined code
...
Trusting summaries of inlined code would require a more thorough work,
as the current approach was causing too many false positives, as the new
example in test. The culprit lies in the fact that we currently escape
all variables written into a field (but not passed off to unknown
functions!), which can result in inconsistent behavior.
rdar://45655344
Differential Revision: https://reviews.llvm.org/D53902
llvm-svn: 345746
2018-10-31 17:38:29 +00:00
George Karpenkov
3cfa04e109
[analyzer] [RetainCountChecker] Do not invalidate references passed to constructors and operators
...
Differential Revision: https://reviews.llvm.org/D53660
llvm-svn: 345340
2018-10-25 23:38:41 +00:00
George Karpenkov
7cdccb1459
[analyzer] Remove custom rule for OSIterator in RetainCountChecker
...
Differential Revision: https://reviews.llvm.org/D53628
llvm-svn: 345339
2018-10-25 23:38:24 +00:00
George Karpenkov
3c2ed8f338
[analyzer] Correct modelling of OSDynamicCast: eagerly state split
...
Previously, OSDynamicCast was modeled as an identity.
This is not correct: the output of OSDynamicCast may be zero even if the
input was not zero (if the class is not of desired type), and thus the
modeling led to false positives.
Instead, we are doing eager state split:
in one branch, the returned value is identical to the input parameter,
and in the other branch, the returned value is zero.
This patch required a substantial refactoring of canEval infrastructure,
as now it can return different function summaries, and not just true/false.
rdar://45497400
Differential Revision: https://reviews.llvm.org/D53624
llvm-svn: 345338
2018-10-25 23:38:07 +00:00
George Karpenkov
081c47760c
[analyzer] Do not stop tracking CXX methods touching OSObject.
...
Trust generalized annotations for OSObject.
Differential Revision: https://reviews.llvm.org/D53550
llvm-svn: 345100
2018-10-23 23:11:50 +00:00
George Karpenkov
48de582f65
[analyzer] Trust summaries for OSObject::retain and OSObject::release
...
Refactor the way in which summaries are consumed for safeMetaCast
Differential Revision: https://reviews.llvm.org/D53549
llvm-svn: 345099
2018-10-23 23:11:30 +00:00
George Karpenkov
d5ef0d2a4b
[analyzer] Better retain count rules for OSObjects
...
Differential Revision: https://reviews.llvm.org/D51184
llvm-svn: 340961
2018-08-29 20:28:33 +00:00
Mikael Holmen
b4a7546c5c
Change dyn_cast<CXXMethodDecl>(FD) to isa<CXXMethodDecl>(FD) [NFC]
...
The result of the dyn_cast wasn't used to we can just check isa.
llvm-svn: 340531
2018-08-23 13:18:27 +00:00
Mikael Holmen
9f356ddec8
Removed unused variable [NFC]
...
The compiler warned:
../tools/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp:329:19: error: unused variable 'MD' [-Werror,-Wunused-variable]
if (const auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
^
1 error generated.
llvm-svn: 340524
2018-08-23 10:59:49 +00:00
George Karpenkov
ab0011ebc0
[analyzer] Preliminary version of retain count checking for OSObjects
...
Has quite a lot of false positives, disabled behind the flag.
Differential Revision: https://reviews.llvm.org/D50880
llvm-svn: 340502
2018-08-23 00:26:59 +00:00
George Karpenkov
efef49cd2f
[analyzer] [NFC] Split up RetainSummaryManager from RetainCountChecker - try #2
...
Turns out it can't be removed from the analyzer since it relies on CallEvent.
Moving to staticAnalyzer/core
Differential Revision: https://reviews.llvm.org/D51023
llvm-svn: 340247
2018-08-21 03:09:02 +00:00