//===- PDBSymDumper.cpp - ---------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "llvm/DebugInfo/PDB/PDBSymDumper.h"
#include "llvm/Support/ErrorHandling.h"

using namespace llvm;
using namespace llvm::pdb;

#define PDB_SYMDUMP_UNREACHABLE(Type)                                          \
  if (RequireImpl)                                                             \
    llvm_unreachable("Attempt to dump " #Type " with no dump implementation");

PDBSymDumper::PDBSymDumper(bool ShouldRequireImpl)
    : RequireImpl(ShouldRequireImpl) {}

PDBSymDumper::~PDBSymDumper() = default;

void PDBSymDumper::dump(const PDBSymbolAnnotation &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolAnnotation)
}

void PDBSymDumper::dump(const PDBSymbolBlock &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolBlock)
}

void PDBSymDumper::dump(const PDBSymbolCompiland &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolCompiland)
}

void PDBSymDumper::dump(const PDBSymbolCompilandDetails &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolCompilandDetails)
}

void PDBSymDumper::dump(const PDBSymbolCompilandEnv &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolCompilandEnv)
}

void PDBSymDumper::dump(const PDBSymbolCustom &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolCustom)
}

void PDBSymDumper::dump(const PDBSymbolData &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolData)
}

void PDBSymDumper::dump(const PDBSymbolExe &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolExe)
}

void PDBSymDumper::dump(const PDBSymbolFunc &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolFunc)
}

void PDBSymDumper::dump(const PDBSymbolFuncDebugEnd &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolFuncDebugEnd)
}

void PDBSymDumper::dump(const PDBSymbolFuncDebugStart &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolFuncDebugStart)
}

void PDBSymDumper::dump(const PDBSymbolLabel &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolLabel)
}

void PDBSymDumper::dump(const PDBSymbolPublicSymbol &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolPublicSymbol)
}

void PDBSymDumper::dump(const PDBSymbolThunk &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolThunk)
}

void PDBSymDumper::dump(const PDBSymbolTypeArray &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeArray)
}

void PDBSymDumper::dump(const PDBSymbolTypeBaseClass &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeBaseClass)
}

void PDBSymDumper::dump(const PDBSymbolTypeBuiltin &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeBuiltin)
}

void PDBSymDumper::dump(const PDBSymbolTypeCustom &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeCustom)
}

void PDBSymDumper::dump(const PDBSymbolTypeDimension &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeDimension)
}

void PDBSymDumper::dump(const PDBSymbolTypeEnum &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeEnum)
}

void PDBSymDumper::dump(const PDBSymbolTypeFriend &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeFriend)
}

void PDBSymDumper::dump(const PDBSymbolTypeFunctionArg &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeFunctionArg)
}

void PDBSymDumper::dump(const PDBSymbolTypeFunctionSig &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeFunctionSig)
}

void PDBSymDumper::dump(const PDBSymbolTypeManaged &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeManaged)
}

void PDBSymDumper::dump(const PDBSymbolTypePointer &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypePointer)
}

void PDBSymDumper::dump(const PDBSymbolTypeTypedef &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeTypedef)
}

void PDBSymDumper::dump(const PDBSymbolTypeUDT &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeUDT)
}

void PDBSymDumper::dump(const PDBSymbolTypeVTable &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeVTable)
}

void PDBSymDumper::dump(const PDBSymbolTypeVTableShape &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolTypeVTableShape)
}

void PDBSymDumper::dump(const PDBSymbolUnknown &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolUnknown)
}

void PDBSymDumper::dump(const PDBSymbolUsingNamespace &Symbol) {
  PDB_SYMDUMP_UNREACHABLE(PDBSymbolUsingNamespace)
}
