When checking the parameter types of an Objective-C method, don't
authorDouglas Gregor <dgregor@apple.com>
Fri, 18 Jan 2013 01:41:40 +0000 (01:41 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 18 Jan 2013 01:41:40 +0000 (01:41 +0000)
decay the parameter type immediately; let CheckParameter() do its
job. Fixes <rdar://problem/12071218>.

llvm-svn: 172780

clang/lib/Sema/SemaDeclObjC.cpp
clang/test/SemaObjC/arc.m

index 0ffdceb..76bfaff 100644 (file)
@@ -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, 
index bffcd4b..d89d035 100644 (file)
@@ -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