From: Douglas Gregor Date: Fri, 18 Jan 2013 01:41:40 +0000 (+0000) Subject: When checking the parameter types of an Objective-C method, don't X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f373c5d0b7f04fc3fa4e34bdfb868d118de6a641;p=clang When checking the parameter types of an Objective-C method, don't decay the parameter type immediately; let CheckParameter() do its job. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172780 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 0ffdceb2ee..76bfaff91f 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -2906,8 +2906,6 @@ Decl *Sema::ActOnMethodDeclaration( DI = 0; } else { ArgType = GetTypeFromParser(ArgInfo[i].Type, &DI); - // Perform the default array/function conversions (C99 6.7.5.3p[7,8]). - ArgType = Context.getAdjustedParameterType(ArgType); } LookupResult R(*this, ArgInfo[i].Name, ArgInfo[i].NameLoc, diff --git a/test/SemaObjC/arc.m b/test/SemaObjC/arc.m index bffcd4bbde..d89d035fca 100644 --- a/test/SemaObjC/arc.m +++ b/test/SemaObjC/arc.m @@ -11,7 +11,7 @@ id CFBridgingRelease(CFTypeRef); @end @class NSFastEnumerationState; @protocol NSFastEnumeration -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id [])buffer count:(NSUInteger)len; +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len; @end @interface NSNumber + (NSNumber *)numberWithInt:(int)value; @@ -752,3 +752,7 @@ void rdar12569201(id key, id value) { e = @(42); // expected-warning {{assigning numeric literal to a weak variable; object will be released after assignment}} m = @(41 + 1); // expected-warning {{assigning boxed expression to a weak variable; object will be released after assignment}} } + +@interface C +- (void)method:(id[])objects; // expected-error{{must explicitly describe intended ownership of an object array parameter}} +@end