forked from OSchip/llvm-project
MS ABI: Implement mangling for ref-qualifiers on methods
Mangle ref-qualifiers like the Nov 2013 CTP. This fixes PR19361. llvm-svn: 206946
This commit is contained in:
parent
b926dbcfe3
commit
e3785bb03e
|
@ -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);
|
||||
|
||||
|
@ -1256,6 +1257,24 @@ void MicrosoftCXXNameMangler::mangleQualifiers(Qualifiers Quals,
|
|||
// FIXME: For now, just drop all extension qualifiers on the floor.
|
||||
}
|
||||
|
||||
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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -119,3 +119,14 @@ inline int define_lambda() {
|
|||
int call_lambda() {
|
||||
return define_lambda();
|
||||
}
|
||||
|
||||
namespace PR19361 {
|
||||
struct A {
|
||||
void foo() __restrict &;
|
||||
void foo() __restrict &&;
|
||||
};
|
||||
void A::foo() __restrict & {}
|
||||
// CHECK-DAG: @"\01?foo@A@PR19361@@QIGAEXXZ"
|
||||
void A::foo() __restrict && {}
|
||||
// CHECK-DAG: @"\01?foo@A@PR19361@@QIHAEXXZ"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue