|  | // RUN: %clang_cc1 -fblocks -fsyntax-only -verify -Wno-objc-root-class %s | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | @interface NSObject | 
|  | - (id)self; | 
|  | - (id)copy; | 
|  | @end | 
|  |  | 
|  | typedef struct _foo  *__attribute__((NSObject)) Foo_ref; | 
|  |  | 
|  | @interface TestObject { | 
|  | Foo_ref dict; | 
|  | } | 
|  | @property(retain) Foo_ref dict; | 
|  | @end | 
|  |  | 
|  | @implementation TestObject | 
|  | @synthesize dict; | 
|  | @end | 
|  |  | 
|  | @interface NSDictionary | 
|  | - (int)retainCount; | 
|  | @end | 
|  |  | 
|  | int main(int argc, char *argv[]) { | 
|  | NSDictionary *dictRef; | 
|  | Foo_ref foo = (Foo_ref)dictRef; | 
|  |  | 
|  | // do Properties retain? | 
|  | int before = [dictRef retainCount]; | 
|  | int after = [dictRef retainCount]; | 
|  |  | 
|  | if ([foo retainCount] != [dictRef retainCount]) { | 
|  | } | 
|  |  | 
|  | // do Blocks retain? | 
|  | { | 
|  | void (^block)(void) = ^{ | 
|  | [foo self]; | 
|  | }; | 
|  | before = [foo retainCount]; | 
|  | id save = [block copy]; | 
|  | after = [foo retainCount]; | 
|  | if (after <= before) { | 
|  | ; | 
|  | } | 
|  | } | 
|  | return 0; | 
|  | } |