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