1*67e74705SXin Li// RUN: %clang_cc1 -fobjc-runtime=macosx-10.8 -fsyntax-only -verify %s 2*67e74705SXin Li 3*67e74705SXin Li__attribute__((objc_root_class)) 4*67e74705SXin Li@interface Root @end 5*67e74705SXin Li 6*67e74705SXin Li// These should not get diagnosed immediately. 7*67e74705SXin Li@interface A : Root { 8*67e74705SXin Li __weak id x; 9*67e74705SXin Li} 10*67e74705SXin Li@property __weak id y; 11*67e74705SXin Li@end 12*67e74705SXin Li 13*67e74705SXin Li// Diagnostic goes on the ivar if it's explicit. 14*67e74705SXin Li@interface B : Root { 15*67e74705SXin Li __weak id x; // expected-error {{cannot create __weak reference in file using manual reference counting}} 16*67e74705SXin Li} 17*67e74705SXin Li@property __weak id x; 18*67e74705SXin Li@end 19*67e74705SXin Li@implementation B 20*67e74705SXin Li@synthesize x; 21*67e74705SXin Li@end 22*67e74705SXin Li 23*67e74705SXin Li// Otherwise, it goes with the @synthesize. 24*67e74705SXin Li@interface C : Root 25*67e74705SXin Li@property __weak id x; // expected-note {{property declared here}} 26*67e74705SXin Li@end 27*67e74705SXin Li@implementation C 28*67e74705SXin Li@synthesize x; // expected-error {{cannot synthesize weak property in file using manual reference counting}} 29*67e74705SXin Li@end 30*67e74705SXin Li 31*67e74705SXin Li@interface D : Root 32*67e74705SXin Li@property __weak id x; // expected-note {{property declared here}} 33*67e74705SXin Li@end 34*67e74705SXin Li@implementation D // expected-error {{cannot synthesize weak property in file using manual reference counting}} 35*67e74705SXin Li@end 36*67e74705SXin Li 37*67e74705SXin Li@interface E : Root { 38*67e74705SXin Li@public 39*67e74705SXin Li __weak id x; // expected-note 2 {{declaration uses __weak, but ARC is disabled}} 40*67e74705SXin Li} 41*67e74705SXin Li@end 42*67e74705SXin Li 43*67e74705SXin Livoid testE(E *e) { 44*67e74705SXin Li id x = e->x; // expected-error {{'x' is unavailable}} 45*67e74705SXin Li e->x = x; // expected-error {{'x' is unavailable}} 46*67e74705SXin Li} 47*67e74705SXin Li 48*67e74705SXin Li@interface F : Root 49*67e74705SXin Li@property (weak) id x; 50*67e74705SXin Li@end 51*67e74705SXin Li 52*67e74705SXin Livoid testF(F *f) { 53*67e74705SXin Li id x = f.x; 54*67e74705SXin Li} 55