1// RUN: %clang_cc1 -x objective-c -Wno-objc-root-class -fms-extensions -rewrite-objc %s -o %t-rw.cpp 2// RUN: FileCheck --input-file=%t-rw.cpp %s 3// rdar://9846759 4// rdar://15517895 5 6typedef struct MyWidget { 7 int a; 8} MyWidget; 9 10MyWidget gWidget = { 17 }; 11 12@protocol MyProto 13- (MyWidget *)widget; 14@end 15 16@interface Foo 17@end 18 19@interface Bar: Foo <MyProto> 20@end 21 22@interface Container 23+ (MyWidget *)elementForView:(Foo *)view; 24@end 25 26@implementation Foo 27@end 28 29@implementation Bar 30- (MyWidget *)widget { 31 return &gWidget; 32} 33@end 34 35@implementation Container 36+ (MyWidget *)elementForView:(Foo *)view 37{ 38 MyWidget *widget = (void*)0; 39 if (@protocol(MyProto)) { 40 widget = [(id <MyProto>)view widget]; 41 } 42 return widget; 43} 44@end 45 46int main(void) { 47 id view; 48 MyWidget *w = [Container elementForView: view]; 49 50 return 0; 51} 52 53// rdar://15517895 54@class NSObject; 55 56@interface NSProtocolChecker 57+ (id)protocolCheckerWithTarget:(NSObject *)anObject protocol:(Protocol *)aProtocol; 58@end 59 60@protocol NSConnectionVersionedProtocol 61@end 62 63 64@interface NSConnection @end 65 66@implementation NSConnection 67- (void) Meth { 68 [NSProtocolChecker protocolCheckerWithTarget:0 protocol:@protocol(NSConnectionVersionedProtocol)]; 69} 70@end 71 72// CHECK: static struct _protocol_t *_OBJC_PROTOCOL_REFERENCE_$_NSConnectionVersionedProtocol = &_OBJC_PROTOCOL_NSConnectionVersionedProtocol 73// CHECK: sel_registerName("protocolCheckerWithTarget:protocol:"), (NSObject *)0, (Protocol *)_OBJC_PROTOCOL_REFERENCE_$_NSConnectionVersionedProtocol 74