blob: 0c5104fbb56a725fa5efae37b443ca0f6a6ff19d [file] [log] [blame]
Fariborz Jahaniand38951a2013-11-22 18:43:41 +00001// 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
Fariborz Jahanian33c0e812007-12-07 18:47:10 +00005
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}
Fariborz Jahaniand38951a2013-11-22 18:43:41 +000052
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