diff options
-rw-r--r-- | lib/CodeGen/MicrosoftCXXABI.cpp | 14 | ||||
-rw-r--r-- | test/CodeGenCXX/mangle-ms.cpp | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/lib/CodeGen/MicrosoftCXXABI.cpp b/lib/CodeGen/MicrosoftCXXABI.cpp index 1f3d788df1..b459ae2110 100644 --- a/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/lib/CodeGen/MicrosoftCXXABI.cpp @@ -289,8 +289,8 @@ void MicrosoftCXXNameMangler::mangleNumber(int64_t Number) { Out << '?'; Number = -Number; } - if (Number <= 9) { - Out << Number; + if (Number >= 1 && Number <= 10) { + Out << Number-1; } else { // We have to build up the encoding in reverse order, so it will come // out right when we write it out. @@ -935,8 +935,8 @@ void MicrosoftCXXNameMangler::mangleType(const TagType *T) { break; case TTK_Enum: Out << 'W'; - mangleNumber(getASTContext().getTypeSizeInChars( - cast<EnumDecl>(T->getDecl())->getIntegerType()).getQuantity()); + Out << getASTContext().getTypeSizeInChars( + cast<EnumDecl>(T->getDecl())->getIntegerType()).getQuantity(); break; } mangleName(T->getDecl()); @@ -977,7 +977,7 @@ void MicrosoftCXXNameMangler::mangleExtraDimensions(QualType ElementTy) { if (ElementTy->isConstantArrayType()) { const ConstantArrayType *CAT = static_cast<const ConstantArrayType *>(ElementTy.getTypePtr()); - Dimensions.push_back(CAT->getSize()-1); + Dimensions.push_back(CAT->getSize()); ElementTy = CAT->getElementType(); } else if (ElementTy->isVariableArrayType()) { assert(false && "Don't know how to mangle VLAs!"); @@ -991,8 +991,8 @@ void MicrosoftCXXNameMangler::mangleExtraDimensions(QualType ElementTy) { // If there are any additional dimensions, mangle them now. if (Dimensions.size() > 0) { Out << 'Y'; - // <dimension-count> ::= <number> # number of extra dimensions minus 1 - mangleNumber(Dimensions.size()-1); + // <dimension-count> ::= <number> # number of extra dimensions + mangleNumber(Dimensions.size()); for (unsigned Dim = 0; Dim < Dimensions.size(); ++Dim) { mangleNumber(Dimensions[Dim].getLimitedValue()); } diff --git a/test/CodeGenCXX/mangle-ms.cpp b/test/CodeGenCXX/mangle-ms.cpp index 6f1ac3e750..b011168bbb 100644 --- a/test/CodeGenCXX/mangle-ms.cpp +++ b/test/CodeGenCXX/mangle-ms.cpp @@ -8,7 +8,7 @@ // CHECK: @"\01?f@foo@@2DD" // CHECK: @"\01?g@bar@@2HA" // CHECK: @"\01?h@@3QAHA" -// CHECK: @"\01?i@@3PAY0BD@HA" +// CHECK: @"\01?i@@3PAY0BE@HA" // CHECK: @"\01?j@@3P6GHCE@ZA" // CHECK: @"\01?k@@3PTfoo@@DA" // CHECK: @"\01?l@@3P8foo@@AAHH@ZA" @@ -89,4 +89,4 @@ void delta(int * const a, const long &) {} // Array mangling. (It should be mangled as a const pointer, but that needs // to be fixed in Sema.) void epsilon(int a[][10][20]) {} -// CHECK: @"\01?epsilon@@YAXQAY19BD@H@Z" +// CHECK: @"\01?epsilon@@YAXQAY19BE@H@Z" |