void report_fatal_error(Error Err, bool GenCrashDiag) { assert(Err && "report_fatal_error called with success value"); std::string ErrMsg; { raw_string_ostream ErrStream(ErrMsg); logAllUnhandledErrors(std::move(Err), ErrStream); } report_fatal_error(ErrMsg); }
void MemPoolDebug::DtorErrorMesg(void) const { ErrStream() << "[ERR] MemPoolDebug(\"" << myName << "\") ERROR: dtor" << ", unfreed slices: NumSlices=" << myInUseCount << endl; }
void MemPoolDebug::FreeErrorMesg(void* ptr, const string& reason) const { ErrStream() << "[ERR] MemPoolDebug(\"" << myName << "\") ERROR: free, seq=" << setw(4) << myFreeCount << ", addr=" << ptr << ": " << reason << endl; }
void MemPoolDebug::PrintSlice(void* ptr) const { slice_t p = static_cast<slice_t>(ptr) - myMarginWords; size_t i=0; ErrStream() << "[ERR] Nature addr : value (decimal)" << endl; ErrStream() << "[ERR] =============================================" << endl; for (; i < myMarginWords; ++i) { ErrStream() << "[ERR] margin " << setw(12) << static_cast<void*>(&p[i]) << ":" << setw(12) << static_cast<void*>(p[i]) << setw(12) << reinterpret_cast<unsigned long>(p[i]); if (p[i] != MEMPOOL_ALLOCATED_WORD_BEFORE) ErrStream() << " <--- WRONG! Should have been " << static_cast<void*>(MEMPOOL_ALLOCATED_WORD_BEFORE); ErrStream() << endl; } ErrStream() << "[ERR] ---------------------------------------------" << endl; for (; i < mySliceWords - myMarginWords; ++i) { ErrStream() << "[ERR] data " << setw(12) << static_cast<void*>(&p[i]) << ":" << setw(12) << static_cast<void*>(p[i]) << setw(12) << reinterpret_cast<unsigned long>(p[i]) << endl; } ErrStream() << "[ERR] ---------------------------------------------" << endl; for (i = mySliceWords - myMarginWords; i < mySliceWords; ++i) { ErrStream() << "[ERR] margin " << setw(12) << static_cast<void*>(&p[i]) << ":" << setw(12) << static_cast<void*>(p[i]) << setw(12) << reinterpret_cast<unsigned long>(p[i]); if (p[i] != MEMPOOL_ALLOCATED_WORD_AFTER) ErrStream() << " <--- WRONG! Should have been " << static_cast<void*>(MEMPOOL_ALLOCATED_WORD_AFTER); ErrStream() << endl; } ErrStream() << "[ERR] =============================================" << endl; ErrStream() << endl; }
void MemPoolDebug::OverwriteErrorMesg(slice_t slice_addr, void* overwritten_addr) const { ErrStream() << "[ERR] MemPoolDebug(\"" << myName << "\") ERROR: OVERWRITTEN freed slice, slice_addr=" << slice_addr << ", overwritten at addr=" << overwritten_addr << endl; }