1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00
llvm-mirror/tools/llvm-pdbutil/PrettyBuiltinDumper.cpp
Adrian McCarthy 7a5751612e Fix llvm-pdbutil to handle new built-in types
Summary:
The built-in PDB types enum has been extended to include char16_t and char32_t.
llvm-pdbutil was hitting an llvm_unreachable because it didn't know about these
new values.  The new values are not yet in the DIA documentation, but are
listed in the cvconst.h header that comes as part of the DIA SDK.

Reviewers: asmith, zturner, rnk

Subscribers: stella.stamenova, llvm-commits, sanjoy

Differential Revision: https://reviews.llvm.org/D43646

llvm-svn: 325838
2018-02-22 23:16:56 +00:00

99 lines
2.6 KiB
C++

//===- PrettyBuiltinDumper.cpp ---------------------------------- *- C++ *-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "PrettyBuiltinDumper.h"
#include "LinePrinter.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
using namespace llvm;
using namespace llvm::pdb;
BuiltinDumper::BuiltinDumper(LinePrinter &P)
: PDBSymDumper(false), Printer(P) {}
void BuiltinDumper::start(const PDBSymbolTypeBuiltin &Symbol) {
if (Symbol.isConstType())
WithColor(Printer, PDB_ColorItem::Keyword).get() << "const ";
if (Symbol.isVolatileType())
WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile ";
WithColor(Printer, PDB_ColorItem::Type).get() << getTypeName(Symbol);
}
StringRef BuiltinDumper::getTypeName(const PDBSymbolTypeBuiltin &Symbol) {
PDB_BuiltinType Type = Symbol.getBuiltinType();
switch (Type) {
case PDB_BuiltinType::Float:
if (Symbol.getLength() == 4)
return "float";
return "double";
case PDB_BuiltinType::UInt:
switch (Symbol.getLength()) {
case 8:
return "unsigned __int64";
case 4:
return "unsigned int";
case 2:
return "unsigned short";
case 1:
return "unsigned char";
default:
return "unsigned";
}
case PDB_BuiltinType::Int:
switch (Symbol.getLength()) {
case 8:
return "__int64";
case 4:
return "int";
case 2:
return "short";
case 1:
return "char";
default:
return "int";
}
case PDB_BuiltinType::Char:
return "char";
case PDB_BuiltinType::WCharT:
return "wchar_t";
case PDB_BuiltinType::Void:
return "void";
case PDB_BuiltinType::Long:
return "long";
case PDB_BuiltinType::ULong:
return "unsigned long";
case PDB_BuiltinType::Bool:
return "bool";
case PDB_BuiltinType::Currency:
return "CURRENCY";
case PDB_BuiltinType::Date:
return "DATE";
case PDB_BuiltinType::Variant:
return "VARIANT";
case PDB_BuiltinType::Complex:
return "complex";
case PDB_BuiltinType::Bitfield:
return "bitfield";
case PDB_BuiltinType::BSTR:
return "BSTR";
case PDB_BuiltinType::HResult:
return "HRESULT";
case PDB_BuiltinType::BCD:
return "HRESULT";
case PDB_BuiltinType::Char16:
return "char16_t";
case PDB_BuiltinType::Char32:
return "char32_t";
case PDB_BuiltinType::None:
return "...";
}
llvm_unreachable("Unknown PDB_BuiltinType");
}