//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file implements TrapReasonBuilder and related classes. /// //===----------------------------------------------------------------------===// #include "TrapReasonBuilder.h" namespace clang { namespace CodeGen { TrapReasonBuilder::TrapReasonBuilder(DiagnosticsEngine *DiagObj, unsigned DiagID, TrapReason &TR) : DiagnosticBuilder(DiagObj, SourceLocation(), DiagID), TR(TR) { assert(DiagObj->getDiagnosticIDs()->isTrapDiag(DiagID)); } TrapReasonBuilder::~TrapReasonBuilder() { // Store the trap message and category into the TrapReason object. getMessage(TR.Message); TR.Category = getCategory(); // Make sure that when `DiagnosticBuilder::~DiagnosticBuilder()` // calls `Emit()` that it does nothing. Clear(); } void TrapReasonBuilder::getMessage(SmallVectorImpl &Storage) { // Render the Diagnostic Diagnostic Info(getDiagnosticsEngine(), *this); Info.FormatDiagnostic(Storage); } StringRef TrapReasonBuilder::getCategory() { auto CategoryID = getDiagnosticsEngine()->getDiagnosticIDs()->getCategoryNumberForDiag( getDiagID()); if (CategoryID == 0) return ""; return getDiagnosticsEngine()->getDiagnosticIDs()->getCategoryNameFromID( CategoryID); } } // namespace CodeGen } // namespace clang