aboutsummaryrefslogtreecommitdiff
path: root/lib/Lex/PPDirectives.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-08 18:46:40 +0000
committerChris Lattner <sabre@nondot.org>2009-04-08 18:46:40 +0000
commitde076650fa79a02743b5fe57a72f991ba24779f9 (patch)
treeac56895f8a3fe956fd5bc26cf656c67ab1ad4e23 /lib/Lex/PPDirectives.cpp
parentb8e240ed8b8f58c7b7fe82776bd6147b437f5d53 (diff)
reject the #__include_macros directive unless it comes from the
predefines buffer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68627 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/PPDirectives.cpp')
-rw-r--r--lib/Lex/PPDirectives.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp
index a60d9ba4e1..034d484a93 100644
--- a/lib/Lex/PPDirectives.cpp
+++ b/lib/Lex/PPDirectives.cpp
@@ -530,7 +530,7 @@ TryAgain:
case tok::pp_include:
return HandleIncludeDirective(Result); // Handle #include.
case tok::pp___include_macros:
- return HandleIncludeDirective(Result); // Handle #__include_macros.
+ return HandleIncludeMacrosDirective(Result); // Handle -imacros.
// C99 6.10.3 - Macro Replacement.
case tok::pp_define:
@@ -1126,6 +1126,25 @@ void Preprocessor::HandleImportDirective(Token &ImportTok) {
return HandleIncludeDirective(ImportTok, 0, true);
}
+/// HandleIncludeMacrosDirective - The -imacros command line option turns into a
+/// pseudo directive in the predefines buffer. This handles it by sucking all
+/// tokens through the preprocessor and discarding them (only keeping the side
+/// effects on the preprocessor).
+void Preprocessor::HandleIncludeMacrosDirective(Token &IncludeMacrosTok) {
+ // This directive should only occur in the predefines buffer. If not, emit an
+ // error and reject it.
+ SourceLocation Loc = IncludeMacrosTok.getLocation();
+ if (strcmp(SourceMgr.getBufferName(Loc), "<built-in>") != 0) {
+ Diag(IncludeMacrosTok.getLocation(),
+ diag::pp_include_macros_out_of_predefines);
+ DiscardUntilEndOfDirective();
+ return;
+ }
+
+ // TODO: implement me :)
+ DiscardUntilEndOfDirective();
+}
+
//===----------------------------------------------------------------------===//
// Preprocessor Macro Directive Handling.
//===----------------------------------------------------------------------===//