diff options
Diffstat (limited to 'test/Misc/ast-dump-decl.cpp')
-rw-r--r-- | test/Misc/ast-dump-decl.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/Misc/ast-dump-decl.cpp b/test/Misc/ast-dump-decl.cpp index d8072b727a..c8f7d2fe6c 100644 --- a/test/Misc/ast-dump-decl.cpp +++ b/test/Misc/ast-dump-decl.cpp @@ -251,6 +251,45 @@ namespace testClassTemplateDecl { // CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplatePartial // CHECK-NEXT: FieldDecl{{.*}} j +// PR15220 dump instantiation only once +namespace testCanonicalTemplate { + class A {}; + + template<typename T> void TestFunctionTemplate(T); + template<typename T> void TestFunctionTemplate(T); + void bar(A a) { TestFunctionTemplate(a); } + // CHECK: FunctionTemplateDecl{{.*}} TestFunctionTemplate + // CHECK-NEXT: TemplateTypeParmDecl + // CHECK-NEXT: FunctionDecl{{.*}} TestFunctionTemplate 'void (T)' + // CHECK-NEXT: ParmVarDecl{{.*}} 'T' + // CHECK-NEXT: FunctionDecl{{.*}} TestFunctionTemplate {{.*}}A + // CHECK-NEXT: TemplateArgument + // CHECK-NEXT: ParmVarDecl + // CHECK: FunctionTemplateDecl{{.*}} TestFunctionTemplate + // CHECK-NEXT: TemplateTypeParmDecl + // CHECK-NEXT: FunctionDecl{{.*}} TestFunctionTemplate 'void (T)' + // CHECK-NEXT: ParmVarDecl{{.*}} 'T' + // CHECK-NEXT: Function{{.*}} 'TestFunctionTemplate' + // CHECK-NEXT-NOT: TemplateArgument + + template<typename T1> class TestClassTemplate { + template<typename T2> friend class TestClassTemplate; + }; + TestClassTemplate<A> a; + // CHECK: ClassTemplateDecl{{.*}} TestClassTemplate + // CHECK-NEXT: TemplateTypeParmDecl + // CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate + // CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate + // CHECK-NEXT: FriendDecl + // CHECK-NEXT: ClassTemplateDecl{{.*}} TestClassTemplate + // CHECK-NEXT: TemplateTypeParmDecl + // CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate + // CHECK-NEXT: ClassTemplateSpecialization{{.*}} 'TestClassTemplate' + // CHECK-NEXT: ClassTemplateSpecializationDecl{{.*}} class TestClassTemplate + // CHECK-NEXT: TemplateArgument{{.*}}A + // CHECK-NEXT: CXXRecordDecl{{.*}} class TestClassTemplate +} + template <class T> class TestClassScopeFunctionSpecialization { template<class U> void foo(U a) { } |