1// RUN: %clang_cc1 -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result
2// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fblocks -fsyntax-only -x objective-c %s > %t
3// RUN: diff %t %s.result
4
5#include "Common.h"
6
7id IhaveSideEffect();
8
9@interface Foo : NSObject {
10  id bar;
11}
12@property (retain) id bar;
13-(id)test:(id)obj;
14-(id)something;
15@end
16
17#define Something_Macro(key, comment) \
18 [[Foo new] something]
19
20@implementation Foo
21
22@synthesize bar;
23
24-(id)something {}
25
26-(id)test:(id)obj {
27  id x = self.bar;
28  [x retain];
29  self.bar = obj;
30  if (obj)
31    [obj retain];
32
33  [Something_Macro(@"foo", "@bar") retain];
34
35  [IhaveSideEffect() retain];
36
37  [[self something] retain];
38
39  [[self retain] something];
40
41  [[IhaveSideEffect() retain] release];
42  [[x retain] release];
43  // do stuff with x;
44  [x release];
45  return [self retain];
46}
47  
48- (id)test1 {
49  id x=0;
50  ([x retain]);
51  return ((([x retain])));
52}
53@end
54
55id foo (Foo *p) {
56    p = [p retain];
57    return ([p retain]);
58}
59
60void block_tests(Foo *p) {
61  id (^B)() = ^() {
62    if (p) {
63      id (^IB)() = ^() {
64        id bar = [p retain];
65        return bar;
66      };
67      IB();
68    }
69    return [p retain];
70  };
71}
72