From: Richard Smith Date: Sun, 23 Mar 2014 20:50:39 +0000 (+0000) Subject: Consistently dump default template arguments for template parameters as 'TemplateArgu... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1493795ab073473f84501f7a3fbea976f615ac6d;p=clang Consistently dump default template arguments for template parameters as 'TemplateArgument's. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204572 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTDumper.cpp b/lib/AST/ASTDumper.cpp index 54efed289a..ac35a2e43c 100644 --- a/lib/AST/ASTDumper.cpp +++ b/lib/AST/ASTDumper.cpp @@ -1188,8 +1188,10 @@ void ASTDumper::VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) { if (D->isParameterPack()) OS << " ..."; dumpName(D); - if (D->hasDefaultArgument()) - dumpType(D->getDefaultArgument()); + if (D->hasDefaultArgument()) { + lastChild(); + dumpTemplateArgument(D->getDefaultArgument()); + } } void ASTDumper::VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) { @@ -1197,8 +1199,10 @@ void ASTDumper::VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) { if (D->isParameterPack()) OS << " ..."; dumpName(D); - if (D->hasDefaultArgument()) - dumpStmt(D->getDefaultArgument()); + if (D->hasDefaultArgument()) { + lastChild(); + dumpTemplateArgument(D->getDefaultArgument()); + } } void ASTDumper::VisitTemplateTemplateParmDecl( @@ -1207,8 +1211,10 @@ void ASTDumper::VisitTemplateTemplateParmDecl( OS << " ..."; dumpName(D); dumpTemplateParameters(D->getTemplateParameters()); - if (D->hasDefaultArgument()) + if (D->hasDefaultArgument()) { + lastChild(); dumpTemplateArgumentLoc(D->getDefaultArgument()); + } } void ASTDumper::VisitUsingDecl(const UsingDecl *D) { diff --git a/test/Misc/ast-dump-decl.cpp b/test/Misc/ast-dump-decl.cpp index f647bd792d..ea28d68da4 100644 --- a/test/Misc/ast-dump-decl.cpp +++ b/test/Misc/ast-dump-decl.cpp @@ -308,7 +308,8 @@ namespace TestTemplateTypeParmDecl { // CHECK: NamespaceDecl{{.*}} TestTemplateTypeParmDecl // CHECK-NEXT: FunctionTemplateDecl // CHECK-NEXT: TemplateTypeParmDecl{{.*}} typename ... T -// CHECK-NEXT: TemplateTypeParmDecl{{.*}} class U 'int' +// CHECK-NEXT: TemplateTypeParmDecl{{.*}} class U +// CHECK-NEXT: TemplateArgument type 'int' namespace TestNonTypeTemplateParmDecl { template void foo(); @@ -316,7 +317,8 @@ namespace TestNonTypeTemplateParmDecl { // CHECK: NamespaceDecl{{.*}} TestNonTypeTemplateParmDecl // CHECK-NEXT: FunctionTemplateDecl // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'int' I -// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1 +// CHECK-NEXT: TemplateArgument expr +// CHECK-NEXT: IntegerLiteral{{.*}} 'int' 1 // CHECK-NEXT: NonTypeTemplateParmDecl{{.*}} 'int' ... J namespace TestTemplateTemplateParmDecl {