// RUN: %clang_cc1 -fblocks -fsyntax-only -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-darwin10 -fblocks -fsyntax-only -x objective-c %s > %t
// RUN: diff %t %s.result

#include "Common.h"

id IhaveSideEffect(void);

@interface Foo : NSObject {
  id bar;
}
@property (retain) id bar;
-(id)test:(id)obj;
-(id)something;
@end

#define Something_Macro(key, comment) \
 [[Foo new] something]

@implementation Foo

@synthesize bar;

-(id)something {}

-(id)test:(id)obj {
  id x = self.bar;
  [x retain];
  self.bar = obj;
  if (obj)
    [obj retain];

  [Something_Macro(@"foo", "@bar") retain];

  [IhaveSideEffect() retain];

  [[self something] retain];

  [[self retain] something];

  [[IhaveSideEffect() retain] release];
  [[x retain] release];
  // do stuff with x;
  [x release];
  return [self retain];
}
  
- (id)test1 {
  id x=0;
  ([x retain]);
  return ((([x retain])));
}
@end

id foo (Foo *p) {
    p = [p retain];
    return ([p retain]);
}

void block_tests(Foo *p) {
  id (^B)(void) = ^(void) {
    if (p) {
      id (^IB)(void) = ^(void) {
        id bar = [p retain];
        return bar;
      };
      IB();
    }
    return [p retain];
  };
}
