[llvm-branch-commits] [cfe-branch] r71418 - in /cfe/branches/Apple/Dib: lib/Analysis/CFRefCount.cpp test/Analysis/retain-release-gc-only.m
Mike Stump
mrs at apple.com
Sun May 10 20:43:16 PDT 2009
Author: mrs
Date: Sun May 10 22:43:16 2009
New Revision: 71418
URL: http://llvm.org/viewvc/llvm-project?rev=71418&view=rev
Log:
Merge in 71397:
Add special warning about returning a retained object where a GC'ed object is expected.
Modified:
cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp
cfe/branches/Apple/Dib/test/Analysis/retain-release-gc-only.m
Modified: cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp?rev=71418&r1=71417&r2=71418&view=diff
==============================================================================
--- cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp (original)
+++ cfe/branches/Apple/Dib/lib/Analysis/CFRefCount.cpp Sun May 10 22:43:16 2009
@@ -2517,9 +2517,10 @@
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 @@
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
Modified: cfe/branches/Apple/Dib/test/Analysis/retain-release-gc-only.m
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/Apple/Dib/test/Analysis/retain-release-gc-only.m?rev=71418&r1=71417&r2=71418&view=diff
==============================================================================
--- cfe/branches/Apple/Dib/test/Analysis/retain-release-gc-only.m (original)
+++ cfe/branches/Apple/Dib/test/Analysis/retain-release-gc-only.m Sun May 10 22:43:16 2009
@@ -128,13 +128,17 @@
// is expected.
@interface TestReturnNotOwnedWhenExpectedOwned
- (NSString*)newString;
+- (CFMutableArrayRef)newArray;
@end
@implementation TestReturnNotOwnedWhenExpectedOwned
- (NSString*)newString {
- NSString *s = [NSString stringWithUTF8String:"hello"];
- // FIXME: Should this be an error anyway?
- return s; // no-warning
+ NSString *s = [NSString stringWithUTF8String:"hello"]; // expected-warning{{Potential leak (when using garbage collection) of an object allocated on line 136 and stored into 's'}}
+ CFRetain(s);
+ return s;
+}
+- (CFMutableArrayRef)newArray{
+ return CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks); // no-warning
}
@end
More information about the llvm-branch-commits
mailing list