Skip to content
This repository was archived by the owner on Feb 5, 2019. It is now read-only.

Commit aeb65f1

Browse files
author
Zachary Turner
committed
Fix a few warnings and style issues in MS demangler.
Also remove a broken test case. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337591 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 34f6b25 commit aeb65f1

File tree

2 files changed

+24
-20
lines changed

2 files changed

+24
-20
lines changed

lib/Demangle/MicrosoftDemangle.cpp

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ enum FuncClass : uint8_t {
167167
Global = 1 << 3,
168168
Static = 1 << 4,
169169
Virtual = 1 << 5,
170-
FFar = 1 << 6,
170+
Far = 1 << 6,
171171
};
172172

173173
namespace {
@@ -494,6 +494,7 @@ void PointerType::outputPre(OutputStream &OS) {
494494
else
495495
OS << "&";
496496

497+
// FIXME: We should output this, but it requires updating lots of tests.
497498
// if (Ty.Quals & Q_Pointer64)
498499
// OS << " __ptr64";
499500
if (Quals & Q_Restrict)
@@ -625,18 +626,21 @@ class Demangler {
625626
ReferenceKind demangleReferenceKind();
626627

627628
Qualifiers demangleFunctionQualifiers();
628-
Qualifiers demangleVariablQ_ifiers();
629-
Qualifiers demangleReturnTypQ_ifiers();
629+
Qualifiers demangleVariablQualifiers();
630+
Qualifiers demangleReturnTypQualifiers();
630631

631632
Qualifiers demangleQualifiers(
632633
QualifierMangleLocation Location = QualifierMangleLocation::Detect);
633634

635+
// The result is written to this stream.
636+
OutputStream OS;
637+
634638
// Mangled symbol. demangle* functions shorten this string
635639
// as they parse it.
636640
StringView MangledName;
637641

638642
// A parsed mangled symbol.
639-
Type *SymbolType;
643+
Type *SymbolType = nullptr;
640644

641645
// The main symbol name. (e.g. "ns::foo" in "int ns::foo()".)
642646
Name *SymbolName = nullptr;
@@ -648,9 +652,6 @@ class Demangler {
648652
// special name @[0-9]. This is a storage for the first 10 BackReferences.
649653
StringView BackReferences[10];
650654
size_t BackRefCount = 0;
651-
652-
// The result is written to this stream.
653-
OutputStream OS;
654655
};
655656
} // namespace
656657

@@ -969,7 +970,7 @@ int Demangler::demangleFunctionClass() {
969970
case 'A':
970971
return Private;
971972
case 'B':
972-
return Private | FFar;
973+
return Private | Far;
973974
case 'C':
974975
return Private | Static;
975976
case 'D':
@@ -981,31 +982,31 @@ int Demangler::demangleFunctionClass() {
981982
case 'I':
982983
return Protected;
983984
case 'J':
984-
return Protected | FFar;
985+
return Protected | Far;
985986
case 'K':
986987
return Protected | Static;
987988
case 'L':
988-
return Protected | Static | FFar;
989+
return Protected | Static | Far;
989990
case 'M':
990991
return Protected | Virtual;
991992
case 'N':
992-
return Protected | Virtual | FFar;
993+
return Protected | Virtual | Far;
993994
case 'Q':
994995
return Public;
995996
case 'R':
996-
return Public | FFar;
997+
return Public | Far;
997998
case 'S':
998999
return Public | Static;
9991000
case 'T':
1000-
return Public | Static | FFar;
1001+
return Public | Static | Far;
10011002
case 'U':
10021003
return Public | Virtual;
10031004
case 'V':
1004-
return Public | Virtual | FFar;
1005+
return Public | Virtual | Far;
10051006
case 'Y':
10061007
return Global;
10071008
case 'Z':
1008-
return Global | FFar;
1009+
return Global | Far;
10091010
}
10101011

10111012
Error = true;
@@ -1082,7 +1083,7 @@ StorageClass Demangler::demangleVariableStorageClass() {
10821083
return StorageClass::None;
10831084
}
10841085

1085-
Qualifiers Demangler::demangleVariablQ_ifiers() {
1086+
Qualifiers Demangler::demangleVariablQualifiers() {
10861087
SwapAndRestore<StringView> RestoreOnError(MangledName, MangledName);
10871088
RestoreOnError.shouldRestore(false);
10881089

@@ -1110,7 +1111,7 @@ Qualifiers Demangler::demangleVariablQ_ifiers() {
11101111
return Q_None;
11111112
}
11121113

1113-
Qualifiers Demangler::demangleReturnTypQ_ifiers() {
1114+
Qualifiers Demangler::demangleReturnTypQualifiers() {
11141115
if (!MangledName.consumeFront("?"))
11151116
return Q_None;
11161117

@@ -1307,6 +1308,10 @@ Type *Demangler::demangleBasicType() {
13071308
Ty->Prim = PrimTy::Ldouble;
13081309
break;
13091310
case '_': {
1311+
if (MangledName.empty()) {
1312+
Error = true;
1313+
return nullptr;
1314+
}
13101315
switch (MangledName.popFront()) {
13111316
case 'N':
13121317
Ty->Prim = PrimTy::Bool;
@@ -1320,6 +1325,8 @@ Type *Demangler::demangleBasicType() {
13201325
case 'W':
13211326
Ty->Prim = PrimTy::Wchar;
13221327
break;
1328+
default:
1329+
assert(false);
13231330
}
13241331
break;
13251332
}

test/Demangle/ms-mangle.test

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
; CHECK-NOT: Invalid mangled name
55

6-
?k@@3PTfoo@@DT1
7-
8-
96
?a@@3HA
107
; CHECK: int a
118

0 commit comments

Comments
 (0)