Author: majnemer Date: Tue Dec 29 16:25:14 2015 New Revision: 256589 URL: http://llvm.org/viewvc/llvm-project?rev=256589&view=rev Log: [MS ABI] Invent a mangling for reference temporaries
MSVC is non-conforming and doesn't have a mangling for these. Invent our own to unblock folks using clang. This fixes PR25795. Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp cfe/trunk/test/CodeGenCXX/mangle-ms.cpp Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=256589&r1=256588&r2=256589&view=diff ============================================================================== --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Tue Dec 29 16:25:14 2015 @@ -2760,12 +2760,12 @@ void MicrosoftMangleContextImpl::mangleC mangler.mangle(D); } -void MicrosoftMangleContextImpl::mangleReferenceTemporary(const VarDecl *VD, - unsigned, - raw_ostream &) { - unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error, - "cannot mangle this reference temporary yet"); - getDiags().Report(VD->getLocation(), DiagID); +void MicrosoftMangleContextImpl::mangleReferenceTemporary( + const VarDecl *VD, unsigned ManglingNumber, raw_ostream &Out) { + MicrosoftCXXNameMangler Mangler(*this, Out); + + Mangler.getStream() << "\01?$RT" << ManglingNumber << '@'; + Mangler.mangle(VD, ""); } void MicrosoftMangleContextImpl::mangleThreadSafeStaticGuardVariable( Modified: cfe/trunk/test/CodeGenCXX/mangle-ms.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms.cpp?rev=256589&r1=256588&r2=256589&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/mangle-ms.cpp (original) +++ cfe/trunk/test/CodeGenCXX/mangle-ms.cpp Tue Dec 29 16:25:14 2015 @@ -21,6 +21,10 @@ int _c(void) {return N::anonymous + c;} // CHECK-DAG: @"\01?_c@@YAHXZ" // X64-DAG: @"\01?_c@@YAHXZ" +const int &NeedsReferenceTemporary = 2; +// CHECK-DAG: @"\01?NeedsReferenceTemporary@@3ABHB" = constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3ABHB" +// X64-DAG: @"\01?NeedsReferenceTemporary@@3AEBHEB" = constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3AEBHEB" + class foo { static const short d; // CHECK-DAG: @"\01?d@foo@@0FB" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits