// 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
// DISABLE: mingw32

#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
