summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-05-13 06:57:43 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-05-13 06:57:43 +0000
commitaeb55c9ded95eb3be7cf71fa82e5acda935903ed (patch)
treec81eb1f771fb58413dac4dd9d4dd2867f2f4f2af /clang/lib/AST/MicrosoftMangle.cpp
parentb575ee8294e9a6472cb7fb05339d40996247053e (diff)
downloadbcm5719-llvm-aeb55c9ded95eb3be7cf71fa82e5acda935903ed.tar.gz
bcm5719-llvm-aeb55c9ded95eb3be7cf71fa82e5acda935903ed.zip
MS ABI: Tighten RTTI mangling
r208661 contained WIP code, commit the *actual* manglings. llvm-svn: 208668
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp42
1 files changed, 21 insertions, 21 deletions
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<const CXXRecordDecl *> 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<const CXXRecordDecl *> 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<const CXXRecordDecl *> 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<const CXXRecordDecl *> BasePath,
+ raw_ostream &Out) {
+ // <mangled-name> ::= ?_R4 <class-name> <storage-class>
+ // <cvr-qualifiers> [<name>] @
+ // NOTE: <cvr-qualifiers> here is always 'B' (const). <storage-class>
+ // 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) {
OpenPOWER on IntegriCloud