summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex/Pragma.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-07-28 15:40:33 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-07-28 15:40:33 +0000
commitb8068c33e219abc7dff011bc528627100c289f67 (patch)
tree5030b3d94725e3df913b6c998b4d3500eaafd6fb /clang/lib/Lex/Pragma.cpp
parent19a3b374417550531615e3b8b60ee4e8edc83127 (diff)
downloadbcm5719-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.cpp28
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));
OpenPOWER on IntegriCloud