summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/ASTDumper.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2018-09-12 02:13:47 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2018-09-12 02:13:47 +0000
commitc457766c6d739ba717f881b36a76ff60d3b75809 (patch)
tree294731666a45d2531fbf35de0720e1585d01ccde /clang/lib/AST/ASTDumper.cpp
parent20fbdb347cf6324e6e8d3f4aa1d0b1ab02f70e8d (diff)
downloadbcm5719-llvm-c457766c6d739ba717f881b36a76ff60d3b75809.tar.gz
bcm5719-llvm-c457766c6d739ba717f881b36a76ff60d3b75809.zip
Consistently create a new declaration when merging a pre-existing but
hidden definition with a would-be-parsed redefinition. This permits a bunch of cleanups. In particular, we no longer need to take merged definitions into account when checking declaration visibility, only when checking definition visibility, which makes certain visibility checks take linear instead of quadratic time. We could also now remove the UPD_DECL_EXPORTED update record and track on each declaration whether it was demoted from a definition (as we already do for variables), but I'm not doing that in this patch to keep the changes here simpler. llvm-svn: 342018
Diffstat (limited to 'clang/lib/AST/ASTDumper.cpp')
-rw-r--r--clang/lib/AST/ASTDumper.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp
index d9093e757b2..2f08f58ade6 100644
--- a/clang/lib/AST/ASTDumper.cpp
+++ b/clang/lib/AST/ASTDumper.cpp
@@ -1641,6 +1641,9 @@ void ASTDumper::VisitTemplateTypeParmDecl(const TemplateTypeParmDecl *D) {
dumpName(D);
if (D->hasDefaultArgument())
dumpTemplateArgument(D->getDefaultArgument());
+ if (auto *From = D->getDefaultArgStorage().getInheritedFrom())
+ dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from"
+ : "previous");
}
void ASTDumper::VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) {
@@ -1651,6 +1654,9 @@ void ASTDumper::VisitNonTypeTemplateParmDecl(const NonTypeTemplateParmDecl *D) {
dumpName(D);
if (D->hasDefaultArgument())
dumpTemplateArgument(D->getDefaultArgument());
+ if (auto *From = D->getDefaultArgStorage().getInheritedFrom())
+ dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from"
+ : "previous");
}
void ASTDumper::VisitTemplateTemplateParmDecl(
@@ -1662,6 +1668,9 @@ void ASTDumper::VisitTemplateTemplateParmDecl(
dumpTemplateParameters(D->getTemplateParameters());
if (D->hasDefaultArgument())
dumpTemplateArgumentLoc(D->getDefaultArgument());
+ if (auto *From = D->getDefaultArgStorage().getInheritedFrom())
+ dumpDeclRef(From, D->defaultArgumentWasInherited() ? "inherited from"
+ : "previous");
}
void ASTDumper::VisitUsingDecl(const UsingDecl *D) {
OpenPOWER on IntegriCloud