mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 20:23:39 +08:00
Make __has_include a bit more resilient in the presence of macros. <rdar://problem/12748859>.
llvm-svn: 171939
This commit is contained in:
@@ -985,8 +985,14 @@ static bool EvaluateHasIncludeCommon(Token &Tok,
|
||||
// Save '(' location for possible missing ')' message.
|
||||
LParenLoc = Tok.getLocation();
|
||||
|
||||
// Get the file name.
|
||||
PP.getCurrentLexer()->LexIncludeFilename(Tok);
|
||||
if (PP.getCurrentLexer()) {
|
||||
// Get the file name.
|
||||
PP.getCurrentLexer()->LexIncludeFilename(Tok);
|
||||
} else {
|
||||
// We're in a macro, so we can't use LexIncludeFilename; just
|
||||
// grab the next token.
|
||||
PP.Lex(Tok);
|
||||
}
|
||||
}
|
||||
|
||||
// Reserve a buffer to get the spelling.
|
||||
|
||||
@@ -64,6 +64,33 @@
|
||||
#error "defined(__has_include_next) failed (8)."
|
||||
#endif
|
||||
|
||||
// Fun with macros
|
||||
#define MACRO1 __has_include(<stdint.h>)
|
||||
#define MACRO2 ("stdint.h")
|
||||
#define MACRO3 ("blahblah.h")
|
||||
#define MACRO4 blahblah.h>)
|
||||
#define MACRO5 <stdint.h>
|
||||
|
||||
#if !MACRO1
|
||||
#error "__has_include with macro failed (1)."
|
||||
#endif
|
||||
|
||||
#if !__has_include MACRO2
|
||||
#error "__has_include with macro failed (2)."
|
||||
#endif
|
||||
|
||||
#if __has_include MACRO3
|
||||
#error "__has_include with macro failed (3)."
|
||||
#endif
|
||||
|
||||
#if __has_include(<MACRO4
|
||||
#error "__has_include with macro failed (4)."
|
||||
#endif
|
||||
|
||||
#if !__has_include(MACRO5)
|
||||
#error "__has_include with macro failed (2)."
|
||||
#endif
|
||||
|
||||
// Try badly formed expressions.
|
||||
// FIXME: We can recover better in almost all of these cases. (PR13335)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user