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-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_LIB_STATICANALYZER_CORE_PRETTYSTACKTRACELOCATIONCONTEXT_H
10#define LLVM_CLANG_LIB_STATICANALYZER_CORE_PRETTYSTACKTRACELOCATIONCONTEXT_H
11
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/// \code
21/// 0. Program arguments: ...
22/// 1. <eof> parser at end of file
23/// 2. While analyzing stack:
24/// #0 void inlined()
25/// #1 void test()
26/// 3. crash-trace.c:6:3: Error evaluating statement
27/// \endcode
28class 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 namespace
42} // end clang namespace
43
44#endif
45