From aeb55c9ded95eb3be7cf71fa82e5acda935903ed Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 13 May 2014 06:57:43 +0000 Subject: MS ABI: Tighten RTTI mangling r208661 contained WIP code, commit the *actual* manglings. llvm-svn: 208668 --- clang/lib/AST/MicrosoftMangle.cpp | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'clang/lib') diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index e38bdf9b1a4..58e14919810 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -112,19 +112,18 @@ public: raw_ostream &Out) override; void mangleCXXRTTI(QualType T, raw_ostream &Out) override; void mangleCXXRTTIName(QualType T, raw_ostream &Out) override; - void mangleCXXRTTIBaseClassDescriptor( - const CXXRecordDecl *Derived, ArrayRef BasePath, - uint32_t NVOffset, uint32_t VBPtrOffset, uint32_t VBTableOffset, - uint32_t Flags, raw_ostream &Out) override; + void mangleCXXRTTIBaseClassDescriptor(const CXXRecordDecl *Derived, + uint32_t NVOffset, uint32_t VBPtrOffset, + uint32_t VBTableOffset, uint32_t Flags, + raw_ostream &Out) override; void mangleCXXRTTIBaseClassArray(const CXXRecordDecl *Derived, raw_ostream &Out) override; void mangleCXXRTTIClassHierarchyDescriptor(const CXXRecordDecl *Derived, raw_ostream &Out) override; - void mangleCXXRTTICompleteObjectLocator(const CXXRecordDecl *Derived, - uint32_t OffsetFromTop, - uint32_t VFPtrToVtordispDelta, - uint32_t Flags, - raw_ostream &Out) override; + void + mangleCXXRTTICompleteObjectLocator(const CXXRecordDecl *Derived, + ArrayRef BasePath, + raw_ostream &Out) override; void mangleTypeName(QualType T, raw_ostream &) override; void mangleCXXCtor(const CXXConstructorDecl *D, CXXCtorType Type, raw_ostream &) override; @@ -2259,18 +2258,15 @@ void MicrosoftMangleContextImpl::mangleCXXRTTIName(QualType T, } void MicrosoftMangleContextImpl::mangleCXXRTTIBaseClassDescriptor( - const CXXRecordDecl *Derived, ArrayRef BasePath, - uint32_t NVOffset, uint32_t VBPtrOffset, uint32_t VBTableOffset, - uint32_t Flags, raw_ostream &Out) { + const CXXRecordDecl *Derived, uint32_t NVOffset, uint32_t VBPtrOffset, + uint32_t VBTableOffset, uint32_t Flags, raw_ostream &Out) { MicrosoftCXXNameMangler Mangler(*this, Out); Mangler.getStream() << "\01??_R1"; - Mangler.mangleName(Derived); - for (const CXXRecordDecl *RD : BasePath) - Mangler.mangleName(RD); Mangler.mangleNumber(NVOffset); Mangler.mangleNumber(VBPtrOffset); Mangler.mangleNumber(VBTableOffset); Mangler.mangleNumber(Flags); + Mangler.mangleName(Derived); Mangler.getStream() << "@8"; } @@ -2291,15 +2287,19 @@ void MicrosoftMangleContextImpl::mangleCXXRTTIClassHierarchyDescriptor( } void MicrosoftMangleContextImpl::mangleCXXRTTICompleteObjectLocator( - const CXXRecordDecl *Derived, uint32_t OffsetFromTop, - uint32_t VFPtrToVtordispDelta, uint32_t Flags, raw_ostream &Out) { + const CXXRecordDecl *Derived, ArrayRef BasePath, + raw_ostream &Out) { + // ::= ?_R4 + // [] @ + // NOTE: here is always 'B' (const). + // is always '6' for vftables. MicrosoftCXXNameMangler Mangler(*this, Out); Mangler.getStream() << "\01??_R4"; Mangler.mangleName(Derived); - Mangler.mangleNumber(Flags); - Mangler.mangleNumber(OffsetFromTop); - Mangler.mangleNumber(VFPtrToVtordispDelta); - Mangler.getStream() << "@8"; + Mangler.getStream() << "6B"; // '6' for vftable, 'B' for const. + for (const CXXRecordDecl *RD : BasePath) + Mangler.mangleName(RD); + Mangler.getStream() << '@'; } void MicrosoftMangleContextImpl::mangleTypeName(QualType T, raw_ostream &Out) { -- cgit v1.2.3