Home | History | Annotate | Line # | Download | only in Core
      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 
     14 namespace clang {
     15 namespace 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
     28 class PrettyStackTraceLocationContext : public llvm::PrettyStackTraceEntry {
     29   const LocationContext *LCtx;
     30 public:
     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