LCOV - code coverage report
Current view: top level - lib/DebugInfo/PDB/Raw - RawError.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 17 32 53.1 %
Date: 2017-01-24 23:09:07 Functions: 5 10 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : #include "llvm/DebugInfo/PDB/Raw/RawError.h"
       2             : #include "llvm/Support/ErrorHandling.h"
       3             : #include "llvm/Support/ManagedStatic.h"
       4             : 
       5             : using namespace llvm;
       6             : using namespace llvm::pdb;
       7             : 
       8             : namespace {
       9             : // FIXME: This class is only here to support the transition to llvm::Error. It
      10             : // will be removed once this transition is complete. Clients should prefer to
      11             : // deal with the Error value directly, rather than converting to error_code.
      12           2 : class RawErrorCategory : public std::error_category {
      13             : public:
      14           0 :   const char *name() const noexcept override { return "llvm.pdb.raw"; }
      15             : 
      16           2 :   std::string message(int Condition) const override {
      17           2 :     switch (static_cast<raw_error_code>(Condition)) {
      18             :     case raw_error_code::unspecified:
      19           0 :       return "An unknown error has occurred.";
      20             :     case raw_error_code::feature_unsupported:
      21           0 :       return "The feature is unsupported by the implementation.";
      22             :     case raw_error_code::invalid_format:
      23           0 :       return "The record is in an unexpected format.";
      24             :     case raw_error_code::corrupt_file:
      25           2 :       return "The PDB file is corrupt.";
      26             :     case raw_error_code::insufficient_buffer:
      27             :       return "The buffer is not large enough to read the requested number of "
      28           0 :              "bytes.";
      29             :     case raw_error_code::no_stream:
      30           2 :       return "The specified stream could not be loaded.";
      31             :     case raw_error_code::index_out_of_bounds:
      32           0 :       return "The specified item does not exist in the array.";
      33             :     case raw_error_code::invalid_block_address:
      34           0 :       return "The specified block address is not valid.";
      35             :     case raw_error_code::duplicate_entry:
      36           0 :       return "The entry already exists.";
      37             :     case raw_error_code::no_entry:
      38           0 :       return "The entry does not exist.";
      39             :     case raw_error_code::not_writable:
      40           0 :       return "The PDB does not support writing.";
      41             :     case raw_error_code::invalid_tpi_hash:
      42           0 :       return "The Type record has an invalid hash value.";
      43             :     }
      44           0 :     llvm_unreachable("Unrecognized raw_error_code");
      45             :   }
      46             : };
      47             : } // end anonymous namespace
      48             : 
      49             : static ManagedStatic<RawErrorCategory> Category;
      50             : 
      51             : char RawError::ID = 0;
      52             : 
      53           4 : RawError::RawError(raw_error_code C) : RawError(C, "") {}
      54             : 
      55           0 : RawError::RawError(const std::string &Context)
      56           0 :     : RawError(raw_error_code::unspecified, Context) {}
      57             : 
      58           6 : RawError::RawError(raw_error_code C, const std::string &Context) : Code(C) {
      59           4 :   ErrMsg = "Native PDB Error: ";
      60           2 :   std::error_code EC = convertToErrorCode();
      61           2 :   if (Code != raw_error_code::unspecified)
      62           8 :     ErrMsg += EC.message() + "  ";
      63           2 :   if (!Context.empty())
      64           1 :     ErrMsg += Context;
      65           2 : }
      66             : 
      67           4 : void RawError::log(raw_ostream &OS) const { OS << ErrMsg << "\n"; }
      68             : 
      69           0 : const std::string &RawError::getErrorMessage() const { return ErrMsg; }
      70             : 
      71           2 : std::error_code RawError::convertToErrorCode() const {
      72           2 :   return std::error_code(static_cast<int>(Code), *Category);
      73             : }

Generated by: LCOV version 1.13