summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDmitri Gribenko <gribozavr@gmail.com>2013-02-21 22:01:10 +0000
committerDmitri Gribenko <gribozavr@gmail.com>2013-02-21 22:01:10 +0000
commitefc6dfb446251abcb3993de8bb66359d042be118 (patch)
tree4fd06b497d53a9b25710d540449f6b645fa6eb11 /clang/lib
parent9b7f9c3e9edb7223c4bedeb89396b7b54e1b7077 (diff)
downloadbcm5719-llvm-efc6dfb446251abcb3993de8bb66359d042be118.tar.gz
bcm5719-llvm-efc6dfb446251abcb3993de8bb66359d042be118.zip
AST dumping: dump template instantiations only once
Fixes infinite loop in PR15220. Patch by Philip Craig. llvm-svn: 175805
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/ASTDumper.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp
index cdc96b6e016..740153029ba 100644
--- a/clang/lib/AST/ASTDumper.cpp
+++ b/clang/lib/AST/ASTDumper.cpp
@@ -947,7 +947,10 @@ void ASTDumper::VisitFunctionTemplateDecl(const FunctionTemplateDecl *D) {
case TSK_ImplicitInstantiation:
case TSK_ExplicitInstantiationDeclaration:
case TSK_ExplicitInstantiationDefinition:
- dumpDecl(*I);
+ if (D == D->getCanonicalDecl())
+ dumpDecl(*I);
+ else
+ dumpDeclRef(*I);
break;
case TSK_ExplicitSpecialization:
dumpDeclRef(*I);
@@ -973,7 +976,10 @@ void ASTDumper::VisitClassTemplateDecl(const ClassTemplateDecl *D) {
switch (I->getTemplateSpecializationKind()) {
case TSK_Undeclared:
case TSK_ImplicitInstantiation:
- dumpDecl(*I);
+ if (D == D->getCanonicalDecl())
+ dumpDecl(*I);
+ else
+ dumpDeclRef(*I);
break;
case TSK_ExplicitSpecialization:
case TSK_ExplicitInstantiationDeclaration:
OpenPOWER on IntegriCloud