| // RUN: clang-cc -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; | 
 | } |