]> granicus.if.org Git - llvm/commitdiff
Fix a few warnings and style issues in MS demangler.
authorZachary Turner <zturner@google.com>
Fri, 20 Jul 2018 18:07:33 +0000 (18:07 +0000)
committerZachary Turner <zturner@google.com>
Fri, 20 Jul 2018 18:07:33 +0000 (18:07 +0000)
Also remove a broken test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337591 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Demangle/MicrosoftDemangle.cpp
test/Demangle/ms-mangle.test

index eb27e612ae7621ce9e1a939bb186063005425947..bb955ca9b843ddace2e64795e3f773272a2c6603 100644 (file)
@@ -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;
   }
index 18e260b30c66a490d5bdee09dc0a9feaf6a17eb5..c17bbb274a9ad4d49bdfcec068e53d3b963c28e6 100644 (file)
@@ -3,9 +3,6 @@
 
 ; CHECK-NOT: Invalid mangled name
 
-?k@@3PTfoo@@DT1
-
-
 ?a@@3HA
 ; CHECK: int a