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