Author: majnemer Date: Mon Aug 12 20:25:35 2013 New Revision: 188245 URL: http://llvm.org/viewvc/llvm-project?rev=188245&view=rev Log: [-cxx-abi microsoft] Mangle TemplateArgument::Declaration for references
Summary: Properly mangle declarations showing up in template arguments that are reference parameters. Fun-fact: undname cannot handle these! Reviewers: rnk, cdavis5x Reviewed By: rnk CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1356 Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=188245&r1=188244&r2=188245&view=diff ============================================================================== --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Mon Aug 12 20:25:35 2013 @@ -886,9 +886,11 @@ void MicrosoftCXXNameMangler::mangleTemp mangleType(T, SourceRange(), QMM_Escape); break; } - case TemplateArgument::Declaration: - mangle(cast<NamedDecl>(TA.getAsDecl()), "$1?"); + case TemplateArgument::Declaration: { + const NamedDecl *ND = cast<NamedDecl>(TA.getAsDecl()); + mangle(ND, TA.isDeclForReferenceParam() ? "$E?" : "$1?"); break; + } case TemplateArgument::Integral: mangleIntegerLiteral(TA.getAsIntegral(), TA.getIntegralType()->isBooleanType()); Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp?rev=188245&r1=188244&r2=188245&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp (original) +++ cfe/trunk/test/CodeGenCXX/mangle-ms-templates.cpp Mon Aug 12 20:25:35 2013 @@ -190,3 +190,14 @@ void template_template_specialization<vo template <decltype(nullptr)> struct S1 {}; void f(S1<nullptr>) {} // CHECK: "\01?f@@YAXU?$S1@$0A@@@@Z" + +struct record { + int first; + int second; +}; +template <const record &> +struct type1 { +}; +extern const record inst; +void recref(type1<inst>) {} +// CHECK: "\01?recref@@YAXU?$type1@$E?inst@@3Urecord@@B@@@Z" _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
