// RUN: %clang_cc1 -triple x86_64-apple-macosx10.6 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-macosx10.6 -fsyntax-only -fobjc-gc-only -x objective-c %s > %t
// RUN: diff %t %s.result
// RUN: arcmt-test --args -triple x86_64-apple-macosx10.6 -fsyntax-only -fobjc-gc-only -x objective-c++ %s > %t
// RUN: diff %t %s.result

#include "Common.h"
#include "GC.h"

void test1(CFTypeRef *cft) {
  id x = CFBridgingRelease(cft);
}

@interface I1
@end

@implementation I1
-(void)dealloc {
  // dealloc
  test1(0);
}

@end

@interface I2
@property (strong) id prop;
@end

@implementation I2
@synthesize prop;

-(void)dealloc {
  // finalize
  test1(0);
}
@end

__attribute__((objc_arc_weak_reference_unavailable))
@interface QQ {
  __unsafe_unretained id s;
  __unsafe_unretained QQ *q;
}
@end

@interface I3
@property (unsafe_unretained) I3 * pw1, * pw2;
@property (strong) I3 * ps;
@property (assign) I3 * pds;
@end

@interface I4Impl {
  I4Impl *__strong pds2;
}
@property (unsafe_unretained) I4Impl * pw1, * pw2;
@property (strong) I4Impl * ps;
@property (strong) I4Impl * pds;
@property (strong) I4Impl * pds2;
@end

@implementation I4Impl
@synthesize pw1, pw2, ps, pds, pds2;

-(void)test1:(CFTypeRef *)cft {
  id x = CFBridgingRelease(cft);
}
@end

@interface I5 {
  __unsafe_unretained id prop;
}
@property (unsafe_unretained, readonly)  id prop;
@end
