[llvm] r265993 - Fix some display bugs in llvm-pdbdump.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 11 13:39:18 PDT 2016


Author: zturner
Date: Mon Apr 11 15:39:17 2016
New Revision: 265993

URL: http://llvm.org/viewvc/llvm-project?rev=265993&view=rev
Log:
Fix some display bugs in llvm-pdbdump.

We were incorrectly reporting all non-64 bit integers as int64s.
This is most evident when trying to print the "short" type, but
in theory could happen with chars too (although usually chars use
a different builtin type).

Additionally, we were using the wrong check when deciding whether
to print an enum definition as a global enum.  We were checking
whether or not the enum was "nested", and if so saving it until
we print the class definition that it was nested in.  But this is
not correct in rare situations where the enum is nested, but the
class that it's nested in does not have type information in the PDB.
So instead we check if there is a class definition for the parent
in the PDB.  If so we save it for later, otherwise we print it.

Modified:
    llvm/trunk/test/DebugInfo/PDB/DIA/pdbdump-symbol-format.test
    llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp
    llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp

Modified: llvm/trunk/test/DebugInfo/PDB/DIA/pdbdump-symbol-format.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/DIA/pdbdump-symbol-format.test?rev=265993&r1=265992&r2=265993&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/DIA/pdbdump-symbol-format.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/DIA/pdbdump-symbol-format.test Mon Apr 11 15:39:17 2016
@@ -9,7 +9,7 @@
 ; The format is func [0x<rva_start>+<prologue_length> - 0x<rva_end>-<epilogue_length>]
 ; SYM_FORMAT: ---SYMBOLS---
 ; SYM_FORMAT: symbolformat-fpo.obj
-; SYM_FORMAT-DAG: func [{{.*}}] (FPO) unsigned __cdecl fpo_func(unsigned n)
+; SYM_FORMAT-DAG: func [{{.*}}] (FPO) unsigned int __cdecl fpo_func(unsigned int n)
 ; SYM_FORMAT: symbolformat.obj
 ; SYM_FORMAT-DAG: func [{{.*}}] (EBP) int __cdecl _purecall()
 ; SYM_FORMAT-DAG: func [{{.*}}] (EBP) int __cdecl main(int argc, char** argv)
@@ -44,7 +44,7 @@
 ; TYPES_2: data +0x09 char m_char
 ; TYPES_2: data +0x0a wchar_t m_wchar_t
 ; TYPES_2: data +0x0c int m_int
-; TYPES_2: data +0x10 unsigned m_unsigned
+; TYPES_2: data +0x10 unsigned int m_unsigned
 ; TYPES_2: data +0x14 long m_long
 ; TYPES_2: data +0x18 unsigned long m_unsigned_long
 ; TYPES_2: data +0x20 __int64 m_int64
@@ -55,6 +55,6 @@
 ; TYPES_2: }
 
 ; GLOBALS: ---GLOBALS---
-; GLOBALS-DAG: func [{{.*}}] (FPO) unsigned __cdecl fpo_func(unsigned n)
+; GLOBALS-DAG: func [{{.*}}] (FPO) unsigned int __cdecl fpo_func(unsigned int n)
 ; GLOBALS-DAG: data [{{.*}}] static void* g_global_pointer
 ; GLOBALS-DAG: data [{{.*}}] static int g_global_int

Modified: llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp?rev=265993&r1=265992&r2=265993&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/BuiltinDumper.cpp Mon Apr 11 15:39:17 2016
@@ -30,13 +30,31 @@ StringRef BuiltinDumper::getTypeName(con
       return "float";
     return "double";
   case PDB_BuiltinType::UInt:
-    if (Symbol.getLength() == 8)
+    switch (Symbol.getLength()) {
+    case 8:
       return "unsigned __int64";
-    return "unsigned";
+    case 4:
+      return "unsigned int";
+    case 2:
+      return "unsigned short";
+    case 1:
+      return "unsigned char";
+    default:
+      return "unsigned";
+    }
   case PDB_BuiltinType::Int:
-    if (Symbol.getLength() == 4)
+    switch (Symbol.getLength()) {
+    case 8:
+      return "__int64";
+    case 4:
       return "int";
-    return "__int64";
+    case 2:
+      return "short";
+    case 1:
+      return "char";
+    default:
+      return "int";
+    }
   case PDB_BuiltinType::Char:
     return "char";
   case PDB_BuiltinType::WCharT:

Modified: llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp?rev=265993&r1=265992&r2=265993&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/TypeDumper.cpp Mon Apr 11 15:39:17 2016
@@ -62,7 +62,7 @@ void TypeDumper::dump(const PDBSymbolTyp
   if (Printer.IsTypeExcluded(Symbol.getName()))
     return;
   // Dump member enums when dumping their class definition.
-  if (Symbol.isNested())
+  if (nullptr != Symbol.getClassParent())
     return;
 
   Printer.NewLine();




More information about the llvm-commits mailing list