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 | b8068c33e219abc7dff011bc528627100c289f67 (patch) | |
tree | 5030b3d94725e3df913b6c998b4d3500eaafd6fb /clang/lib/Lex/Pragma.cpp | |
parent | 19a3b374417550531615e3b8b60ee4e8edc83127 (diff) | |
download | bcm5719-llvm-b8068c33e219abc7dff011bc528627100c289f67.tar.gz bcm5719-llvm-b8068c33e219abc7dff011bc528627100c289f67.zip |
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!
llvm-svn: 109587
Diffstat (limited to 'clang/lib/Lex/Pragma.cpp')
-rw-r--r-- | clang/lib/Lex/Pragma.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/Lex/Pragma.cpp b/clang/lib/Lex/Pragma.cpp index 7bf409405ab..31d28f1e9c3 100644 --- a/clang/lib/Lex/Pragma.cpp +++ b/clang/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)); |