1//===- PrettyDeclStackTrace.h - Stack trace for decl processing -*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines an llvm::PrettyStackTraceEntry object for showing
11// that a particular declaration was being processed when a crash
12// occurred.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_CLANG_SEMA_PRETTY_DECL_STACK_TRACE_H
17#define LLVM_CLANG_SEMA_PRETTY_DECL_STACK_TRACE_H
18
19#include "clang/Basic/SourceLocation.h"
20#include "llvm/Support/PrettyStackTrace.h"
21
22namespace clang {
23
24class Decl;
25class Sema;
26class SourceManager;
27
28/// PrettyDeclStackTraceEntry - If a crash occurs in the parser while
29/// parsing something related to a declaration, include that
30/// declaration in the stack trace.
31class PrettyDeclStackTraceEntry : public llvm::PrettyStackTraceEntry {
32  Sema &S;
33  Decl *TheDecl;
34  SourceLocation Loc;
35  const char *Message;
36
37public:
38  PrettyDeclStackTraceEntry(Sema &S, Decl *D, SourceLocation Loc,
39                            const char *Msg)
40    : S(S), TheDecl(D), Loc(Loc), Message(Msg) {}
41
42  void print(raw_ostream &OS) const override;
43};
44
45}
46
47#endif
48