// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -x objective-c %s.result
// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -x objective-c %s > %t
// RUN: diff %t %s.result
// RUN: arcmt-test --args -triple x86_64-apple-macosx10.7 -fsyntax-only -fobjc-gc-only -no-finalize-removal -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);
}

#if !__has_feature(objc_arc)
-(void)finalize {
  // finalize
  test1(0);
}
#endif
@end

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

@implementation I2
@synthesize prop;

#if !__has_feature(objc_arc)
-(void)finalize {
  self.prop = 0;
  // finalize
  test1(0);
}
#endif
-(void)dealloc {
  // finalize
  test1(0);
}
@end

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

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

@interface I4Impl {
  I4Impl *__strong pds2;
  I4Impl *pds3;
  __weak I4Impl *pw3;
  __weak I4Impl *pw4;
}
@property (weak) I4Impl * pw1, * pw2;
@property (strong) I4Impl * ps;
@property (strong) I4Impl * pds;
@property (strong) I4Impl * pds2;
@property (readwrite) I4Impl * pds3;
@property (readonly) I4Impl * pds4;
@property (weak, readonly)  I4Impl *pw3;
@property (weak)  I4Impl *pw4;
@end

@implementation I4Impl
@synthesize pw1, pw2, pw3, pw4, ps, pds, pds2, pds3, pds4;

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

// rdar://10532449
@interface rdar10532449
@property (strong) id assign_prop;
@property (strong, readonly) id  strong_readonly_prop;
@property (weak) id  weak_prop;
@end

@implementation rdar10532449
@synthesize assign_prop, strong_readonly_prop, weak_prop;
@end
