// 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 -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 -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 {
  __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

void test2(id p, __strong I1 *ap[]) {
  for (__strong I1 *specRule in p) {
  }
}
