aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Analysis/CFRefCount.cpp9
-rw-r--r--test/Analysis/retain-release.m14
2 files changed, 18 insertions, 5 deletions
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp
index 75a9f3dca1..b6c11c9cfc 100644
--- a/lib/Analysis/CFRefCount.cpp
+++ b/lib/Analysis/CFRefCount.cpp
@@ -119,12 +119,15 @@ static NamingConvention deriveNamingConvention(const char* s) {
case 4:
// Methods starting with 'alloc' or contain 'copy' follow the
// create rule
- if ((AtBeginning && StringsEqualNoCase("alloc", s, len)) ||
- (C == NoConvention && StringsEqualNoCase("copy", s, len)))
+ if (C == NoConvention && StringsEqualNoCase("copy", s, len))
C = CreateRule;
else // Methods starting with 'init' follow the init rule.
if (AtBeginning && StringsEqualNoCase("init", s, len))
- C = InitRule;
+ C = InitRule;
+ break;
+ case 5:
+ if (AtBeginning && StringsEqualNoCase("alloc", s, len))
+ C = CreateRule;
break;
}
diff --git a/test/Analysis/retain-release.m b/test/Analysis/retain-release.m
index c05d730491..c6a05c0031 100644
--- a/test/Analysis/retain-release.m
+++ b/test/Analysis/retain-release.m
@@ -60,9 +60,10 @@ typedef struct _NSZone NSZone;
@end @protocol NSCopying - (id)copyWithZone:(NSZone *)zone;
@end @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone;
@end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder;
-@end @interface NSObject <NSObject> {
-}
+@end
+@interface NSObject <NSObject> {}
+ (id)alloc;
++ (id)allocWithZone:(NSZone *)zone;
@end typedef float CGFloat;
@interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding> - (NSUInteger)length;
- (const char *)UTF8String;
@@ -324,3 +325,12 @@ static void rdar_6659160(char *inkind, char *inname)
[name release];
}
+// PR 3677 - 'allocWithZone' should be treated as following the Cocoa naming
+// conventions with respect to 'return'ing ownership.
+@interface PR3677: NSObject @end
+@implementation PR3677
++ (id)allocWithZone:(NSZone *)inZone {
+ return [super allocWithZone:inZone]; // no-warning
+}
+@end
+