Mercurial > hg > CbC > CbC_llvm
comparison clang/test/SemaCXX/attr-gsl-owner-pointer.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clang_cc1 -verify -ast-dump %s | \ | |
2 // RUN: FileCheck --implicit-check-not OwnerAttr --implicit-check-not PointerAttr %s | |
3 | |
4 int [[gsl::Owner]] i; | |
5 // expected-error@-1 {{'Owner' attribute cannot be applied to types}} | |
6 void [[gsl::Owner]] f(); | |
7 // expected-error@-1 {{'Owner' attribute cannot be applied to types}} | |
8 | |
9 [[gsl::Owner]] void f(); | |
10 // expected-warning@-1 {{'Owner' attribute only applies to structs}} | |
11 | |
12 union [[gsl::Owner(int)]] Union{}; | |
13 // expected-warning@-1 {{'Owner' attribute only applies to structs}} | |
14 | |
15 struct S { | |
16 }; | |
17 | |
18 S [[gsl::Owner]] Instance; | |
19 // expected-error@-1 {{'Owner' attribute cannot be applied to types}} | |
20 | |
21 class [[gsl::Owner(7)]] OwnerDerefNoType{}; | |
22 // expected-error@-1 {{expected a type}} | |
23 | |
24 class [[gsl::Pointer("int")]] PointerDerefNoType{}; | |
25 // expected-error@-1 {{expected a type}} | |
26 | |
27 class [[gsl::Owner(int)]] [[gsl::Pointer(int)]] BothOwnerPointer{}; | |
28 // expected-error@-1 {{'Pointer' and 'Owner' attributes are not compatible}} | |
29 // expected-note@-2 {{conflicting attribute is here}} | |
30 // CHECK: CXXRecordDecl {{.*}} BothOwnerPointer | |
31 // CHECK: OwnerAttr {{.*}} int | |
32 | |
33 class [[gsl::Owner(void)]] OwnerVoidDerefType{}; | |
34 // CHECK: CXXRecordDecl {{.*}} OwnerVoidDerefType | |
35 // CHECK: OwnerAttr {{.*}} void | |
36 class [[gsl::Pointer(void)]] PointerVoidDerefType{}; | |
37 // CHECK: CXXRecordDecl {{.*}} PointerVoidDerefType | |
38 // CHECK: PointerAttr {{.*}} void | |
39 | |
40 class [[gsl::Pointer(int)]] AddConflictLater{}; | |
41 // CHECK: CXXRecordDecl {{.*}} AddConflictLater | |
42 // CHECK: PointerAttr {{.*}} int | |
43 class [[gsl::Owner(int)]] AddConflictLater; | |
44 // expected-error@-1 {{'Owner' and 'Pointer' attributes are not compatible}} | |
45 // expected-note@-5 {{conflicting attribute is here}} | |
46 // CHECK: CXXRecordDecl {{.*}} AddConflictLater | |
47 // CHECK: PointerAttr {{.*}} Inherited int | |
48 | |
49 class [[gsl::Owner(int)]] AddConflictLater2{}; | |
50 // CHECK: CXXRecordDecl {{.*}} AddConflictLater2 | |
51 // CHECK: OwnerAttr {{.*}} int | |
52 class [[gsl::Owner(float)]] AddConflictLater2; | |
53 // expected-error@-1 {{'Owner' and 'Owner' attributes are not compatible}} | |
54 // expected-note@-5 {{conflicting attribute is here}} | |
55 // CHECK: CXXRecordDecl {{.*}} AddConflictLater | |
56 // CHECK: OwnerAttr {{.*}} Inherited int | |
57 | |
58 class [[gsl::Owner()]] [[gsl::Owner(int)]] WithAndWithoutParameter{}; | |
59 // expected-error@-1 {{'Owner' and 'Owner' attributes are not compatible}} | |
60 // expected-note@-2 {{conflicting attribute is here}} | |
61 // CHECK: CXXRecordDecl {{.*}} WithAndWithoutParameter | |
62 // CHECK: OwnerAttr | |
63 | |
64 class [[gsl::Owner(int &)]] ReferenceType{}; | |
65 // expected-error@-1 {{a reference type is an invalid argument to attribute 'Owner'}} | |
66 | |
67 class [[gsl::Pointer(int[])]] ArrayType{}; | |
68 // expected-error@-1 {{an array type is an invalid argument to attribute 'Pointer'}} | |
69 | |
70 class [[gsl::Owner]] OwnerMissingParameter{}; | |
71 // CHECK: CXXRecordDecl {{.*}} OwnerMissingParameter | |
72 // CHECK: OwnerAttr | |
73 | |
74 class [[gsl::Pointer]] PointerMissingParameter{}; | |
75 // CHECK: CXXRecordDecl {{.*}} PointerMissingParameter | |
76 // CHECK: PointerAttr | |
77 | |
78 class [[gsl::Owner()]] OwnerWithEmptyParameterList{}; | |
79 // CHECK: CXXRecordDecl {{.*}} OwnerWithEmptyParameterList | |
80 // CHECK: OwnerAttr {{.*}} | |
81 | |
82 class [[gsl::Pointer()]] PointerWithEmptyParameterList{}; | |
83 // CHECK: CXXRecordDecl {{.*}} PointerWithEmptyParameterList | |
84 // CHECK: PointerAttr {{.*}} | |
85 | |
86 struct [[gsl::Owner(int)]] AnOwner{}; | |
87 // CHECK: CXXRecordDecl {{.*}} AnOwner | |
88 // CHECK: OwnerAttr {{.*}} int | |
89 | |
90 struct S; | |
91 class [[gsl::Pointer(S)]] APointer{}; | |
92 // CHECK: CXXRecordDecl {{.*}} APointer | |
93 // CHECK: PointerAttr {{.*}} S | |
94 | |
95 class [[gsl::Owner(int)]] [[gsl::Owner(int)]] DuplicateOwner{}; | |
96 // CHECK: CXXRecordDecl {{.*}} DuplicateOwner | |
97 // CHECK: OwnerAttr {{.*}} int | |
98 | |
99 class [[gsl::Pointer(int)]] [[gsl::Pointer(int)]] DuplicatePointer{}; | |
100 // CHECK: CXXRecordDecl {{.*}} DuplicatePointer | |
101 // CHECK: PointerAttr {{.*}} int | |
102 | |
103 class [[gsl::Owner(int)]] AddTheSameLater{}; | |
104 // CHECK: CXXRecordDecl {{.*}} AddTheSameLater | |
105 // CHECK: OwnerAttr {{.*}} int | |
106 | |
107 class [[gsl::Owner(int)]] AddTheSameLater; | |
108 // CHECK: CXXRecordDecl {{.*}} prev {{.*}} AddTheSameLater | |
109 // CHECK: OwnerAttr {{.*}} int | |
110 | |
111 template <class T> | |
112 class [[gsl::Owner]] ForwardDeclared; | |
113 // CHECK: ClassTemplateDecl {{.*}} ForwardDeclared | |
114 // CHECK: OwnerAttr {{.*}} | |
115 // CHECK: ClassTemplateSpecializationDecl {{.*}} ForwardDeclared | |
116 // CHECK: TemplateArgument type 'int' | |
117 // CHECK: OwnerAttr {{.*}} | |
118 | |
119 template <class T> | |
120 class [[gsl::Owner]] ForwardDeclared { | |
121 // CHECK: ClassTemplateDecl {{.*}} ForwardDeclared | |
122 // CHECK: CXXRecordDecl {{.*}} ForwardDeclared definition | |
123 // CHECK: OwnerAttr {{.*}} | |
124 }; | |
125 | |
126 static_assert(sizeof(ForwardDeclared<int>), ""); // Force instantiation. |