[cfe-commits] r50777 - in /cfe/trunk: lib/Analysis/CFRefCount.cpp test/Analysis-Apple/CFDate.m
Ted Kremenek
kremenek at apple.com
Tue May 6 16:07:13 PDT 2008
Author: kremenek
Date: Tue May 6 18:07:13 2008
New Revision: 50777
URL: http://llvm.org/viewvc/llvm-project?rev=50777&view=rev
Log:
Don't report leaks for autoreleased objects.
Modified:
cfe/trunk/lib/Analysis/CFRefCount.cpp
cfe/trunk/test/Analysis-Apple/CFDate.m
Modified: cfe/trunk/lib/Analysis/CFRefCount.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFRefCount.cpp?rev=50777&r1=50776&r2=50777&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/trunk/lib/Analysis/CFRefCount.cpp Tue May 6 18:07:13 2008
@@ -634,10 +634,15 @@
if (I != ObjCInstMethSummaries.end())
return I->second;
+ return 0;
+
+#if 0
+ return 0;
+
// Don't track anything if using GC.
if (isGCEnabled())
- return 0;
-
+ return 0;
+
// Inspect the class name and selecrtor to determine if this method
// creates new objects.
const char* cls = ClsName->getName();
@@ -673,6 +678,7 @@
RetainSummary* Summ = getPersistentSummary(RetEffect::MakeOwned());
ObjCInstMethSummaries[S] = Summ;
return Summ;
+#endif
}
void RetainSummaryManager::InitializeInstMethSummaries() {
@@ -1969,6 +1975,7 @@
return P;
}
+
PathDiagnosticPiece* CFRefReport::getEndPath(BugReporter& BR,
ExplodedNode<ValueState>* EndN) {
@@ -2057,54 +2064,26 @@
// Look in the *trimmed* graph at the immediate predecessor of EndN. Does
// it occur on the same line?
+
+ PathDiagnosticPiece::DisplayHint Hint = PathDiagnosticPiece::Above;
assert (!EndN->pred_empty()); // Not possible to have 0 predecessors.
- N = *(EndN->pred_begin());
+ ExplodedNode<ValueState> *Pred = *(EndN->pred_begin());
+ ProgramPoint PredPos = Pred->getLocation();
- do {
- ProgramPoint P = N->getLocation();
+ if (PostStmt* PredPS = dyn_cast<PostStmt>(&PredPos)) {
- if (!isa<PostStmt>(P))
- break;
+ Stmt* SPred = PredPS->getStmt();
// Predecessor at same line?
-
- Stmt* SPred = cast<PostStmt>(P).getStmt();
-
- if (SMgr.getLogicalLineNumber(SPred->getLocStart()) != EndLine)
- break;
-
- // The predecessor (where the object was not yet leaked) is a statement
- // on the same line. Get the first successor statement that appears
- // on a different line. For this operation, we can traverse the
- // non-trimmed graph.
-
- N = getEndNode(); // This is the node where the leak occured in the
- // original graph.
-
- while (!N->succ_empty()) {
-
- N = *(N->succ_begin());
- ProgramPoint P = N->getLocation();
-
- if (!isa<PostStmt>(P))
- continue;
-
- Stmt* SSucc = cast<PostStmt>(P).getStmt();
-
- if (SMgr.getLogicalLineNumber(SSucc->getLocStart()) != EndLine) {
- S = SSucc;
- break;
- }
- }
+ if (SMgr.getLogicalLineNumber(SPred->getLocStart()) != EndLine) {
+ Hint = PathDiagnosticPiece::Below;
+ S = SPred;
+ }
}
- while (false);
-
- // Construct the location.
-
- FullSourceLoc L(S->getLocStart(), SMgr);
// Generate the diagnostic.
+ FullSourceLoc L( S->getLocStart(), SMgr);
std::ostringstream os;
os << "Object allocated on line " << AllocLine;
@@ -2115,7 +2094,7 @@
os << " is no longer referenced after this point and has a retain count of +"
<< RetCount << " (object leaked).";
- return new PathDiagnosticPiece(L, os.str());
+ return new PathDiagnosticPiece(L, os.str(), Hint);
}
void UseAfterRelease::EmitWarnings(BugReporter& BR) {
Modified: cfe/trunk/test/Analysis-Apple/CFDate.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis-Apple/CFDate.m?rev=50777&r1=50776&r2=50777&view=diff
==============================================================================
--- cfe/trunk/test/Analysis-Apple/CFDate.m (original)
+++ cfe/trunk/test/Analysis-Apple/CFDate.m Tue May 6 18:07:13 2008
@@ -90,26 +90,7 @@
CFDateRef f7() {
CFDateRef date = CFDateCreate(NULL, CFAbsoluteTimeGetCurrent());
- CFRetain(date);
- date = CFDateCreate(NULL, CFAbsoluteTimeGetCurrent()); //expected-warning{{leak}}
+ CFRetain(date); //expected-warning{{leak}}
+ date = CFDateCreate(NULL, CFAbsoluteTimeGetCurrent());
return date;
}
-
-NSDate* f8(int x) {
-
- NSDate* date = [NSDate date];
-
- if (x) [date retain];
-
- return date; // expected-warning{{leak}}
-}
-
-NSDate* f9(int x) {
-
- NSDate* date = [NSDate dateWithString:@"2001-03-24 10:45:32 +0600"];
-
- if (x) [date retain];
-
- return date; // expected-warning{{leak}}
-}
-
More information about the cfe-commits
mailing list