diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 88899997846666..8960d924d3fabf 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1627,7 +1627,9 @@ void NamedDecl::printNestedNameSpecifier(raw_ostream &OS, if (const auto *Spec = dyn_cast(DC)) { OS << Spec->getName(); const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs(); - printTemplateArgumentList(OS, TemplateArgs.asArray(), P); + printTemplateArgumentList( + OS, TemplateArgs.asArray(), P, + Spec->getSpecializedTemplate()->getTemplateParameters()); } else if (const auto *ND = dyn_cast(DC)) { if (ND->isAnonymousNamespace()) { OS << (P.MSVCFormatting ? "`anonymous namespace\'" diff --git a/clang/test/CodeGenCXX/predefined-expr.cpp b/clang/test/CodeGenCXX/predefined-expr.cpp index 21cceddf19e6d8..b8516691e0b1e3 100644 --- a/clang/test/CodeGenCXX/predefined-expr.cpp +++ b/clang/test/CodeGenCXX/predefined-expr.cpp @@ -7,7 +7,7 @@ // CHECK-DAG: private unnamed_addr constant [95 x i8] c"void SpecializedClassTemplate::memberFunctionTemplate(T, U) const [T = char, U = double]\00" // CHECK-DAG: private unnamed_addr constant [85 x i8] c"void SpecializedClassTemplate::memberFunctionTemplate(int, U) const [U = float]\00" // CHECK-DAG: private unnamed_addr constant [57 x i8] c"void NonTypeTemplateParam<42>::size() const [Count = 42]\00" -// CHECK-DAG: private unnamed_addr constant [122 x i8] c"static void ClassWithTemplateTemplateParam::staticMember() [T = char, Param = NS::ClassTemplate]\00" +// CHECK-DAG: private unnamed_addr constant [103 x i8] c"static void ClassWithTemplateTemplateParam::staticMember() [T = char, Param = NS::ClassTemplate]\00" // CHECK-DAG: private unnamed_addr constant [106 x i8] c"void OuterClass::MiddleClass::InnerClass::memberFunction(T, U) const [T = int *, U = float]\00" // CHECK-DAG: private unnamed_addr constant [51 x i8] c"void functionTemplateWithCapturedStmt(T) [T = int]\00" // CHECK-DAG: private unnamed_addr constant [76 x i8] c"auto functionTemplateWithLambda(int)::(anonymous class)::operator()() const\00" diff --git a/clang/test/Misc/diag-template.cpp b/clang/test/Misc/diag-template.cpp index 30d4829409bb24..e207344c2e9fd7 100644 --- a/clang/test/Misc/diag-template.cpp +++ b/clang/test/Misc/diag-template.cpp @@ -15,11 +15,15 @@ namespace default_args { } template struct default_delete {}; - template> class unique_ptr {}; + template> class unique_ptr { + public: + void f() { T::error(); } // expected-error {{no member named 'error' in 'default_args::basic_string'}} + }; template class unique_ptr {}; void test2() { unique_ptr ups; f(ups).reset(); // expected-error {{no member named 'reset' in 'default_args::unique_ptr>'}} + f(ups).f(); // expected-note {{in instantiation of member function 'default_args::unique_ptr>::f' requested here}} } template struct Z { int error[B]; }; // expected-error {{negative size}}