From: Anders Carlsson <andersca@mac.com>
Date: Sat, 26 Jun 2010 16:09:40 +0000 (+0000)
Subject: Add function for mangling reference temporaries.
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=715edf293698f40e600df65e18e48c70a29fc98c;p=clang

Add function for mangling reference temporaries.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106948 91177308-0d34-0410-b5e6-96231b3b80d8
---

diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp
index 154153aaeb..ac962247fd 100644
--- a/lib/CodeGen/Mangle.cpp
+++ b/lib/CodeGen/Mangle.cpp
@@ -2253,6 +2253,15 @@ void MangleContext::mangleGuardVariable(const VarDecl *D,
   Mangler.mangleName(D);
 }
 
+void MangleContext::mangleReferenceTemporary(const VarDecl *D,
+                                             llvm::SmallVectorImpl<char> &Res) {
+  // We match the GCC mangling here.
+  //  <special-name> ::= GR <object name>
+  CXXNameMangler Mangler(*this, Res);
+  Mangler.getStream() << "_ZGR";
+  Mangler.mangleName(D);
+}
+
 void MangleContext::mangleCXXVTable(const CXXRecordDecl *RD,
                                     llvm::SmallVectorImpl<char> &Res) {
   // <special-name> ::= TV <type>  # virtual table
diff --git a/lib/CodeGen/Mangle.h b/lib/CodeGen/Mangle.h
index ec575cc786..139f6c0377 100644
--- a/lib/CodeGen/Mangle.h
+++ b/lib/CodeGen/Mangle.h
@@ -121,6 +121,8 @@ public:
                                   llvm::SmallVectorImpl<char> &);
   virtual void mangleGuardVariable(const VarDecl *D,
                                    llvm::SmallVectorImpl<char> &);
+  virtual void mangleReferenceTemporary(const VarDecl *D,
+                                        llvm::SmallVectorImpl<char> &);
   virtual void mangleCXXVTable(const CXXRecordDecl *RD,
                                llvm::SmallVectorImpl<char> &);
   virtual void mangleCXXVTT(const CXXRecordDecl *RD,