xref: /llvm-project/clang/test/SemaObjC/nsobject-attribute-1.m (revision c6e68daac0fa6e77a89f3ca72f266a528503dd1c)
1acfbe9e1SPatrick Beard// RUN: %clang_cc1 -fblocks -fsyntax-only -verify -Wno-objc-root-class %s
2*c6e68daaSAndy Gibbs// expected-no-diagnostics
38c46fec4SFariborz Jahanian
48c46fec4SFariborz Jahanian@interface NSObject
58c46fec4SFariborz Jahanian- (id)self;
68c46fec4SFariborz Jahanian- (id)copy;
78c46fec4SFariborz Jahanian@end
88c46fec4SFariborz Jahanian
98c46fec4SFariborz Jahaniantypedef struct _foo  *__attribute__((NSObject)) Foo_ref;
108c46fec4SFariborz Jahanian
118c46fec4SFariborz Jahanian@interface TestObject {
128c46fec4SFariborz Jahanian    Foo_ref dict;
138c46fec4SFariborz Jahanian}
148c46fec4SFariborz Jahanian@property(retain) Foo_ref dict;
158c46fec4SFariborz Jahanian@end
168c46fec4SFariborz Jahanian
178c46fec4SFariborz Jahanian@implementation TestObject
188c46fec4SFariborz Jahanian@synthesize dict;
198c46fec4SFariborz Jahanian@end
208c46fec4SFariborz Jahanian
218c46fec4SFariborz Jahanian@interface NSDictionary
228c46fec4SFariborz Jahanian- (int)retainCount;
238c46fec4SFariborz Jahanian@end
248c46fec4SFariborz Jahanian
258c46fec4SFariborz Jahanianint main(int argc, char *argv[]) {
268c46fec4SFariborz Jahanian    NSDictionary *dictRef;
278c46fec4SFariborz Jahanian    Foo_ref foo = (Foo_ref)dictRef;
288c46fec4SFariborz Jahanian
298c46fec4SFariborz Jahanian    // do Properties retain?
308c46fec4SFariborz Jahanian    int before = [dictRef retainCount];
318c46fec4SFariborz Jahanian    int after = [dictRef retainCount];
328c46fec4SFariborz Jahanian
338c46fec4SFariborz Jahanian    if ([foo retainCount] != [dictRef retainCount]) {
348c46fec4SFariborz Jahanian    }
358c46fec4SFariborz Jahanian
368c46fec4SFariborz Jahanian    // do Blocks retain?
378c46fec4SFariborz Jahanian    {
388c46fec4SFariborz Jahanian        void (^block)(void) = ^{
398c46fec4SFariborz Jahanian            [foo self];
408c46fec4SFariborz Jahanian        };
418c46fec4SFariborz Jahanian        before = [foo retainCount];
428c46fec4SFariborz Jahanian        id save = [block copy];
438c46fec4SFariborz Jahanian        after = [foo retainCount];
448c46fec4SFariborz Jahanian        if (after <= before) {
458c46fec4SFariborz Jahanian            ;
468c46fec4SFariborz Jahanian        }
478c46fec4SFariborz Jahanian    }
488c46fec4SFariborz Jahanian    return 0;
498c46fec4SFariborz Jahanian}
50