diff options
Diffstat (limited to 'test/SemaObjC/compare-qualified-class.m')
-rw-r--r-- | test/SemaObjC/compare-qualified-class.m | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/SemaObjC/compare-qualified-class.m b/test/SemaObjC/compare-qualified-class.m index 60ef851e1f3f..a52561521444 100644 --- a/test/SemaObjC/compare-qualified-class.m +++ b/test/SemaObjC/compare-qualified-class.m @@ -28,3 +28,38 @@ int main () { classA == classD; // expected-warning {{comparison of distinct pointer types ('Class<SomeProtocol>' and 'Class<SomeProtocol1>')}} } +// rdar://18491222 +@protocol NSObject @end + +@interface NSObject @end +@protocol ProtocolX <NSObject> +@end + +@protocol ProtocolY <NSObject> +@end + +@interface ClassA : NSObject +@end + +@interface ClassB : ClassA <ProtocolY, ProtocolX> +@end + +@interface OtherClass : NSObject +@property (nonatomic, copy) ClassB<ProtocolX> *aProperty; +- (ClassA<ProtocolY> *)aMethod; +- (ClassA<ProtocolY> *)anotherMethod; +@end + +@implementation OtherClass +- (ClassA<ProtocolY> *)aMethod { + // This does not work, even though ClassB subclasses from A and conforms to Y + // because the property type explicity adds ProtocolX conformance + // even though ClassB already conforms to ProtocolX + return self.aProperty; +} +- (ClassA<ProtocolY> *)anotherMethod { + // This works, even though all it is doing is removing an explicit + // protocol conformance that ClassB already conforms to + return (ClassB *)self.aProperty; +} +@end |