Index: lib/AST/ASTDumper.cpp =================================================================== --- lib/AST/ASTDumper.cpp +++ lib/AST/ASTDumper.cpp @@ -612,20 +612,6 @@ } } - if (const FunctionTemplateSpecializationInfo *FTSI = - D->getTemplateSpecializationInfo()) - dumpTemplateArgumentList(*FTSI->TemplateArguments); - - if (!D->param_begin() && D->getNumParams()) - dumpChild([=] { OS << "<getNumParams() << ">>"; }); - else - for (const ParmVarDecl *Parameter : D->parameters()) - dumpDecl(Parameter); - - if (const CXXConstructorDecl *C = dyn_cast(D)) - for (const auto *I : C->inits()) - dumpCXXCtorInitializer(I); - if (const CXXMethodDecl *MD = dyn_cast(D)) { if (MD->size_overridden_methods() != 0) { auto dumpOverride = [=](const CXXMethodDecl *D) { @@ -649,6 +635,22 @@ } } + if (const FunctionTemplateSpecializationInfo *FTSI = + D->getTemplateSpecializationInfo()) + dumpTemplateArgumentList(*FTSI->TemplateArguments); + + if (!D->param_begin() && D->getNumParams()) + dumpChild([=] { OS << "<getNumParams() << ">>"; }); + else + for (const ParmVarDecl *Parameter : D->parameters()) + dumpDecl(Parameter); + + if (const CXXConstructorDecl *C = dyn_cast(D)) + for (CXXConstructorDecl::init_const_iterator I = C->init_begin(), + E = C->init_end(); + I != E; ++I) + dumpCXXCtorInitializer(*I); + if (D->doesThisDeclarationHaveABody()) dumpStmt(D->getBody()); } Index: test/AST/ast-dump-funcs.cpp =================================================================== --- test/AST/ast-dump-funcs.cpp +++ test/AST/ast-dump-funcs.cpp @@ -56,10 +56,10 @@ struct T : S { // T is not referenced, but S is void f(float, int = 100) override; // CHECK: CXXMethodDecl 0x{{[^ ]*}} col:8 f 'void (float, int)' + // CHECK-NEXT: Overrides: [ 0x{{[^ ]*}} S::f 'void (float, int)' ] // CHECK-NEXT: ParmVarDecl 0x{{[^ ]*}} col:15 'float' // CHECK-NEXT: ParmVarDecl 0x{{[^ ]*}} col:21 'int' cinit // CHECK-NEXT: IntegerLiteral 0x{{[^ ]*}} 'int' 100 - // CHECK-NEXT: Overrides: [ 0x{{[^ ]*}} S::f 'void (float, int)' ] // CHECK-NEXT: OverrideAttr // CHECK: CXXConstructorDecl 0x{{[^ ]*}} col:8 implicit T 'void (const T &)' inline default_delete noexcept-unevaluated