// 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();

@interface Foo : NSObject {
  id bar;
}
@property (strong) 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;
  self.bar = obj;

  Something_Macro(@"foo", "@bar");

  IhaveSideEffect();

  [self something];

  [self something];

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

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

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