@@ -167,7 +167,7 @@ enum FuncClass : uint8_t {
167
167
Global = 1 << 3 ,
168
168
Static = 1 << 4 ,
169
169
Virtual = 1 << 5 ,
170
- FFar = 1 << 6 ,
170
+ Far = 1 << 6 ,
171
171
};
172
172
173
173
namespace {
@@ -494,6 +494,7 @@ void PointerType::outputPre(OutputStream &OS) {
494
494
else
495
495
OS << " &" ;
496
496
497
+ // FIXME: We should output this, but it requires updating lots of tests.
497
498
// if (Ty.Quals & Q_Pointer64)
498
499
// OS << " __ptr64";
499
500
if (Quals & Q_Restrict)
@@ -625,18 +626,21 @@ class Demangler {
625
626
ReferenceKind demangleReferenceKind ();
626
627
627
628
Qualifiers demangleFunctionQualifiers ();
628
- Qualifiers demangleVariablQ_ifiers ();
629
- Qualifiers demangleReturnTypQ_ifiers ();
629
+ Qualifiers demangleVariablQualifiers ();
630
+ Qualifiers demangleReturnTypQualifiers ();
630
631
631
632
Qualifiers demangleQualifiers (
632
633
QualifierMangleLocation Location = QualifierMangleLocation::Detect);
633
634
635
+ // The result is written to this stream.
636
+ OutputStream OS;
637
+
634
638
// Mangled symbol. demangle* functions shorten this string
635
639
// as they parse it.
636
640
StringView MangledName;
637
641
638
642
// A parsed mangled symbol.
639
- Type *SymbolType;
643
+ Type *SymbolType = nullptr ;
640
644
641
645
// The main symbol name. (e.g. "ns::foo" in "int ns::foo()".)
642
646
Name *SymbolName = nullptr ;
@@ -648,9 +652,6 @@ class Demangler {
648
652
// special name @[0-9]. This is a storage for the first 10 BackReferences.
649
653
StringView BackReferences[10 ];
650
654
size_t BackRefCount = 0 ;
651
-
652
- // The result is written to this stream.
653
- OutputStream OS;
654
655
};
655
656
} // namespace
656
657
@@ -969,7 +970,7 @@ int Demangler::demangleFunctionClass() {
969
970
case ' A' :
970
971
return Private;
971
972
case ' B' :
972
- return Private | FFar ;
973
+ return Private | Far ;
973
974
case ' C' :
974
975
return Private | Static;
975
976
case ' D' :
@@ -981,31 +982,31 @@ int Demangler::demangleFunctionClass() {
981
982
case ' I' :
982
983
return Protected;
983
984
case ' J' :
984
- return Protected | FFar ;
985
+ return Protected | Far ;
985
986
case ' K' :
986
987
return Protected | Static;
987
988
case ' L' :
988
- return Protected | Static | FFar ;
989
+ return Protected | Static | Far ;
989
990
case ' M' :
990
991
return Protected | Virtual;
991
992
case ' N' :
992
- return Protected | Virtual | FFar ;
993
+ return Protected | Virtual | Far ;
993
994
case ' Q' :
994
995
return Public;
995
996
case ' R' :
996
- return Public | FFar ;
997
+ return Public | Far ;
997
998
case ' S' :
998
999
return Public | Static;
999
1000
case ' T' :
1000
- return Public | Static | FFar ;
1001
+ return Public | Static | Far ;
1001
1002
case ' U' :
1002
1003
return Public | Virtual;
1003
1004
case ' V' :
1004
- return Public | Virtual | FFar ;
1005
+ return Public | Virtual | Far ;
1005
1006
case ' Y' :
1006
1007
return Global;
1007
1008
case ' Z' :
1008
- return Global | FFar ;
1009
+ return Global | Far ;
1009
1010
}
1010
1011
1011
1012
Error = true ;
@@ -1082,7 +1083,7 @@ StorageClass Demangler::demangleVariableStorageClass() {
1082
1083
return StorageClass::None;
1083
1084
}
1084
1085
1085
- Qualifiers Demangler::demangleVariablQ_ifiers () {
1086
+ Qualifiers Demangler::demangleVariablQualifiers () {
1086
1087
SwapAndRestore<StringView> RestoreOnError (MangledName, MangledName);
1087
1088
RestoreOnError.shouldRestore (false );
1088
1089
@@ -1110,7 +1111,7 @@ Qualifiers Demangler::demangleVariablQ_ifiers() {
1110
1111
return Q_None;
1111
1112
}
1112
1113
1113
- Qualifiers Demangler::demangleReturnTypQ_ifiers () {
1114
+ Qualifiers Demangler::demangleReturnTypQualifiers () {
1114
1115
if (!MangledName.consumeFront (" ?" ))
1115
1116
return Q_None;
1116
1117
@@ -1307,6 +1308,10 @@ Type *Demangler::demangleBasicType() {
1307
1308
Ty->Prim = PrimTy::Ldouble;
1308
1309
break ;
1309
1310
case ' _' : {
1311
+ if (MangledName.empty ()) {
1312
+ Error = true ;
1313
+ return nullptr ;
1314
+ }
1310
1315
switch (MangledName.popFront ()) {
1311
1316
case ' N' :
1312
1317
Ty->Prim = PrimTy::Bool;
@@ -1320,6 +1325,8 @@ Type *Demangler::demangleBasicType() {
1320
1325
case ' W' :
1321
1326
Ty->Prim = PrimTy::Wchar;
1322
1327
break ;
1328
+ default :
1329
+ assert (false );
1323
1330
}
1324
1331
break ;
1325
1332
}
0 commit comments