45 lines · c
1//==- PrettyStackTraceLocationContext.h - show analysis backtrace --*- C++ -*-//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_STATICANALYZER_CORE_PRETTYSTACKTRACELOCATIONCONTEXT_H10#define LLVM_CLANG_LIB_STATICANALYZER_CORE_PRETTYSTACKTRACELOCATIONCONTEXT_H11 12#include "clang/Analysis/AnalysisDeclContext.h"13 14namespace clang {15namespace ento {16 17/// While alive, includes the current analysis stack in a crash trace.18///19/// Example:20/// \code21/// 0. Program arguments: ...22/// 1. <eof> parser at end of file23/// 2. While analyzing stack:24/// #0 void inlined()25/// #1 void test()26/// 3. crash-trace.c:6:3: Error evaluating statement27/// \endcode28class PrettyStackTraceLocationContext : public llvm::PrettyStackTraceEntry {29 const LocationContext *LCtx;30public:31 PrettyStackTraceLocationContext(const LocationContext *LC) : LCtx(LC) {32 assert(LCtx);33 }34 35 void print(raw_ostream &Out) const override {36 Out << "While analyzing stack: \n";37 LCtx->dumpStack(Out);38 }39};40 41} // end ento namespace42} // end clang namespace43 44#endif45