Add Microsoft mangling of constructors and destructors. Patch by Dmitry!

llvm-svn: 145581
This commit is contained in:
Michael J. Spencer 2011-12-01 09:55:00 +00:00
parent d3b986df5d
commit 0567b8ec58
2 changed files with 22 additions and 7 deletions

View File

@ -335,10 +335,12 @@ MicrosoftCXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND,
llvm_unreachable("Can't mangle Objective-C selector names here!");
case DeclarationName::CXXConstructorName:
llvm_unreachable("Can't mangle constructors yet!");
Out << "?0";
break;
case DeclarationName::CXXDestructorName:
llvm_unreachable("Can't mangle destructors yet!");
Out << "?1";
break;
case DeclarationName::CXXConversionFunctionName:
// <operator-name> ::= ?B # (cast)
@ -1168,13 +1170,15 @@ void MicrosoftMangleContext::mangleCXXRTTIName(QualType T,
}
void MicrosoftMangleContext::mangleCXXCtor(const CXXConstructorDecl *D,
CXXCtorType Type,
raw_ostream &) {
llvm_unreachable("Can't yet mangle constructors!");
raw_ostream & Out) {
MicrosoftCXXNameMangler mangler(*this, Out);
mangler.mangle(D);
}
void MicrosoftMangleContext::mangleCXXDtor(const CXXDestructorDecl *D,
CXXDtorType Type,
raw_ostream &) {
llvm_unreachable("Can't yet mangle destructors!");
raw_ostream & Out) {
MicrosoftCXXNameMangler mangler(*this, Out);
mangler.mangle(D);
}
void MicrosoftMangleContext::mangleReferenceTemporary(const clang::VarDecl *,
raw_ostream &) {

View File

@ -28,7 +28,18 @@ protected:
public:
static const volatile char f;
int operator+(int a);
};
foo(){}
//CHECK: @"\01??0foo@@QAE@XZ"
~foo(){}
//CHECK: @"\01??1foo@@QAE@XZ"
foo(int i){}
//CHECK: @"\01??0foo@@QAE@H@Z"
foo(char *q){}
//CHECK: @"\01??0foo@@QAE@PAD@Z"
}f,s1(1),s2((char*)0);
struct bar {
static int g;