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

#define nil 0

typedef int BOOL;

id IhaveSideEffect(void);

@protocol NSObject
- (BOOL)isEqual:(id)object;
- (id)retain;
- (oneway void)release;
@end

@interface NSObject <NSObject> {}
@end

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

@implementation Foo

@synthesize bar;

-(void)test:(id)obj {
  id x = self.bar;
  self.bar = obj;
  // do stuff with x;

  IhaveSideEffect();

  x = 0;

  @try {
  } @finally {
    x = nil;
  }
}
  
@end

void func(Foo *p) {
}

@interface Baz {
	id <NSObject> _foo;
}
@end

@implementation Baz
@end

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

#define RELEASE_MACRO(x) [x release]
#define RELEASE_MACRO2(x) RELEASE_MACRO(x)

void test2(id p) {
}

@implementation Foo2

static id internal_var = 0;

+ (void)setIt:(id)newone {
    if (internal_var != newone) {
        internal_var = newone;
    }
}
@end
