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

#include "Common.h"

__attribute__((objc_arc_weak_reference_unavailable))
@interface WeakOptOut
@end

@class _NSCachedAttributedString;
typedef _NSCachedAttributedString *BadClassForWeak;

@class Forw;

@interface Foo : NSObject {
  Foo *__weak x, *__weak w, *__weak q1, *__weak q2;
  WeakOptOut *__unsafe_unretained oo;
  BadClassForWeak __unsafe_unretained bcw;
  id __unsafe_unretained not_safe1;
  NSObject *__unsafe_unretained not_safe2;
  Forw *__unsafe_unretained not_safe3;
  Foo *assign_plus1;
}
@property (weak, readonly) Foo *x;
@property (weak) Foo *w;
@property (weak) Foo *q1, *q2;
@property (unsafe_unretained) WeakOptOut *oo;
@property (unsafe_unretained) BadClassForWeak bcw;
@property (unsafe_unretained) id not_safe1;
@property (unsafe_unretained) NSObject *not_safe2;
@property (unsafe_unretained) Forw *not_safe3;
@property (readonly) Foo *assign_plus1;
@property (readonly) Foo *assign_plus2;
@property (readonly) Foo *assign_plus3;

@property (weak) Foo *no_user_ivar1;
@property (weak, readonly) Foo *no_user_ivar2;

@property (strong) id def1;
@property (atomic,strong) id def2;
@property (strong,atomic) id def3;

@end

@implementation Foo
@synthesize x,w,q1,q2,oo,bcw,not_safe1,not_safe2,not_safe3;
@synthesize no_user_ivar1, no_user_ivar2;
@synthesize assign_plus1, assign_plus2, assign_plus3;
@synthesize def1, def2, def3;

-(void)test:(Foo *)parm {
  assign_plus1 = [[Foo alloc] init];
  assign_plus2 = [Foo new];
  assign_plus3 = parm;
}
@end

@interface TestExt
@property (strong,readonly) TestExt *x1;
@property (weak, readonly) TestExt *x2;
@end

@interface TestExt()
@property (strong,readwrite) TestExt *x1;
@property (weak, readwrite) TestExt *x2;
@property (strong) TestExt *x3;
@end

@implementation TestExt
@synthesize x1, x2, x3;
@end
