aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-01-18 01:41:40 +0000
committerDouglas Gregor <dgregor@apple.com>2013-01-18 01:41:40 +0000
commitf373c5d0b7f04fc3fa4e34bdfb868d118de6a641 (patch)
tree292a7a4a4757687bb715030cbff8c3bece832f92
parent96bd14bf5833e26db0744fb94cfc85b2a67ae5c5 (diff)
When checking the parameter types of an Objective-C method, don't
decay the parameter type immediately; let CheckParameter() do its job. Fixes <rdar://problem/12071218>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172780 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaDeclObjC.cpp2
-rw-r--r--test/SemaObjC/arc.m6
2 files changed, 5 insertions, 3 deletions
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