| // RUN: clang -cc1 -rewrite-objc %s -o - |
| |
| typedef struct MyWidget { |
| int a; |
| } MyWidget; |
| |
| MyWidget gWidget = { 17 }; |
| |
| @protocol MyProto |
| - (MyWidget *)widget; |
| @end |
| |
| @interface Foo |
| @end |
| |
| @interface Bar: Foo <MyProto> |
| @end |
| |
| @interface Container |
| + (MyWidget *)elementForView:(Foo *)view; |
| @end |
| |
| @implementation Foo |
| @end |
| |
| @implementation Bar |
| - (MyWidget *)widget { |
| return &gWidget; |
| } |
| @end |
| |
| @implementation Container |
| + (MyWidget *)elementForView:(Foo *)view |
| { |
| MyWidget *widget = (void*)0; |
| if (@protocol(MyProto)) { |
| widget = [(id <MyProto>)view widget]; |
| } |
| return widget; |
| } |
| @end |
| |
| int main(void) { |
| id view; |
| MyWidget *w = [Container elementForView: view]; |
| |
| return 0; |
| } |