1ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//===- clang/Basic/PrettyStackTrace.h - Pretty Crash Handling --*- C++ -*-===//
2ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//
3ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//                     The LLVM Compiler Infrastructure
4ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//
5ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner// This file is distributed under the University of Illinois Open Source
6ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner// License. See LICENSE.TXT for details.
7ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//
8ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//===----------------------------------------------------------------------===//
92f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett///
102f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \file
112f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \brief Defines the PrettyStackTraceEntry class, which is used to make
122f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// crashes give more contextual information about what the program was doing
132f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// when it crashed.
142f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett///
15ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner//===----------------------------------------------------------------------===//
16ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
17ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#ifndef CLANG_BASIC_PRETTYSTACKTRACE_H
18ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#define CLANG_BASIC_PRETTYSTACKTRACE_H
19ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
20ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#include "clang/Basic/SourceLocation.h"
21ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#include "llvm/Support/PrettyStackTrace.h"
22ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
23ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattnernamespace clang {
24ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
25af50aab0c317462129d73ae8000c6394c718598dJames Dennett  /// If a crash happens while one of these objects are live, the message
26af50aab0c317462129d73ae8000c6394c718598dJames Dennett  /// is printed out along with the specified source location.
27ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner  class PrettyStackTraceLoc : public llvm::PrettyStackTraceEntry {
28ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner    SourceManager &SM;
29ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner    SourceLocation Loc;
30ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner    const char *Message;
31ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner  public:
32ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner    PrettyStackTraceLoc(SourceManager &sm, SourceLocation L, const char *Msg)
33ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner      : SM(sm), Loc(L), Message(Msg) {}
348cc488fefb2fb04bc8d5398da29f0182f97934cfChris Lattner    virtual void print(raw_ostream &OS) const;
35ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner  };
36ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner}
37ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner
38ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#endif
39