Skip to content

Commit 7602ef7

Browse files
committed
Suppress trailing template arguments equivalent to default arguments
when printing the name of a member of a class template specialization.
1 parent a9386bb commit 7602ef7

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

clang/lib/AST/Decl.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1627,7 +1627,9 @@ void NamedDecl::printNestedNameSpecifier(raw_ostream &OS,
16271627
if (const auto *Spec = dyn_cast<ClassTemplateSpecializationDecl>(DC)) {
16281628
OS << Spec->getName();
16291629
const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
1630-
printTemplateArgumentList(OS, TemplateArgs.asArray(), P);
1630+
printTemplateArgumentList(
1631+
OS, TemplateArgs.asArray(), P,
1632+
Spec->getSpecializedTemplate()->getTemplateParameters());
16311633
} else if (const auto *ND = dyn_cast<NamespaceDecl>(DC)) {
16321634
if (ND->isAnonymousNamespace()) {
16331635
OS << (P.MSVCFormatting ? "`anonymous namespace\'"

clang/test/CodeGenCXX/predefined-expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// CHECK-DAG: private unnamed_addr constant [95 x i8] c"void SpecializedClassTemplate<char>::memberFunctionTemplate(T, U) const [T = char, U = double]\00"
88
// CHECK-DAG: private unnamed_addr constant [85 x i8] c"void SpecializedClassTemplate<int>::memberFunctionTemplate(int, U) const [U = float]\00"
99
// CHECK-DAG: private unnamed_addr constant [57 x i8] c"void NonTypeTemplateParam<42>::size() const [Count = 42]\00"
10-
// CHECK-DAG: private unnamed_addr constant [122 x i8] c"static void ClassWithTemplateTemplateParam<char, NS::ClassTemplate>::staticMember() [T = char, Param = NS::ClassTemplate]\00"
10+
// CHECK-DAG: private unnamed_addr constant [103 x i8] c"static void ClassWithTemplateTemplateParam<char>::staticMember() [T = char, Param = NS::ClassTemplate]\00"
1111
// CHECK-DAG: private unnamed_addr constant [106 x i8] c"void OuterClass<int *>::MiddleClass::InnerClass<float>::memberFunction(T, U) const [T = int *, U = float]\00"
1212
// CHECK-DAG: private unnamed_addr constant [51 x i8] c"void functionTemplateWithCapturedStmt(T) [T = int]\00"
1313
// CHECK-DAG: private unnamed_addr constant [76 x i8] c"auto functionTemplateWithLambda(int)::(anonymous class)::operator()() const\00"

clang/test/Misc/diag-template.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@ namespace default_args {
1515
}
1616

1717
template<typename T> struct default_delete {};
18-
template<class T, class Deleter = default_delete<T>> class unique_ptr {};
18+
template<class T, class Deleter = default_delete<T>> class unique_ptr {
19+
public:
20+
void f() { T::error(); } // expected-error {{no member named 'error' in 'default_args::basic_string<char>'}}
21+
};
1922
template<class T, class Deleter> class unique_ptr<T[], Deleter> {};
2023
void test2() {
2124
unique_ptr<string> ups;
2225
f(ups).reset(); // expected-error {{no member named 'reset' in 'default_args::unique_ptr<default_args::basic_string<char>>'}}
26+
f(ups).f(); // expected-note {{in instantiation of member function 'default_args::unique_ptr<default_args::basic_string<char>>::f' requested here}}
2327
}
2428

2529
template<int A, int B = A> struct Z { int error[B]; }; // expected-error {{negative size}}

0 commit comments

Comments
 (0)