1*67e74705SXin Li// RUN: %clang_cc1 -fblocks -fsyntax-only -verify -Wno-objc-root-class %s 2*67e74705SXin Li// expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li@interface NSObject 5*67e74705SXin Li- (id)self; 6*67e74705SXin Li- (id)copy; 7*67e74705SXin Li@end 8*67e74705SXin Li 9*67e74705SXin Litypedef struct _foo *__attribute__((NSObject)) Foo_ref; 10*67e74705SXin Li 11*67e74705SXin Li@interface TestObject { 12*67e74705SXin Li Foo_ref dict; 13*67e74705SXin Li} 14*67e74705SXin Li@property(retain) Foo_ref dict; 15*67e74705SXin Li@end 16*67e74705SXin Li 17*67e74705SXin Li@implementation TestObject 18*67e74705SXin Li@synthesize dict; 19*67e74705SXin Li@end 20*67e74705SXin Li 21*67e74705SXin Li@interface NSDictionary 22*67e74705SXin Li- (int)retainCount; 23*67e74705SXin Li@end 24*67e74705SXin Li 25*67e74705SXin Liint main(int argc, char *argv[]) { 26*67e74705SXin Li NSDictionary *dictRef; 27*67e74705SXin Li Foo_ref foo = (Foo_ref)dictRef; 28*67e74705SXin Li 29*67e74705SXin Li // do Properties retain? 30*67e74705SXin Li int before = [dictRef retainCount]; 31*67e74705SXin Li int after = [dictRef retainCount]; 32*67e74705SXin Li 33*67e74705SXin Li if ([foo retainCount] != [dictRef retainCount]) { 34*67e74705SXin Li } 35*67e74705SXin Li 36*67e74705SXin Li // do Blocks retain? 37*67e74705SXin Li { 38*67e74705SXin Li void (^block)(void) = ^{ 39*67e74705SXin Li [foo self]; 40*67e74705SXin Li }; 41*67e74705SXin Li before = [foo retainCount]; 42*67e74705SXin Li id save = [block copy]; 43*67e74705SXin Li after = [foo retainCount]; 44*67e74705SXin Li if (after <= before) { 45*67e74705SXin Li ; 46*67e74705SXin Li } 47*67e74705SXin Li } 48*67e74705SXin Li return 0; 49*67e74705SXin Li} 50