| John McCall | ed14ad2 | 2011-03-08 04:17:03 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify %s |
| Anders Carlsson | c7c2070 | 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 | 3bf758c | 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 | b724338 | 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 | c7c2070 | 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 | ed14ad2 | 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 | |
| John McCall | 460ce58 | 2015-10-22 18:38:17 +0000 | [diff] [blame] | 12 | static __weak int h; // expected-warning {{'__weak' only applies to Objective-C object or block pointer types; type here is 'int'}} |
| John McCall | 462c055 | 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 |
| John McCall | 460ce58 | 2015-10-22 18:38:17 +0000 | [diff] [blame] | 16 | static WEAK int h; // expected-warning {{'objc_ownership' only applies to Objective-C object or block pointer types; type here is 'int'}} |
| John McCall | 462c055 | 2011-03-08 07:59:04 +0000 | [diff] [blame] | 17 | |
| John McCall | 460ce58 | 2015-10-22 18:38:17 +0000 | [diff] [blame] | 18 | /* expected-warning {{'__weak' only applies to Objective-C object or block pointer types; type here is 'int'}}*/ static __we\ |
| John McCall | 462c055 | 2011-03-08 07:59:04 +0000 | [diff] [blame] | 19 | ak int i; |
| John McCall | 7853595 | 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 | } |