steveire updated this revision to Diff 177412. steveire added a comment. New approach
Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D55393/new/ https://reviews.llvm.org/D55393 Files: lib/AST/ASTDumper.cpp test/AST/ast-dump-decl.cpp
Index: test/AST/ast-dump-decl.cpp =================================================================== --- test/AST/ast-dump-decl.cpp +++ test/AST/ast-dump-decl.cpp @@ -328,20 +328,20 @@ // CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateDefaultType // CHECK-NEXT: TemplateTypeParmDecl // CHECK-NEXT: TemplateArgument type 'int' -// CHECK-NEXT: inherited from TemplateTypeParm 0x{{[^ ]*}} 'T' +// CHECK-NEXT: inherited from TemplateTypeParm 0x{{[^ ]*}} 'T' // CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateDefaultNonType // CHECK-NEXT: NonTypeTemplateParmDecl // CHECK-NEXT: TemplateArgument expr +// CHECK-NEXT: inherited from NonTypeTemplateParm 0x{{[^ ]*}} 'I' 'int' // CHECK-NEXT: ConstantExpr // CHECK-NEXT: IntegerLiteral -// CHECK-NEXT: inherited from NonTypeTemplateParm 0x{{[^ ]*}} 'I' 'int' // CHECK: ClassTemplateDecl 0x{{[^ ]*}} prev 0x{{[^ ]*}} {{.*}} TestTemplateTemplateDefaultType // CHECK-NEXT: TemplateTemplateParmDecl // CHECK-NEXT: TemplateTypeParmDecl // CHECK-NEXT: TemplateArgument -// CHECK-NEXT: inherited from TemplateTemplateParm 0x{{[^ ]*}} 'TT' +// CHECK-NEXT: inherited from TemplateTemplateParm 0x{{[^ ]*}} 'TT' // PR15220 dump instantiation only once namespace testCanonicalTemplate { Index: lib/AST/ASTDumper.cpp =================================================================== --- lib/AST/ASTDumper.cpp +++ lib/AST/ASTDumper.cpp @@ -101,10 +101,14 @@ void dumpCXXCtorInitializer(const CXXCtorInitializer *Init); void dumpTemplateParameters(const TemplateParameterList *TPL); void dumpTemplateArgumentListInfo(const TemplateArgumentListInfo &TALI); - void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A); + void dumpTemplateArgumentLoc(const TemplateArgumentLoc &A, + const Decl *From = nullptr, + const char *label = nullptr); void dumpTemplateArgumentList(const TemplateArgumentList &TAL); void dumpTemplateArgument(const TemplateArgument &A, - SourceRange R = SourceRange()); + SourceRange R = SourceRange(), + const Decl *From = nullptr, + const char *label = nullptr); // Objective-C utilities. void dumpObjCTypeParamList(const ObjCTypeParamList *typeParams); @@ -709,8 +713,9 @@ dumpTemplateArgumentLoc(TALI[i]); } -void ASTDumper::dumpTemplateArgumentLoc(const TemplateArgumentLoc &A) { - dumpTemplateArgument(A.getArgument(), A.getSourceRange()); +void ASTDumper::dumpTemplateArgumentLoc(const TemplateArgumentLoc &A, + const Decl *From, const char *label) { + dumpTemplateArgument(A.getArgument(), A.getSourceRange(), From, label); } void ASTDumper::dumpTemplateArgumentList(const TemplateArgumentList &TAL) { @@ -718,12 +723,17 @@ dumpTemplateArgument(TAL[i]); } -void ASTDumper::dumpTemplateArgument(const TemplateArgument &A, SourceRange R) { +void ASTDumper::dumpTemplateArgument(const TemplateArgument &A, SourceRange R, + const Decl *From, const char *label) { dumpChild([=] { OS << "TemplateArgument"; if (R.isValid()) NodeDumper.dumpSourceRange(R); + if (From) { + dumpDeclRef(From, label); + } + switch (A.getKind()) { case TemplateArgument::Null: OS << " null"; @@ -1408,10 +1418,10 @@ OS << " ..."; NodeDumper.dumpName(D); if (D->hasDefaultArgument()) - dumpTemplateArgument(D->getDefaultArgument()); - if (auto *From = D->getDefaultArgStorage().getInheritedFrom()) - dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from" - : "previous"); + dumpTemplateArgument(D->getDefaultArgument(), SourceRange(), + D->getDefaultArgStorage().getInheritedFrom(), + D->defaultArgumentWasInherited() ? "inherited from" + : "previous"); } void ASTDumper::VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) { @@ -1421,10 +1431,10 @@ OS << " ..."; NodeDumper.dumpName(D); if (D->hasDefaultArgument()) - dumpTemplateArgument(D->getDefaultArgument()); - if (auto *From = D->getDefaultArgStorage().getInheritedFrom()) - dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from" - : "previous"); + dumpTemplateArgument(D->getDefaultArgument(), SourceRange(), + D->getDefaultArgStorage().getInheritedFrom(), + D->defaultArgumentWasInherited() ? "inherited from" + : "previous"); } void ASTDumper::VisitTemplateTemplateParmDecl( @@ -1435,10 +1445,9 @@ NodeDumper.dumpName(D); dumpTemplateParameters(D->getTemplateParameters()); if (D->hasDefaultArgument()) - dumpTemplateArgumentLoc(D->getDefaultArgument()); - if (auto *From = D->getDefaultArgStorage().getInheritedFrom()) - dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from" - : "previous"); + dumpTemplateArgumentLoc( + D->getDefaultArgument(), D->getDefaultArgStorage().getInheritedFrom(), + D->defaultArgumentWasInherited() ? "inherited from" : "previous"); } void ASTDumper::VisitUsingDecl(const UsingDecl *D) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits