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

@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
- dealloc {
  return 0;
}
@end

void block_test(Foo *p) {
  id (^B)() = ^() {
    if (p) {
      id (^IB)() = ^() {
        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
