312 lines · cpp
1// Test without serialization:2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \3// RUN: -ast-dump %s -ast-dump-filter test \4// RUN: | FileCheck -strict-whitespace --match-full-lines %s5 6// Test with serialization:7// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \8// RUN: -emit-pch -o %t %s9// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \10// RUN: -x c++ -include-pch %t -ast-dump-all -ast-dump-filter test /dev/null \11// RUN: | FileCheck -strict-whitespace --match-full-lines %s12 13 14 15template <typename... Ts> void test(Ts... a) {16 struct V {17 void f() {18 [this] {};19 [*this] {};20 }21 };22 int b, c;23 []() {};24 [](int a, ...) {};25 [a...] {};26 [=] {};27 [=] { return b; };28 [&] {};29 [&] { return c; };30 [b, &c] { return b + c; };31 [a..., x = 12] {};32 []() constexpr {};33 []() mutable {};34 []() noexcept {};35 []() -> int { return 0; };36 [] [[noreturn]] () {};37}38// CHECK:Dumping test:39// CHECK-NEXT:FunctionTemplateDecl {{.*}} <{{.*}}ast-dump-lambda.cpp:15:1, line:37:1> line:15:32{{( imported)?}} test40// CHECK-NEXT:|-TemplateTypeParmDecl {{.*}} <col:11, col:23> col:23{{( imported)?}} referenced typename depth 0 index 0 ... Ts41// CHECK-NEXT:`-FunctionDecl {{.*}} <col:27, line:37:1> line:15:32{{( imported)?}} test 'void (Ts...)'42// CHECK-NEXT: |-ParmVarDecl {{.*}} <col:37, col:43> col:43{{( imported)?}} referenced a 'Ts...' pack43// CHECK-NEXT: `-CompoundStmt {{.*}} <col:46, line:37:1>44// CHECK-NEXT: |-DeclStmt {{.*}} <line:16:3, line:21:4>45// CHECK-NEXT: | `-CXXRecordDecl {{.*}} <line:16:3, line:21:3> line:16:10{{( imported)?}}{{( <undeserialized declarations>)?}} struct V definition46// CHECK-NEXT: | |-DefinitionData empty aggregate standard_layout trivially_copyable pod trivial literal has_constexpr_non_copy_move_ctor can_const_default_init47// CHECK-NEXT: | | |-DefaultConstructor exists trivial constexpr needs_implicit defaulted_is_constexpr48// CHECK-NEXT: | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param49// CHECK-NEXT: | | |-MoveConstructor exists simple trivial needs_implicit50// CHECK-NEXT: | | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param51// CHECK-NEXT: | | |-MoveAssignment exists simple trivial needs_implicit52// CHECK-NEXT: | | `-Destructor simple irrelevant trivial needs_implicit53// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3, col:10> col:10{{( imported)?}} implicit struct V54// CHECK-NEXT: | `-CXXMethodDecl {{.*}} <line:17:5, line:20:5> line:17:10{{( imported)?}} f 'void ()' implicit-inline55// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:14, line:20:5>56// CHECK-NEXT: | |-LambdaExpr {{.*}} <line:18:7, col:15> '(lambda at {{.*}}ast-dump-lambda.cpp:18:7)'57// CHECK-NEXT: | | |-CXXRecordDecl {{.*}} <col:7> col:7{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition58// CHECK-NEXT: | | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init59// CHECK-NEXT: | | | | |-DefaultConstructor60// CHECK-NEXT: | | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param61// CHECK-NEXT: | | | | |-MoveConstructor exists simple trivial needs_implicit62// CHECK-NEXT: | | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param63// CHECK-NEXT: | | | | |-MoveAssignment64// CHECK-NEXT: | | | | `-Destructor simple irrelevant trivial needs_implicit65// CHECK-NEXT: | | | |-CXXMethodDecl {{.*}} <col:12, col:15> col:7{{( imported)?}} operator() 'auto () const -> auto' inline66// CHECK-NEXT: | | | | `-CompoundStmt {{.*}} <col:14, col:15>67// CHECK-NEXT: | | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'V *'68// CHECK-NEXT: | | |-ParenListExpr {{.*}} <col:8> 'NULL TYPE'69// CHECK-NEXT: | | | `-CXXThisExpr {{.*}} <col:8> 'V *' this70// CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:14, col:15>71// CHECK-NEXT: | `-LambdaExpr {{.*}} <line:19:7, col:16> '(lambda at {{.*}}ast-dump-lambda.cpp:19:7)'72// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:7> col:7{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition73// CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init74// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr75// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param76// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit77// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param78// CHECK-NEXT: | | | |-MoveAssignment79// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit80// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:13, col:16> col:7{{( imported)?}} operator() 'auto () const -> auto' inline81// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:15, col:16>82// CHECK-NEXT: | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'V'83// CHECK-NEXT: | |-ParenListExpr {{.*}} <col:8> 'NULL TYPE'84// CHECK-NEXT: | | `-UnaryOperator {{.*}} <col:8> 'V' lvalue prefix '*' cannot overflow85// CHECK-NEXT: | | `-CXXThisExpr {{.*}} <col:8> 'V *' this86// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:15, col:16>87// CHECK-NEXT: |-DeclStmt {{.*}} <line:22:3, col:11>88// CHECK-NEXT: | |-VarDecl {{.*}} <col:3, col:7> col:7{{( imported)?}} referenced b 'int'89// CHECK-NEXT: | `-VarDecl {{.*}} <col:3, col:10> col:10{{( imported)?}} referenced c 'int'90// CHECK-NEXT: |-LambdaExpr {{.*}} <line:23:3, col:9> '(lambda at {{.*}}ast-dump-lambda.cpp:23:3)'91// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition92// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init93// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr94// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param95// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit96// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param97// CHECK-NEXT: | | | |-MoveAssignment98// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit99// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:6, col:9> col:3{{( imported)?}} operator() 'auto () const' inline100// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:8, col:9>101// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:9> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline102// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:9> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline103// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:8, col:9>104// CHECK-NEXT: |-LambdaExpr {{.*}} <line:24:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:24:3)'105// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition106// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init107// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr108// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param109// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit110// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param111// CHECK-NEXT: | | | |-MoveAssignment112// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit113// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:16, col:19> col:3{{( imported)?}} operator() 'auto (int, ...) const' inline114// CHECK-NEXT: | | | |-ParmVarDecl {{.*}} <col:6, col:10> col:10{{( imported)?}} a 'int'115// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19>116// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit constexpr operator auto (*)(int, ...) 'auto (*() const noexcept)(int, ...)' inline117// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit __invoke 'auto (int, ...)' static inline118// CHECK-NEXT: | | `-ParmVarDecl {{.*}} <col:6, col:10> col:10{{( imported)?}} a 'int'119// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:18, col:19>120// CHECK-NEXT: |-LambdaExpr {{.*}} <line:25:3, col:11> '(lambda at {{.*}}ast-dump-lambda.cpp:25:3)'121// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition122// CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init123// CHECK-NEXT: | | | |-DefaultConstructor124// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param125// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit126// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param127// CHECK-NEXT: | | | |-MoveAssignment128// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit129// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:11> col:3{{( imported)?}} operator() 'auto () const -> auto' inline130// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:10, col:11>131// CHECK-NEXT: | | `-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'Ts...'132// CHECK-NEXT: | |-ParenListExpr {{.*}} <col:4> 'NULL TYPE'133// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'Ts' lvalue ParmVar {{.*}} 'a' 'Ts...'134// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:10, col:11>135// CHECK-NEXT: |-LambdaExpr {{.*}} <line:26:3, col:8> '(lambda at {{.*}}ast-dump-lambda.cpp:26:3)'136// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition137// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init138// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr139// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param140// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit141// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param142// CHECK-NEXT: | | | |-MoveAssignment143// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit144// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:8> col:3{{( imported)?}} operator() 'auto () const -> auto' inline145// CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:8>146// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:7, col:8>147// CHECK-NEXT: |-LambdaExpr {{.*}} <line:27:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:27:3)'148// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition149// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init150// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr151// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param152// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit153// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param154// CHECK-NEXT: | | | |-MoveAssignment155// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit156// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline157// CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:19>158// CHECK-NEXT: | | `-ReturnStmt {{.*}} <col:9, col:16>159// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:16> 'const int' lvalue Var {{.*}} 'b' 'int' refers_to_enclosing_variable_or_capture160// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:7, col:19>161// CHECK-NEXT: | `-ReturnStmt {{.*}} <col:9, col:16>162// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:16> 'const int' lvalue Var {{.*}} 'b' 'int' refers_to_enclosing_variable_or_capture163// CHECK-NEXT: |-LambdaExpr {{.*}} <line:28:3, col:8> '(lambda at {{.*}}ast-dump-lambda.cpp:28:3)'164// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition165// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init166// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr167// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param168// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit169// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param170// CHECK-NEXT: | | | |-MoveAssignment171// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit172// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:8> col:3{{( imported)?}} operator() 'auto () const -> auto' inline173// CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:8>174// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:7, col:8>175// CHECK-NEXT: |-LambdaExpr {{.*}} <line:29:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:29:3)'176// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition177// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init178// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr179// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param180// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit181// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param182// CHECK-NEXT: | | | |-MoveAssignment183// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit184// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:5, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline185// CHECK-NEXT: | | `-CompoundStmt {{.*}} <col:7, col:19>186// CHECK-NEXT: | | `-ReturnStmt {{.*}} <col:9, col:16>187// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:16> 'int' lvalue Var {{.*}} 'c' 'int' refers_to_enclosing_variable_or_capture188// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:7, col:19>189// CHECK-NEXT: | `-ReturnStmt {{.*}} <col:9, col:16>190// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:16> 'int' lvalue Var {{.*}} 'c' 'int' refers_to_enclosing_variable_or_capture191// CHECK-NEXT: |-LambdaExpr {{.*}} <line:30:3, col:27> '(lambda at {{.*}}ast-dump-lambda.cpp:30:3)'192// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition193// CHECK-NEXT: | | |-DefinitionData lambda trivially_copyable literal can_const_default_init194// CHECK-NEXT: | | | |-DefaultConstructor195// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param196// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit197// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param198// CHECK-NEXT: | | | |-MoveAssignment199// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit200// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:9, col:27> col:3{{( imported)?}} operator() 'auto () const -> auto' inline201// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:11, col:27>202// CHECK-NEXT: | | | `-ReturnStmt {{.*}} <col:13, col:24>203// CHECK-NEXT: | | | `-BinaryOperator {{.*}} <col:20, col:24> 'int' '+'204// CHECK-NEXT: | | | |-ImplicitCastExpr {{.*}} <col:20> 'int' <LValueToRValue>205// CHECK-NEXT: | | | | `-DeclRefExpr {{.*}} <col:20> 'const int' lvalue Var {{.*}} 'b' 'int' refers_to_enclosing_variable_or_capture206// CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} <col:24> 'int' <LValueToRValue>207// CHECK-NEXT: | | | `-DeclRefExpr {{.*}} <col:24> 'int' lvalue Var {{.*}} 'c' 'int' refers_to_enclosing_variable_or_capture208// CHECK-NEXT: | | |-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'int'209// CHECK-NEXT: | | `-FieldDecl {{.*}} <col:8> col:8{{( imported)?}} implicit 'int &'210// CHECK-NEXT: | |-ImplicitCastExpr {{.*}} <col:4> 'int' <LValueToRValue>211// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'int' lvalue Var {{.*}} 'b' 'int'212// CHECK-NEXT: | |-DeclRefExpr {{.*}} <col:8> 'int' lvalue Var {{.*}} 'c' 'int'213// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:11, col:27>214// CHECK-NEXT: | `-ReturnStmt {{.*}} <col:13, col:24>215// CHECK-NEXT: | `-BinaryOperator {{.*}} <col:20, col:24> 'int' '+'216// CHECK-NEXT: | |-ImplicitCastExpr {{.*}} <col:20> 'int' <LValueToRValue>217// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:20> 'const int' lvalue Var {{.*}} 'b' 'int' refers_to_enclosing_variable_or_capture218// CHECK-NEXT: | `-ImplicitCastExpr {{.*}} <col:24> 'int' <LValueToRValue>219// CHECK-NEXT: | `-DeclRefExpr {{.*}} <col:24> 'int' lvalue Var {{.*}} 'c' 'int' refers_to_enclosing_variable_or_capture220// CHECK-NEXT: |-LambdaExpr {{.*}} <line:31:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:31:3)'221// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition222// CHECK-NEXT: | | |-DefinitionData lambda standard_layout trivially_copyable can_const_default_init223// CHECK-NEXT: | | | |-DefaultConstructor224// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param225// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit226// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param227// CHECK-NEXT: | | | |-MoveAssignment228// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit229// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:16, col:19> col:3{{( imported)?}} operator() 'auto () const -> auto' inline230// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19>231// CHECK-NEXT: | | |-FieldDecl {{.*}} <col:4> col:4{{( imported)?}} implicit 'Ts...'232// CHECK-NEXT: | | `-FieldDecl {{.*}} <col:10> col:10{{( imported)?}} implicit 'int'233// CHECK-NEXT: | |-ParenListExpr {{.*}} <col:4> 'NULL TYPE'234// CHECK-NEXT: | | `-DeclRefExpr {{.*}} <col:4> 'Ts' lvalue ParmVar {{.*}} 'a' 'Ts...'235// CHECK-NEXT: | |-IntegerLiteral {{.*}} <col:14> 'int' 12236// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:18, col:19>237// CHECK-NEXT: |-LambdaExpr {{.*}} <line:32:3, col:19> '(lambda at {{.*}}ast-dump-lambda.cpp:32:3)'238// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition239// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init240// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr241// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param242// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit243// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param244// CHECK-NEXT: | | | |-MoveAssignment245// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit246// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:19> col:3{{( imported)?}} constexpr operator() 'auto () const' inline247// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:18, col:19>248// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline249// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:19> col:3{{( imported)?}} implicit constexpr __invoke 'auto ()' static inline250// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:18, col:19>251// CHECK-NEXT: |-LambdaExpr {{.*}} <line:33:3, col:17> '(lambda at {{.*}}ast-dump-lambda.cpp:33:3)'252// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition253// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init254// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr255// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param256// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit257// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param258// CHECK-NEXT: | | | |-MoveAssignment259// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit260// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:17> col:3{{( imported)?}} operator() 'auto ()' inline261// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:16, col:17>262// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:17> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline263// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:17> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline264// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:16, col:17>265// CHECK-NEXT: |-LambdaExpr {{.*}} <line:34:3, col:18> '(lambda at {{.*}}ast-dump-lambda.cpp:34:3)'266// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition267// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init268// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr269// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param270// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit271// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param272// CHECK-NEXT: | | | |-MoveAssignment273// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit274// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:8, col:18> col:3{{( imported)?}} operator() 'auto () const noexcept' inline275// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:17, col:18>276// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:18> col:3{{( imported)?}} implicit constexpr operator auto (*)() noexcept 'auto (*() const noexcept)() noexcept' inline277// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:18> col:3{{( imported)?}} implicit __invoke 'auto () noexcept' static inline278// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:17, col:18>279// CHECK-NEXT: |-LambdaExpr {{.*}} <line:35:3, col:27> '(lambda at {{.*}}ast-dump-lambda.cpp:35:3)'280// CHECK-NEXT: | |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition281// CHECK-NEXT: | | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init282// CHECK-NEXT: | | | |-DefaultConstructor defaulted_is_constexpr283// CHECK-NEXT: | | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param284// CHECK-NEXT: | | | |-MoveConstructor exists simple trivial needs_implicit285// CHECK-NEXT: | | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param286// CHECK-NEXT: | | | |-MoveAssignment287// CHECK-NEXT: | | | `-Destructor simple irrelevant trivial needs_implicit288// CHECK-NEXT: | | |-CXXMethodDecl {{.*}} <col:11, col:27> col:3{{( imported)?}} operator() 'auto () const -> int' inline289// CHECK-NEXT: | | | `-CompoundStmt {{.*}} <col:15, col:27>290// CHECK-NEXT: | | | `-ReturnStmt {{.*}} <col:17, col:24>291// CHECK-NEXT: | | | `-IntegerLiteral {{.*}} <col:24> 'int' 0292// CHECK-NEXT: | | |-CXXConversionDecl {{.*}} <col:3, col:27> col:3{{( imported)?}} implicit constexpr operator int (*)() 'auto (*() const noexcept)() -> int' inline293// CHECK-NEXT: | | `-CXXMethodDecl {{.*}} <col:3, col:27> col:3{{( imported)?}} implicit __invoke 'auto () -> int' static inline294// CHECK-NEXT: | `-CompoundStmt {{.*}} <col:15, col:27>295// CHECK-NEXT: | `-ReturnStmt {{.*}} <col:17, col:24>296// CHECK-NEXT: | `-IntegerLiteral {{.*}} <col:24> 'int' 0297// CHECK-NEXT: `-LambdaExpr {{.*}} <line:36:3, col:23> '(lambda at {{.*}}ast-dump-lambda.cpp:36:3)'298// CHECK-NEXT: |-CXXRecordDecl {{.*}} <col:3> col:3{{( imported)?}} implicit{{( <undeserialized declarations>)?}} class definition299// CHECK-NEXT: | |-DefinitionData lambda empty standard_layout trivially_copyable literal can_const_default_init300// CHECK-NEXT: | | |-DefaultConstructor defaulted_is_constexpr301// CHECK-NEXT: | | |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param302// CHECK-NEXT: | | |-MoveConstructor exists simple trivial needs_implicit303// CHECK-NEXT: | | |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param304// CHECK-NEXT: | | |-MoveAssignment305// CHECK-NEXT: | | `-Destructor simple irrelevant trivial needs_implicit306// CHECK-NEXT: | |-CXXMethodDecl {{.*}} <col:20, col:23> col:3{{( imported)?}} operator() 'auto () const' inline307// CHECK-NEXT: | | |-CompoundStmt {{.*}} <col:22, col:23>308// CHECK-NEXT: | | `-CXX11NoReturnAttr {{.*}} <col:8> noreturn309// CHECK-NEXT: | |-CXXConversionDecl {{.*}} <col:3, col:23> col:3{{( imported)?}} implicit constexpr operator auto (*)() 'auto (*() const noexcept)()' inline310// CHECK-NEXT: | `-CXXMethodDecl {{.*}} <col:3, col:23> col:3{{( imported)?}} implicit __invoke 'auto ()' static inline311// CHECK-NEXT: `-CompoundStmt {{.*}} <col:22, col:23>312