diff options
author | Zachary Turner <zturner@google.com> | 2018-07-20 18:07:33 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2018-07-20 18:07:33 +0000 |
commit | 91ecedd29e4e93e96f306aecdb1bcd367a7f67eb (patch) | |
tree | b2c020ffef5f134f96308b5976d84820d4b63b24 | |
parent | 28ac623f6f2434bcdd78d5ace01ae0fedba21b90 (diff) | |
download | bcm5719-llvm-91ecedd29e4e93e96f306aecdb1bcd367a7f67eb.tar.gz bcm5719-llvm-91ecedd29e4e93e96f306aecdb1bcd367a7f67eb.zip |
Fix a few warnings and style issues in MS demangler.
Also remove a broken test case.
llvm-svn: 337591
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 41 | ||||
-rw-r--r-- | llvm/test/Demangle/ms-mangle.test | 3 |
2 files changed, 24 insertions, 20 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index eb27e612ae7..bb955ca9b84 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -167,7 +167,7 @@ enum FuncClass : uint8_t { Global = 1 << 3, Static = 1 << 4, Virtual = 1 << 5, - FFar = 1 << 6, + Far = 1 << 6, }; namespace { @@ -494,6 +494,7 @@ void PointerType::outputPre(OutputStream &OS) { else OS << "&"; + // FIXME: We should output this, but it requires updating lots of tests. // if (Ty.Quals & Q_Pointer64) // OS << " __ptr64"; if (Quals & Q_Restrict) @@ -625,18 +626,21 @@ private: ReferenceKind demangleReferenceKind(); Qualifiers demangleFunctionQualifiers(); - Qualifiers demangleVariablQ_ifiers(); - Qualifiers demangleReturnTypQ_ifiers(); + Qualifiers demangleVariablQualifiers(); + Qualifiers demangleReturnTypQualifiers(); Qualifiers demangleQualifiers( QualifierMangleLocation Location = QualifierMangleLocation::Detect); + // The result is written to this stream. + OutputStream OS; + // Mangled symbol. demangle* functions shorten this string // as they parse it. StringView MangledName; // A parsed mangled symbol. - Type *SymbolType; + Type *SymbolType = nullptr; // The main symbol name. (e.g. "ns::foo" in "int ns::foo()".) Name *SymbolName = nullptr; @@ -648,9 +652,6 @@ private: // special name @[0-9]. This is a storage for the first 10 BackReferences. StringView BackReferences[10]; size_t BackRefCount = 0; - - // The result is written to this stream. - OutputStream OS; }; } // namespace @@ -969,7 +970,7 @@ int Demangler::demangleFunctionClass() { case 'A': return Private; case 'B': - return Private | FFar; + return Private | Far; case 'C': return Private | Static; case 'D': @@ -981,31 +982,31 @@ int Demangler::demangleFunctionClass() { case 'I': return Protected; case 'J': - return Protected | FFar; + return Protected | Far; case 'K': return Protected | Static; case 'L': - return Protected | Static | FFar; + return Protected | Static | Far; case 'M': return Protected | Virtual; case 'N': - return Protected | Virtual | FFar; + return Protected | Virtual | Far; case 'Q': return Public; case 'R': - return Public | FFar; + return Public | Far; case 'S': return Public | Static; case 'T': - return Public | Static | FFar; + return Public | Static | Far; case 'U': return Public | Virtual; case 'V': - return Public | Virtual | FFar; + return Public | Virtual | Far; case 'Y': return Global; case 'Z': - return Global | FFar; + return Global | Far; } Error = true; @@ -1082,7 +1083,7 @@ StorageClass Demangler::demangleVariableStorageClass() { return StorageClass::None; } -Qualifiers Demangler::demangleVariablQ_ifiers() { +Qualifiers Demangler::demangleVariablQualifiers() { SwapAndRestore<StringView> RestoreOnError(MangledName, MangledName); RestoreOnError.shouldRestore(false); @@ -1110,7 +1111,7 @@ Qualifiers Demangler::demangleVariablQ_ifiers() { return Q_None; } -Qualifiers Demangler::demangleReturnTypQ_ifiers() { +Qualifiers Demangler::demangleReturnTypQualifiers() { if (!MangledName.consumeFront("?")) return Q_None; @@ -1307,6 +1308,10 @@ Type *Demangler::demangleBasicType() { Ty->Prim = PrimTy::Ldouble; break; case '_': { + if (MangledName.empty()) { + Error = true; + return nullptr; + } switch (MangledName.popFront()) { case 'N': Ty->Prim = PrimTy::Bool; @@ -1320,6 +1325,8 @@ Type *Demangler::demangleBasicType() { case 'W': Ty->Prim = PrimTy::Wchar; break; + default: + assert(false); } break; } diff --git a/llvm/test/Demangle/ms-mangle.test b/llvm/test/Demangle/ms-mangle.test index 18e260b30c6..c17bbb274a9 100644 --- a/llvm/test/Demangle/ms-mangle.test +++ b/llvm/test/Demangle/ms-mangle.test @@ -3,9 +3,6 @@ ; CHECK-NOT: Invalid mangled name -?k@@3PTfoo@@DT1 - - ?a@@3HA ; CHECK: int a |