| // RUN: %clang_cc1 -fobjc-runtime=macosx-10.8 -fsyntax-only -verify %s |
| |
| __attribute__((objc_root_class)) |
| @interface Root @end |
| |
| // These should not get diagnosed immediately. |
| @interface A : Root { |
| __weak id x; |
| } |
| @property __weak id y; |
| @end |
| |
| // Diagnostic goes on the ivar if it's explicit. |
| @interface B : Root { |
| __weak id x; // expected-error {{cannot create __weak reference in file using manual reference counting}} |
| } |
| @property __weak id x; |
| @end |
| @implementation B |
| @synthesize x; |
| @end |
| |
| // Otherwise, it goes with the @synthesize. |
| @interface C : Root |
| @property __weak id x; // expected-note {{property declared here}} |
| @end |
| @implementation C |
| @synthesize x; // expected-error {{cannot synthesize weak property in file using manual reference counting}} |
| @end |
| |
| @interface D : Root |
| @property __weak id x; // expected-note {{property declared here}} |
| @end |
| @implementation D // expected-error {{cannot synthesize weak property in file using manual reference counting}} |
| @end |
| |
| @interface E : Root { |
| @public |
| __weak id x; // expected-note 2 {{declaration uses __weak, but ARC is disabled}} |
| } |
| @end |
| |
| void testE(E *e) { |
| id x = e->x; // expected-error {{'x' is unavailable}} |
| e->x = x; // expected-error {{'x' is unavailable}} |
| } |
| |
| @interface F : Root |
| @property (weak) id x; |
| @end |
| |
| void testF(F *f) { |
| id x = f.x; |
| } |