diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-07-28 15:40:33 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-07-28 15:40:33 +0000 |
commit | abf7b72a965efba4a5ac6f85c66d5aba0c83f972 (patch) | |
tree | 37befa186f0cf7727c3a4aa6cddf2049173c2625 /lib/Lex/Pragma.cpp | |
parent | 6813d7ba5fa79e36bdb3986e7f3f8100915a61ab (diff) |
Preprocessor: Add support for '#pragma clang __debug crash' and '#pragma clang
__debug overflow_stack'.
- For testing crash reporting stuff... you'd think I could just use some C++
code but Doug keeps fixing stuff!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109587 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/Pragma.cpp')
-rw-r--r-- | lib/Lex/Pragma.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/Lex/Pragma.cpp b/lib/Lex/Pragma.cpp index 7bf409405a..31d28f1e9c 100644 --- a/lib/Lex/Pragma.cpp +++ b/lib/Lex/Pragma.cpp @@ -582,6 +582,33 @@ struct PragmaDependencyHandler : public PragmaHandler { } }; +struct PragmaDebugHandler : public PragmaHandler { + PragmaDebugHandler() : PragmaHandler("__debug") {} + virtual void HandlePragma(Preprocessor &PP, Token &DepToken) { + Token Tok; + PP.LexUnexpandedToken(Tok); + if (Tok.isNot(tok::identifier)) { + PP.Diag(Tok, diag::warn_pragma_diagnostic_clang_invalid); + return; + } + IdentifierInfo *II = Tok.getIdentifierInfo(); + + if (II->isStr("overflow_stack")) { + DebugOverflowStack(); + } else if (II->isStr("crash")) { + DebugCrash(); + } + } + + void DebugOverflowStack() { + DebugOverflowStack(); + } + + void DebugCrash() { + abort(); + } +}; + /// PragmaDiagnosticHandler - e.g. '#pragma GCC diagnostic ignored "-Wformat"' /// Since clang's diagnostic supports extended functionality beyond GCC's /// the constructor takes a clangMode flag to tell it whether or not to allow @@ -789,6 +816,7 @@ void Preprocessor::RegisterBuiltinPragmas() { // #pragma clang ... AddPragmaHandler("clang", new PragmaPoisonHandler()); AddPragmaHandler("clang", new PragmaSystemHeaderHandler()); + AddPragmaHandler("clang", new PragmaDebugHandler()); AddPragmaHandler("clang", new PragmaDependencyHandler()); AddPragmaHandler("clang", new PragmaDiagnosticHandler(true)); |