summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/MicrosoftMangle.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-04-23 05:16:56 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-04-23 05:16:56 +0000
commite3785bb03edd18b108bd910f2af2bf1f4988aa65 (patch)
treebd5c5befa5b1be35ba390d983aaf68469543d05b /clang/lib/AST/MicrosoftMangle.cpp
parentb926dbcfe35994690ab576d072f22db8e8f6ffc7 (diff)
downloadbcm5719-llvm-e3785bb03edd18b108bd910f2af2bf1f4988aa65.tar.gz
bcm5719-llvm-e3785bb03edd18b108bd910f2af2bf1f4988aa65.zip
MS ABI: Implement mangling for ref-qualifiers on methods
Mangle ref-qualifiers like the Nov 2013 CTP. This fixes PR19361. llvm-svn: 206946
Diffstat (limited to 'clang/lib/AST/MicrosoftMangle.cpp')
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index 1c713d0514a..edea497d994 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -236,6 +236,7 @@ private:
void mangleOperatorName(OverloadedOperatorKind OO, SourceLocation Loc);
void mangleCXXDtorType(CXXDtorType T);
void mangleQualifiers(Qualifiers Quals, bool IsMember);
+ void mangleRefQualifier(RefQualifierKind RefQualifier);
void manglePointerCVQualifiers(Qualifiers Quals);
void manglePointerExtQualifiers(Qualifiers Quals, const Type *PointeeType);
@@ -1257,6 +1258,24 @@ void MicrosoftCXXNameMangler::mangleQualifiers(Qualifiers Quals,
}
void
+MicrosoftCXXNameMangler::mangleRefQualifier(RefQualifierKind RefQualifier) {
+ // <ref-qualifier> ::= G # lvalue reference
+ // ::= H # rvalue-reference
+ switch (RefQualifier) {
+ case RQ_None:
+ break;
+
+ case RQ_LValue:
+ Out << 'G';
+ break;
+
+ case RQ_RValue:
+ Out << 'H';
+ break;
+ }
+}
+
+void
MicrosoftCXXNameMangler::manglePointerExtQualifiers(Qualifiers Quals,
const Type *PointeeType) {
bool HasRestrict = Quals.hasRestrict();
@@ -1519,6 +1538,7 @@ void MicrosoftCXXNameMangler::mangleFunctionType(const FunctionType *T,
if (IsInstMethod) {
Qualifiers Quals = Qualifiers::fromCVRMask(Proto->getTypeQuals());
manglePointerExtQualifiers(Quals, 0);
+ mangleRefQualifier(Proto->getRefQualifier());
mangleQualifiers(Quals, false);
}
OpenPOWER on IntegriCloud