From: Anders Carlsson Date: Sun, 11 Oct 2009 21:24:51 +0000 (+0000) Subject: Change mangleCXXVtable and mangleCXXRtti to take CXXRecordDecls instead of QualTypes. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fc3bf4d4d2aea8353541a5710bed2ad00c451b68;p=clang Change mangleCXXVtable and mangleCXXRtti to take CXXRecordDecls instead of QualTypes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83793 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index b8e738fb5e..1dde3d22b8 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -1154,8 +1154,7 @@ llvm::Value *CodeGenFunction::GenerateVtable(const CXXRecordDecl *RD) { llvm::SmallString<256> OutName; llvm::raw_svector_ostream Out(OutName); QualType ClassTy; - ClassTy = getContext().getTagDeclType(RD); - mangleCXXVtable(CGM.getMangleContext(), ClassTy, Out); + mangleCXXVtable(CGM.getMangleContext(), RD, Out); llvm::GlobalVariable::LinkageTypes linktype; linktype = llvm::GlobalValue::WeakAnyLinkage; std::vector methods; diff --git a/lib/CodeGen/CGRtti.cpp b/lib/CodeGen/CGRtti.cpp index 15f56dc7cc..7bc774fce7 100644 --- a/lib/CodeGen/CGRtti.cpp +++ b/lib/CodeGen/CGRtti.cpp @@ -25,9 +25,8 @@ llvm::Constant *CodeGenModule::GenerateRtti(const CXXRecordDecl *RD) { llvm::SmallString<256> OutName; llvm::raw_svector_ostream Out(OutName); - QualType ClassTy; - ClassTy = getContext().getTagDeclType(RD); - mangleCXXRtti(getMangleContext(), ClassTy, Out); + mangleCXXRtti(getMangleContext(), RD, Out); + llvm::GlobalVariable::LinkageTypes linktype; linktype = llvm::GlobalValue::WeakAnyLinkage; std::vector info; diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index 9468520592..fd772748db 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -51,8 +51,8 @@ namespace { int64_t nv_r, int64_t v_r); void mangleGuardVariable(const VarDecl *D); - void mangleCXXVtable(QualType Type); - void mangleCXXRtti(QualType Type); + void mangleCXXVtable(const CXXRecordDecl *RD); + void mangleCXXRtti(const CXXRecordDecl *RD); void mangleCXXCtor(const CXXConstructorDecl *D, CXXCtorType Type); void mangleCXXDtor(const CXXDestructorDecl *D, CXXDtorType Type); @@ -198,16 +198,16 @@ void CXXNameMangler::mangleCXXDtor(const CXXDestructorDecl *D, mangle(D); } -void CXXNameMangler::mangleCXXVtable(QualType T) { +void CXXNameMangler::mangleCXXVtable(const CXXRecordDecl *RD) { // ::= TV # virtual table Out << "_ZTV"; - mangleType(T); + mangleName(RD); } -void CXXNameMangler::mangleCXXRtti(QualType T) { +void CXXNameMangler::mangleCXXRtti(const CXXRecordDecl *RD) { // ::= TI # typeinfo structure Out << "_ZTI"; - mangleType(T); + mangleName(RD); } void CXXNameMangler::mangleGuardVariable(const VarDecl *D) { @@ -1414,18 +1414,18 @@ namespace clang { os.flush(); } - void mangleCXXVtable(MangleContext &Context, QualType Type, + void mangleCXXVtable(MangleContext &Context, const CXXRecordDecl *RD, llvm::raw_ostream &os) { CXXNameMangler Mangler(Context, os); - Mangler.mangleCXXVtable(Type); + Mangler.mangleCXXVtable(RD); os.flush(); } - void mangleCXXRtti(MangleContext &Context, QualType Type, + void mangleCXXRtti(MangleContext &Context, const CXXRecordDecl *RD, llvm::raw_ostream &os) { CXXNameMangler Mangler(Context, os); - Mangler.mangleCXXRtti(Type); + Mangler.mangleCXXRtti(RD); os.flush(); } diff --git a/lib/CodeGen/Mangle.h b/lib/CodeGen/Mangle.h index f05220c38b..2cdb4e2391 100644 --- a/lib/CodeGen/Mangle.h +++ b/lib/CodeGen/Mangle.h @@ -63,8 +63,10 @@ namespace clang { llvm::raw_ostream &os); void mangleGuardVariable(MangleContext &Context, const VarDecl *D, llvm::raw_ostream &os); - void mangleCXXVtable(MangleContext &Context, QualType T, llvm::raw_ostream &os); - void mangleCXXRtti(MangleContext &Context, QualType T, llvm::raw_ostream &os); + void mangleCXXVtable(MangleContext &Context, const CXXRecordDecl *RD, + llvm::raw_ostream &os); + void mangleCXXRtti(MangleContext &Context, const CXXRecordDecl *RD, + llvm::raw_ostream &os); void mangleCXXCtor(MangleContext &Context, const CXXConstructorDecl *D, CXXCtorType Type, llvm::raw_ostream &os); void mangleCXXDtor(MangleContext &Context, const CXXDestructorDecl *D,