Author: Richard Smith Date: 2020-04-15T00:07:12-07:00 New Revision: 9bd6b77ac66fddadc50ca99ca327f1b7f9b0d6e4
URL: https://github.com/llvm/llvm-project/commit/9bd6b77ac66fddadc50ca99ca327f1b7f9b0d6e4 DIFF: https://github.com/llvm/llvm-project/commit/9bd6b77ac66fddadc50ca99ca327f1b7f9b0d6e4.diff LOG: Don't print `&` as part of reference template arguments. In passing, also generalize the mechanism used to allow Decl's printName functions to override qualified name printing. Added: Modified: clang/lib/AST/Decl.cpp clang/lib/AST/TemplateBase.cpp clang/test/CodeGenCXX/debug-info-template.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 1eb85472e3c7..8d98e1fc02e4 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1542,10 +1542,19 @@ void NamedDecl::printQualifiedName(raw_ostream &OS, return; } printNestedNameSpecifier(OS, P); - if (getDeclName() || isa<DecompositionDecl>(this)) + if (getDeclName()) OS << *this; - else - OS << "(anonymous)"; + else { + // Give the printName override a chance to pick a diff erent name before we + // fall back to "(anonymous)". + SmallString<64> NameBuffer; + llvm::raw_svector_ostream NameOS(NameBuffer); + printName(NameOS); + if (NameBuffer.empty()) + OS << "(anonymous)"; + else + OS << NameBuffer; + } } void NamedDecl::printNestedNameSpecifier(raw_ostream &OS) const { diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp index c12221376691..6a3d2b30e46e 100644 --- a/clang/lib/AST/TemplateBase.cpp +++ b/clang/lib/AST/TemplateBase.cpp @@ -352,13 +352,9 @@ void TemplateArgument::print(const PrintingPolicy &Policy, case Declaration: { NamedDecl *ND = getAsDecl(); - Out << '&'; - if (ND->getDeclName()) { - // FIXME: distinguish between pointer and reference args? - ND->printQualifiedName(Out); - } else { - Out << "(anonymous)"; - } + if (!getParamTypeForDecl()->isReferenceType()) + Out << '&'; + ND->printQualifiedName(Out); break; } diff --git a/clang/test/CodeGenCXX/debug-info-template.cpp b/clang/test/CodeGenCXX/debug-info-template.cpp index 4b330a0b0a11..a07222ace150 100644 --- a/clang/test/CodeGenCXX/debug-info-template.cpp +++ b/clang/test/CodeGenCXX/debug-info-template.cpp @@ -129,9 +129,7 @@ struct NN { // CHECK: [[NNV]] = distinct !DIGlobalVariable(name: "nn" // CHECK-SAME: type: ![[NNT:[0-9]+]] -// FIXME: these parameters should probably be rendered as 'glb' rather than -// '&glb', since they're references, not pointers. -// CHECK: ![[NNT]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "NN<tmpl_impl, &glb, &glb>", +// CHECK: ![[NNT]] ={{.*}}!DICompositeType(tag: DW_TAG_structure_type, name: "NN<tmpl_impl, glb, glb>", // CHECK-SAME: templateParams: [[NNARGS:![0-9]*]] // CHECK-SAME: identifier: // CHECK: [[NNARGS]] = !{[[NNARG1:![0-9]*]], [[NNARG2:![0-9]*]], [[NNARG3:![0-9]*]]} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits