forked from OSchip/llvm-project
reject the #__include_macros directive unless it comes from the
predefines buffer. llvm-svn: 68627
This commit is contained in:
parent
14a7f39733
commit
58a1eb0ba0
|
@ -85,6 +85,8 @@ def warn_hex_escape_too_large : ExtWarn<"hex escape sequence out of range">;
|
|||
def pp_hash_warning : Warning<"#warning%0">;
|
||||
def pp_include_next_in_primary : Warning<
|
||||
"#include_next in primary source file">;
|
||||
def pp_include_macros_out_of_predefines : Error<
|
||||
"the #__include_macros directive is only for internal use by -imacros">;
|
||||
def pp_include_next_absolute_path : Warning<"#include_next with absolute path">;
|
||||
def ext_c99_whitespace_required_after_macro_name : ExtWarn<
|
||||
"ISO C99 requires whitespace after the macro name">;
|
||||
|
|
|
@ -748,6 +748,7 @@ private:
|
|||
const DirectoryLookup *LookupFrom = 0,
|
||||
bool isImport = false);
|
||||
void HandleIncludeNextDirective(Token &Tok);
|
||||
void HandleIncludeMacrosDirective(Token &Tok);
|
||||
void HandleImportDirective(Token &Tok);
|
||||
|
||||
// Macro handling.
|
||||
|
|
|
@ -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.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
Loading…
Reference in New Issue