diff options
author | Jordy Rose <jediknil@belkadan.com> | 2012-03-17 05:49:15 +0000 |
---|---|---|
committer | Jordy Rose <jediknil@belkadan.com> | 2012-03-17 05:49:15 +0000 |
commit | 78373e505d2608db3b25bc34378cb455d1b53ec1 (patch) | |
tree | ae3075e769ee606177b3585cb4ce007a31622d3e /clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | |
parent | 914e81ad947a37fed236c1488a0ec2e2274c2d3b (diff) | |
download | bcm5719-llvm-78373e505d2608db3b25bc34378cb455d1b53ec1.tar.gz bcm5719-llvm-78373e505d2608db3b25bc34378cb455d1b53ec1.zip |
[analyzer] Don't claim an object was returned with +1 retain count before counting autoreleases. Fixes PR10376.
(Also, 80-column violations.)
llvm-svn: 152976
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index e01db9508f7..390d86f0a98 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -2055,8 +2055,8 @@ PathDiagnosticPiece *CFRefReportVisitor::VisitNode(const ExplodedNode *N, if (PrevV.getKind() == RefVal::Released) { assert(GCEnabled && CurrV.getCount() > 0); - os << " The object is not eligible for garbage collection until the " - "retain count reaches 0 again."; + os << " The object is not eligible for garbage collection until " + "the retain count reaches 0 again."; } break; @@ -2066,8 +2066,12 @@ PathDiagnosticPiece *CFRefReportVisitor::VisitNode(const ExplodedNode *N, break; case RefVal::ReturnedOwned: - os << "Object returned to caller as an owning reference (single retain " - "count transferred to caller)"; + // Autoreleases can be applied after marking a node ReturnedOwned. + if (CurrV.getAutoreleaseCount()) + return NULL; + + os << "Object returned to caller as an owning reference (single " + "retain count transferred to caller)"; break; case RefVal::ReturnedNotOwned: |