1 // Test without serialization: 2 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \ 3 // RUN: -ast-dump %s | FileCheck -strict-whitespace %s 4 5 // Test with serialization: 6 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \ 7 // RUN: -emit-pch -o %t %s 8 // RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \ 9 // RUN: -x c++ -include-pch %t -ast-dump-all | FileCheck -strict-whitespace %s 10 11 // XFAIL: * 12 13 template <typename... Ts> void test(Ts... a) { 14 struct V { 15 void f() { 16 [this] {}; 17 [*this] {}; 18 } 19 }; 20 int b, c; 21 []() {}; 22 [](int a, ...) {}; 23 [a...] {}; 24 [=] {}; 25 [=] { return b; }; 26 [&] {}; 27 [&] { return c; }; 28 [b, &c] { return b + c; }; 29 [a..., x = 12] {}; 30 []() constexpr {}; 31 []() mutable {}; 32 []() noexcept {}; 33 []() -> int { return 0; }; 34 } 35 // CHECK: TranslationUnitDecl {{.*}} <<invalid sloc>> <invalid sloc>{{( <undeserialized declarations>)?}} 36 // CHECK: `-FunctionTemplateDecl {{.*}} <{{.*}}ast-dump-lambda.cpp:13:1, line:34:1> line:13:32{{( imported)?}} test 37 // CHECK-NEXT: |-TemplateTypeParmDecl {{.*}} <col:11, col:23> col:23{{( imported)?}} referenced typename depth 0 index 0 ... Ts 38 // CHECK-NEXT: `-FunctionDecl {{.*}} <col:27, line:34:1> line:13:32{{( imported)?}} test 'void (Ts...)' 39 // CHECK-NEXT: |-ParmVarDecl {{.*}} <col:37, col:43> col:43{{( imported)?}} referenced a 'Ts...' pack 40 // CHECK-NEXT: `-CompoundStmt {{.*}} <col:46, line:34:1> 41 // CHECK-NEXT: |-DeclStmt {{.*}} <line:14:3, line:19:4> 42 // CHECK-NEXT: | `-CXXRecordDecl {{.*}} <line:14:3, line:19:3> line:14:10{{( imported)?}}{{( <undeserialized declarations>)?}} struct V definition 43 // CHECK-NEXT: | |-DefinitionData empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init 44 // CHECK-NEXT: | | |-DefaultConstructor exists trivial constexpr needs_implicit defaulted_is_constexpr 45 // CHECK-NEXT: | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 46 // CHECK-NEXT: | | |-MoveConstructor exists simple trivial needs_implicit 47 // CHECK-NEXT: | | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param 48 // CHECK-NEXT: | | |-MoveAssignment exists simple trivial needs_implicit 49 // CHECK-NEXT: | | `-Destructor simple irrelevant trivial needs_implicit 50 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3, col:10> col:10{{( imported)?}} implicit struct V 51 // CHECK-NEXT: | `-CXXMethodDecl {{.*}} <line:15:5, line:18:5> line:15:10{{( imported)?}} f 'void ()' 52 // CHECK-NEXT: | `-CompoundStmt {{.*}} <col:14, line:18:5> 53 // CHECK-NEXT: | |-LambdaExpr {{.*}} <line:16:7, col:15> '(lambda at {{.*}}ast-dump-lambda.cpp:16:7)' 54 // CHECK-NEXT: | | |-CXXRecordDecl {{.*}} <col:7> col:7{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 55 // CHECK-NEXT: | | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init 56 // CHECK-NEXT: | | | | |-DefaultConstructor 57 // CHECK-NEXT: | | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 58 // CHECK-NEXT: | | | | |-MoveConstructor exists simple trivial needs_implicit 59 // CHECK-NEXT: | | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 60 // CHECK-NEXT: | | | | |-MoveAssignment 61 // CHECK-NEXT: | | | | `-Destructor simple irrelevant trivial needs_implicit 62 // CHECK-NEXT: | | | |-CXXMethodDecl {{.*}} <col:12, col:15> col:7{{( imported)?}} operator() 'auto () const -> auto' inline 63 // CHECK-NEXT: | | | | `-CompoundStmt {{.*}} <col:14, col:15> 64 // CHECK-NEXT: | | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'V *' 65 // CHECK-NEXT: | | |-ParenListExpr {{.*}} <col:8> 'NULL TYPE' 66 // CHECK-NEXT: | | | `-CXXThisExpr {{.*}} <col:8> 'V *' this 67 // CHECK-NEXT: | | `-<<<NULL>>> 68 // CHECK-NEXT: | `-LambdaExpr {{.*}} <line:17:7, col:16> '(lambda at {{.*}}ast-dump-lambda.cpp:17:7)' 69 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:7> col:7{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 70 // CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init 71 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 72 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 73 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 74 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 75 // CHECK-NEXT: | | | |-MoveAssignment 76 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 77 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:13, col:16> col:7{{( imported)?}} operator() 'auto () const -> auto' inline 78 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:15, col:16> 79 // CHECK-NEXT: | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'V' 80 // CHECK-NEXT: | |-ParenListExpr {{.*}} <col:8> 'NULL TYPE' 81 // CHECK-NEXT: | | `-UnaryOperator {{.*}} <col:8> '<dependent type>' prefix '*' cannot overflow 82 // CHECK-NEXT: | | `-CXXThisExpr {{.*}} <col:8> 'V *' this 83 // CHECK-NEXT: | `-<<<NULL>>> 84 // CHECK-NEXT: |-DeclStmt {{.*}} <line:20:3, col:11> 85 // CHECK-NEXT: | |-VarDecl {{.*}} <col:3, col:7> col:7{{( imported)?}} referenced b 'int' 86 // CHECK-NEXT: | `-VarDecl {{.*}} <col:3, col:10> col:10{{( imported)?}} referenced c 'int' 87 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:21:3, col:9> '(lambda at {{.*}}ast-dump-lambda.cpp:21:3)' 88 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 89 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 90 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 91 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 92 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 93 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 94 // CHECK-NEXT: | | | |-MoveAssignment 95 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 96 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:6, col:9> col:3{{( imported)?}} operator() 'auto () const' inline 97 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:8, col:9> 98 // CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:9> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline 99 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:9> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline 100 // CHECK-NEXT: | `-<<<NULL>>> 101 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:22:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:22:3)' 102 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 103 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 104 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 105 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 106 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 107 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 108 // CHECK-NEXT: | | | |-MoveAssignment 109 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 110 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:16, col:19> col:3{{( imported)?}} operator() 'auto (int, ...) const' inline 111 // CHECK-NEXT: | | | |-ParmVarDecl {{.*}} <col:6, col:10> col:10{{( imported)?}} a 'int' 112 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19> 113 // CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit constexpr operator auto (*)(int, ...) 'auto (*() const noexcept)(int, ...)' inline 114 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit __invoke 'auto (int, ...)' static inline 115 // CHECK-NEXT: | | `-ParmVarDecl {{.*}} <col:6, col:10> col:10{{( imported)?}} a 'int' 116 // CHECK-NEXT: | `-<<<NULL>>> 117 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:23:3, col:11> '(lambda at {{.*}}ast-dump-lambda.cpp:23:3)' 118 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 119 // CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init 120 // CHECK-NEXT: | | | |-DefaultConstructor 121 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 122 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 123 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 124 // CHECK-NEXT: | | | |-MoveAssignment 125 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 126 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:11> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 127 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:10, col:11> 128 // CHECK-NEXT: | | `-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'Ts...' 129 // CHECK-NEXT: | |-ParenListExpr {{.*}} <col:4> 'NULL TYPE' 130 // CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'Ts...' lvalue ParmVar {{.*}} 'a' 'Ts...' 131 // CHECK-NEXT: | `-<<<NULL>>> 132 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:24:3, col:8> '(lambda at {{.*}}ast-dump-lambda.cpp:24:3)' 133 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 134 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 135 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 136 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 137 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 138 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 139 // CHECK-NEXT: | | | |-MoveAssignment 140 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 141 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:8> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 142 // CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:8> 143 // CHECK-NEXT: | `-<<<NULL>>> 144 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:25:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:25:3)' 145 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 146 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 147 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 148 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 149 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 150 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 151 // CHECK-NEXT: | | | |-MoveAssignment 152 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 153 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 154 // CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:19> 155 // CHECK-NEXT: | | `-ReturnStmt {{.*}} <col:9, col:16> 156 // CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:16> 'const int' lvalue Var {{.*}} 'b' 'int' 157 // CHECK-NEXT: | `-<<<NULL>>> 158 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:26:3, col:8> '(lambda at {{.*}}ast-dump-lambda.cpp:26:3)' 159 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 160 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 161 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 162 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 163 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 164 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 165 // CHECK-NEXT: | | | |-MoveAssignment 166 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 167 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:8> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 168 // CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:8> 169 // CHECK-NEXT: | `-<<<NULL>>> 170 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:27:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:27:3)' 171 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 172 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 173 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 174 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 175 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 176 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 177 // CHECK-NEXT: | | | |-MoveAssignment 178 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 179 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 180 // CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:19> 181 // CHECK-NEXT: | | `-ReturnStmt {{.*}} <col:9, col:16> 182 // CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:16> 'int' lvalue Var {{.*}} 'c' 'int' 183 // CHECK-NEXT: | `-<<<NULL>>> 184 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:28:3, col:27> '(lambda at {{.*}}ast-dump-lambda.cpp:28:3)' 185 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 186 // CHECK-NEXT: | | |-DefinitionData lambda trivially_copyable literal can_const_default_init 187 // CHECK-NEXT: | | | |-DefaultConstructor 188 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 189 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 190 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 191 // CHECK-NEXT: | | | |-MoveAssignment 192 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 193 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:9, col:27> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 194 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:11, col:27> 195 // CHECK-NEXT: | | | `-ReturnStmt {{.*}} <col:13, col:24> 196 // CHECK-NEXT: | | | `-BinaryOperator {{.*}} <col:20, col:24> 'int' '+' 197 // CHECK-NEXT: | | | |-ImplicitCastExpr {{.*}} <col:20> 'int' <LValueToRValue> 198 // CHECK-NEXT: | | | | `-DeclRefExpr {{.*}} <col:20> 'const int' lvalue Var {{.*}} 'b' 'int' 199 // CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} <col:24> 'int' <LValueToRValue> 200 // CHECK-NEXT: | | | `-DeclRefExpr {{.*}} <col:24> 'int' lvalue Var {{.*}} 'c' 'int' 201 // CHECK-NEXT: | | |-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'int' 202 // CHECK-NEXT: | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'int &' 203 // CHECK-NEXT: | |-ImplicitCastExpr {{.*}} <col:4> 'int' <LValueToRValue> 204 // CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'int' lvalue Var {{.*}} 'b' 'int' 205 // CHECK-NEXT: | |-DeclRefExpr {{.*}} <col:8> 'int' lvalue Var {{.*}} 'c' 'int' 206 // CHECK-NEXT: | `-<<<NULL>>> 207 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:29:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:29:3)' 208 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 209 // CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init 210 // CHECK-NEXT: | | | |-DefaultConstructor 211 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 212 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 213 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 214 // CHECK-NEXT: | | | |-MoveAssignment 215 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 216 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:16, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline 217 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19> 218 // CHECK-NEXT: | | |-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'Ts...' 219 // CHECK-NEXT: | | `-FieldDecl {{.*}} <col:10> col:10{{( imported)?}} implicit 'int':'int' 220 // CHECK-NEXT: | |-ParenListExpr {{.*}} <col:4> 'NULL TYPE' 221 // CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'Ts...' lvalue ParmVar {{.*}} 'a' 'Ts...' 222 // CHECK-NEXT: | |-IntegerLiteral {{.*}} <col:14> 'int' 12 223 // CHECK-NEXT: | `-<<<NULL>>> 224 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:30:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:30:3)' 225 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 226 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 227 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 228 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 229 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 230 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 231 // CHECK-NEXT: | | | |-MoveAssignment 232 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 233 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:19> col:3{{( imported)?}} constexpr operator() 'auto () const' inline 234 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19> 235 // CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline 236 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline 237 // CHECK-NEXT: | `-<<<NULL>>> 238 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:31:3, col:17> '(lambda at {{.*}}ast-dump-lambda.cpp:31:3)' 239 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 240 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 241 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 242 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 243 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 244 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 245 // CHECK-NEXT: | | | |-MoveAssignment 246 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 247 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:17> col:3{{( imported)?}} operator() 'auto ()' inline 248 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:16, col:17> 249 // CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:17> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline 250 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:17> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline 251 // CHECK-NEXT: | `-<<<NULL>>> 252 // CHECK-NEXT: |-LambdaExpr {{.*}} <line:32:3, col:18> '(lambda at {{.*}}ast-dump-lambda.cpp:32:3)' 253 // CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 254 // CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 255 // CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr 256 // CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 257 // CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit 258 // CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 259 // CHECK-NEXT: | | | |-MoveAssignment 260 // CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit 261 // CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:18> col:3{{( imported)?}} operator() 'auto () const noexcept' inline 262 // CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:17, col:18> 263 // CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:18> col:3{{( imported)?}} implicit constexpr operator auto (*)() noexcept 'auto (*() const noexcept)() noexcept' inline 264 // CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:18> col:3{{( imported)?}} implicit __invoke 'auto () noexcept' static inline 265 // CHECK-NEXT: | `-<<<NULL>>> 266 // CHECK-NEXT: `-LambdaExpr {{.*}} <line:33:3, col:27> '(lambda at {{.*}}ast-dump-lambda.cpp:33:3)' 267 // CHECK-NEXT: |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition 268 // CHECK-NEXT: | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init 269 // CHECK-NEXT: | | |-DefaultConstructor defaulted_is_constexpr 270 // CHECK-NEXT: | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param 271 // CHECK-NEXT: | | |-MoveConstructor exists simple trivial needs_implicit 272 // CHECK-NEXT: | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param 273 // CHECK-NEXT: | | |-MoveAssignment 274 // CHECK-NEXT: | | `-Destructor simple irrelevant trivial needs_implicit 275 // CHECK-NEXT: | |-CXXMethodDecl {{.*}} <col:11, col:27> col:3{{( imported)?}} operator() 'auto () const -> int' inline 276 // CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:15, col:27> 277 // CHECK-NEXT: | | `-ReturnStmt {{.*}} <col:17, col:24> 278 // CHECK-NEXT: | | `-IntegerLiteral {{.*}} <col:24> 'int' 0 279 // CHECK-NEXT: | |-CXXConversionDecl {{.*}} <col:3, col:27> col:3{{( imported)?}} implicit constexpr operator int (*)() 'auto (*() const noexcept)() -> int' inline 280 // CHECK-NEXT: | `-CXXMethodDecl {{.*}} <col:3, col:27> col:3{{( imported)?}} implicit __invoke 'auto () -> int' static inline 281 // CHECK-NEXT: `-<<<NULL>>> 282