[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / ARCMT / cxx-checking.mm
blobf8836d9d7cd8df174ef1fa7d995b1329c363faf5
1 // RUN: %clang_cc1 -arcmt-action=check -verify -triple x86_64-apple-darwin10 -fsyntax-only -fblocks %s
3 // Classes that have an Objective-C object pointer.
4 struct HasObjectMember0 {
5   id x;
6 };
8 struct HasObjectMember1 {
9   id x[3];
12 struct HasObjectMember2 {
13   id x[3][2];
16 // Don't complain if the type has non-external linkage
17 namespace {
18   struct HasObjectMember3 {
19     id x[3][2];
20   };
23 // Don't complain if the Objective-C pointer type was explicitly given
24 // no lifetime.
25 struct HasObjectMember3 { 
26   __unsafe_unretained id x[3][2];
29 struct HasBlockPointerMember0 {
30   int (^bp)(int);
33 struct HasBlockPointerMember1 {
34   int (^bp[2][3])(int);
37 struct NonPOD {
38   NonPOD(const NonPOD&);
41 struct HasObjectMemberAndNonPOD0 {
42   id x;
43   NonPOD np;
46 struct HasObjectMemberAndNonPOD1 {
47   NonPOD np;
48   id x[3];
51 struct HasObjectMemberAndNonPOD2 {
52   NonPOD np;
53   id x[3][2];
56 struct HasObjectMemberAndNonPOD3 {
57   HasObjectMemberAndNonPOD3 &operator=(const HasObjectMemberAndNonPOD3&);
58   ~HasObjectMemberAndNonPOD3();
59   NonPOD np;
60   id x[3][2];
63 struct HasBlockPointerMemberAndNonPOD0 {
64   NonPOD np;
65   int (^bp)(int);
68 struct HasBlockPointerMemberAndNonPOD1 {
69   NonPOD np;
70   int (^bp[2][3])(int);
73 int check_non_pod_objc_pointer0[__is_pod(id)? 1 : -1];
74 int check_non_pod_objc_pointer1[__is_pod(__strong id)? -1 : 1];
75 int check_non_pod_objc_pointer2[__is_pod(__unsafe_unretained id)? 1 : -1];
76 int check_non_pod_objc_pointer3[__is_pod(id[2][3])? 1 : -1];
77 int check_non_pod_objc_pointer4[__is_pod(__unsafe_unretained id[2][3])? 1 : -1];
78 int check_non_pod_block0[__is_pod(int (^)(int))? 1 : -1];
79 int check_non_pod_block1[__is_pod(int (^ __unsafe_unretained)(int))? 1 : -1];
81 struct FlexibleArrayMember0 {
82   int length;
83   id array[]; // expected-error{{flexible array member 'array' of type '__strong id[]' with non-trivial destruction}}
86 struct FlexibleArrayMember1 {
87   int length;
88   __unsafe_unretained id array[];
91 // It's okay to pass a retainable type through an ellipsis.
92 void variadic(...);
93 void test_variadic() {
94   variadic(1, 17, @"Foo");
97 // It's okay to create a VLA of retainable types.
98 void vla(int n) {
99   id vla[n];