summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-07-20 18:07:33 +0000
committerZachary Turner <zturner@google.com>2018-07-20 18:07:33 +0000
commit91ecedd29e4e93e96f306aecdb1bcd367a7f67eb (patch)
treeb2c020ffef5f134f96308b5976d84820d4b63b24
parent28ac623f6f2434bcdd78d5ace01ae0fedba21b90 (diff)
downloadbcm5719-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.cpp41
-rw-r--r--llvm/test/Demangle/ms-mangle.test3
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
OpenPOWER on IntegriCloud