John McCall | 2792fa5 | 2011-03-08 04:17:03 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s |
Anders Carlsson | 6e14a8f | 2008-08-24 16:33:25 +0000 | [diff] [blame] | 2 | static id __attribute((objc_gc(weak))) a; |
| 3 | static id __attribute((objc_gc(strong))) b; |
| 4 | |
Aaron Ballman | 3cd6feb | 2013-07-30 01:31:03 +0000 | [diff] [blame] | 5 | static id __attribute((objc_gc())) c; // expected-error{{'objc_gc' attribute requires a string}} |
| 6 | static id __attribute((objc_gc(123))) d; // expected-error{{'objc_gc' attribute requires a string}} |
Aaron Ballman | baec778 | 2013-07-23 19:30:11 +0000 | [diff] [blame] | 7 | static id __attribute((objc_gc(foo, 456))) e; // expected-error{{'objc_gc' attribute takes one argument}} |
Anders Carlsson | 6e14a8f | 2008-08-24 16:33:25 +0000 | [diff] [blame] | 8 | static id __attribute((objc_gc(hello))) f; // expected-warning{{'objc_gc' attribute argument not supported: 'hello'}} |
John McCall | 2792fa5 | 2011-03-08 04:17:03 +0000 | [diff] [blame] | 9 | |
| 10 | static int __attribute__((objc_gc(weak))) g; // expected-warning {{'objc_gc' only applies to pointer types; type here is 'int'}} |
| 11 | |
| 12 | static __weak int h; // expected-warning {{'__weak' only applies to pointer types; type here is 'int'}} |
John McCall | 834e3f6 | 2011-03-08 07:59:04 +0000 | [diff] [blame] | 13 | |
| 14 | // TODO: it would be great if this reported as __weak |
| 15 | #define WEAK __weak |
| 16 | static WEAK int h; // expected-warning {{'objc_gc' only applies to pointer types; type here is 'int'}} |
| 17 | |
| 18 | /* expected-warning {{'__weak' only applies to pointer types; type here is 'int'}}*/ static __we\ |
| 19 | ak int i; |
John McCall | 2234873 | 2011-03-26 02:56:45 +0000 | [diff] [blame] | 20 | |
| 21 | // rdar://problem/9126213 |
| 22 | void test2(id __attribute((objc_gc(strong))) *strong, |
| 23 | id __attribute((objc_gc(weak))) *weak) { |
| 24 | void *opaque; |
| 25 | opaque = strong; |
| 26 | strong = opaque; |
| 27 | |
| 28 | opaque = weak; |
| 29 | weak = opaque; |
| 30 | } |