blob: 37ed54b1dee122acc32a72c3d97f9ddd069ce06a [file] [log] [blame]
Aaron Ballmanbaea55c2018-12-04 21:50:08 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -std=c++17 -ast-dump %s | FileCheck -strict-whitespace %s
2
3void f() {
4 auto IsNotGenericLambda = [](){};
5 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:29> col:29 implicit class definition
6 // CHECK-NOT: DefinitionData {{.*}}generic{{.*}}
7 // CHECK-NEXT: DefinitionData {{.*}}lambda{{.*}}
8 auto IsGenericLambda = [](auto){};
9 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <col:26> col:26 implicit class definition
10 // CHECK-NEXT: DefinitionData {{.*}}generic{{.*}}lambda{{.*}}
11}
12
13struct CanPassInRegisters {
14 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CanPassInRegisters definition
15 // CHECK-NEXT: DefinitionData {{.*}}pass_in_registers{{.*}}
16 CanPassInRegisters(const CanPassInRegisters&) = default;
17};
18
19struct CantPassInRegisters {
20 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct CantPassInRegisters definition
21 // CHECK-NOT: DefinitionData {{.*}}pass_in_registers{{.*}}
22 CantPassInRegisters(const CantPassInRegisters&) = delete;
23};
24
25struct IsEmpty {
26 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsEmpty definition
27 // CHECK-NEXT: DefinitionData {{.*}}empty{{.*}}
28};
29
30struct IsNotEmpty {
31 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotEmpty definition
32 // CHECK-NOT: DefinitionData {{.*}}empty{{.*}}
33 int a;
34};
35
36struct IsAggregate {
37 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAggregate definition
38 // CHECK-NEXT: DefinitionData {{.*}}aggregate{{.*}}
39 int a;
40};
41
42struct IsNotAggregate {
43 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+4]]:1> line:[[@LINE-1]]:8 struct IsNotAggregate definition
44 // CHECK-NOT: DefinitionData {{.*}}aggregate{{.*}}
45private:
46 int a;
47};
48
49struct IsStandardLayout {
50 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsStandardLayout definition
51 // CHECK-NEXT: DefinitionData {{.*}}standard_layout{{.*}}
52 void f();
53};
54
55struct IsNotStandardLayout {
56 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotStandardLayout definition
57 // CHECK-NOT: DefinitionData {{.*}}standard_layout{{.*}}
58 virtual void f();
59};
60
61struct IsTriviallyCopyable {
62 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct IsTriviallyCopyable definition
63 // CHECK-NEXT: DefinitionData {{.*}}trivially_copyable{{.*}}
64};
65
66struct IsNotTriviallyCopyable {
67 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTriviallyCopyable definition
68 // CHECK-NOT: DefinitionData {{.*}}trivially_copyable{{.*}}
69 IsNotTriviallyCopyable(const IsNotTriviallyCopyable&) {}
70};
71
72struct IsPOD {
73 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPOD definition
74 // CHECK-NEXT: DefinitionData {{.*}}pod{{.*}}
75 int a;
76};
77
78struct IsNotPOD {
79 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPOD definition
80 // CHECK-NOT: DefinitionData {{.*}}pod{{.*}}
81 int &a;
82};
83
84struct IsTrivial {
85 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsTrivial definition
86 // CHECK-NEXT: DefinitionData {{.*}}trivial {{.*}}
87 IsTrivial() = default;
88};
89
90struct IsNotTrivial {
91 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotTrivial definition
92 // CHECK-NOT: DefinitionData {{.*}}trivial {{.*}}
93 IsNotTrivial() {}
94};
95
96struct IsPolymorphic {
97 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsPolymorphic definition
98 // CHECK-NEXT: DefinitionData {{.*}}polymorphic{{.*}}
99 virtual void f();
100};
101
102struct IsNotPolymorphic {
103 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotPolymorphic definition
104 // CHECK-NOT: DefinitionData {{.*}}polymorphic{{.*}}
105 void f();
106};
107
108struct IsAbstract {
109 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsAbstract definition
110 // CHECK-NEXT: DefinitionData {{.*}}abstract{{.*}}
111 virtual void f() = 0;
112};
113
114struct IsNotAbstract {
115 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotAbstract definition
116 // CHECK-NOT: DefinitionData {{.*}}abstract{{.*}}
117 virtual void f();
118};
119
120struct IsLiteral {
121 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsLiteral definition
122 // CHECK-NEXT: DefinitionData {{.*}}literal{{.*}}
123 ~IsLiteral() = default;
124};
125
126struct IsNotLiteral {
127 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct IsNotLiteral definition
128 // CHECK-NOT: DefinitionData {{.*}}literal{{.*}}
129 ~IsNotLiteral() {}
130};
131
132struct HasUserDeclaredConstructor {
133 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasUserDeclaredConstructor definition
134 // CHECK-NEXT: DefinitionData {{.*}}has_user_declared_ctor{{.*}}
135 HasUserDeclaredConstructor() {}
136};
137
138struct HasNoUserDeclaredConstructor {
139 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoUserDeclaredConstructor definition
140 // CHECK-NOT: DefinitionData {{.*}}has_user_declared_ctor{{.*}}
141};
142
143struct HasConstexprNonCopyMoveConstructor {
144 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasConstexprNonCopyMoveConstructor definition
145 // CHECK-NEXT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}}
146 constexpr HasConstexprNonCopyMoveConstructor() {}
147};
148
149struct HasNoConstexprNonCopyMoveConstructor {
150 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoConstexprNonCopyMoveConstructor definition
151 // CHECK-NOT: DefinitionData {{.*}}has_constexpr_non_copy_move_ctor{{.*}}
152 HasNoConstexprNonCopyMoveConstructor() {}
153};
154
155struct HasMutableFields {
156 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasMutableFields definition
157 // CHECK-NEXT: DefinitionData {{.*}}has_mutable_fields{{.*}}
158 mutable int i;
159};
160
161struct HasNoMutableFields {
162 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct HasNoMutableFields definition
163 // CHECK-NOT: DefinitionData {{.*}}has_mutable_fields{{.*}}
164 int i;
165};
166
167struct HasVariantMembers {
168 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+5]]:1> line:[[@LINE-1]]:8 struct HasVariantMembers definition
169 // CHECK-NEXT: DefinitionData {{.*}}has_variant_members{{.*}}
170 union {
171 int i;
172 };
173};
174
175struct HasNoVariantMembers {
176 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+2]]:1> line:[[@LINE-1]]:8 struct HasNoVariantMembers definition
177 // CHECK-NOT: DefinitionData {{.*}}has_variant_members{{.*}}
178};
179
180struct AllowsConstDefaultInit {
181 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct AllowsConstDefaultInit definition
182 // CHECK-NEXT: DefinitionData {{.*}}can_const_default_init{{.*}}
183 int i = 12;
184};
185
186struct DoesNotAllowConstDefaultInit {
187 // CHECK: CXXRecordDecl 0x{{[^ ]*}} <line:[[@LINE-1]]:1, line:[[@LINE+3]]:1> line:[[@LINE-1]]:8 struct DoesNotAllowConstDefaultInit definition
188 // CHECK-NOT: DefinitionData {{.*}}can_const_default_init{{.*}}
189 int i;
190};