diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-05-10 16:52:15 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-05-10 16:52:15 +0000 |
commit | 82f2be584e43b2e38583fa0bee7cba85612b98a1 (patch) | |
tree | 197365de42c2c3fe3d2110c80a6abd6471dadc42 /lib/Analysis/CFRefCount.cpp | |
parent | e8720ce787d83ffd0de19d82e35dba61e61d9648 (diff) |
Add special warning about returning a retained object where a GC'ed object is expected.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71397 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/CFRefCount.cpp')
-rw-r--r-- | lib/Analysis/CFRefCount.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 2715a9633f..4b254e07d5 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -2517,9 +2517,10 @@ CFRefLeakReport::getEndPath(BugReporterContext& BRC, else if (RV->getKind() == RefVal::ErrorGCLeakReturned) { ObjCMethodDecl& MD = cast<ObjCMethodDecl>(BRC.getCodeDecl()); os << " and returned from method '" << MD.getSelector().getAsString() - << "' is potentially leaked when using garbage collection. Callers" - " of this method do not expect a +1 retain count since the return" - " type is an Objective-C object reference"; + << "' is potentially leaked when using garbage collection. Callers " + "of this method do not expect a returned object with a +1 retain " + "count since they expect the object to be managed by the garbage " + "collector"; } else os << " is no longer referenced after this point and has a retain count of" @@ -3073,11 +3074,12 @@ void CFRefCount::EvalReturn(ExplodedNodeSet<GRState>& Dst, if (isGCEnabled() && RE.getObjKind() == RetEffect::ObjC) { // Things are more complicated with garbage collection. If the // returned object is suppose to be an Objective-C object, we have - // a leak (as the caller expects a GC'ed object). + // a leak (as the caller expects a GC'ed object) because no + // method should return ownership unless it returns a CF object. X = X ^ RefVal::ErrorGCLeakReturned; // Keep this false until this is properly tested. - hasError = false; + hasError = true; } else if (!RE.isOwned()) { // Either we are using GC and the returned object is a CF type |