1 //===--- PPDirectives.cpp - Directive Handling for Preprocessor -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// \brief Implements # directive processing for the Preprocessor. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #include "clang/Basic/CharInfo.h" 16 #include "clang/Basic/FileManager.h" 17 #include "clang/Basic/IdentifierTable.h" 18 #include "clang/Basic/LangOptions.h" 19 #include "clang/Basic/Module.h" 20 #include "clang/Basic/SourceLocation.h" 21 #include "clang/Basic/SourceManager.h" 22 #include "clang/Basic/TokenKinds.h" 23 #include "clang/Lex/CodeCompletionHandler.h" 24 #include "clang/Lex/HeaderSearch.h" 25 #include "clang/Lex/LexDiagnostic.h" 26 #include "clang/Lex/LiteralSupport.h" 27 #include "clang/Lex/MacroInfo.h" 28 #include "clang/Lex/ModuleLoader.h" 29 #include "clang/Lex/ModuleMap.h" 30 #include "clang/Lex/PPCallbacks.h" 31 #include "clang/Lex/Pragma.h" 32 #include "clang/Lex/Preprocessor.h" 33 #include "clang/Lex/PreprocessorOptions.h" 34 #include "clang/Lex/PTHLexer.h" 35 #include "clang/Lex/Token.h" 36 #include "llvm/ADT/ArrayRef.h" 37 #include "llvm/ADT/SmallString.h" 38 #include "llvm/ADT/SmallVector.h" 39 #include "llvm/ADT/STLExtras.h" 40 #include "llvm/ADT/StringSwitch.h" 41 #include "llvm/ADT/StringRef.h" 42 #include "llvm/Support/AlignOf.h" 43 #include "llvm/Support/ErrorHandling.h" 44 #include "llvm/Support/Path.h" 45 #include <algorithm> 46 #include <cassert> 47 #include <cstring> 48 #include <new> 49 #include <string> 50 #include <utility> 51 52 using namespace clang; 53 54 //===----------------------------------------------------------------------===// 55 // Utility Methods for Preprocessor Directive Handling. 56 //===----------------------------------------------------------------------===// 57 58 MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) { 59 auto *MIChain = new (BP) MacroInfoChain{L, MIChainHead}; 60 MIChainHead = MIChain; 61 return &MIChain->MI; 62 } 63 64 DefMacroDirective *Preprocessor::AllocateDefMacroDirective(MacroInfo *MI, 65 SourceLocation Loc) { 66 return new (BP) DefMacroDirective(MI, Loc); 67 } 68 69 UndefMacroDirective * 70 Preprocessor::AllocateUndefMacroDirective(SourceLocation UndefLoc) { 71 return new (BP) UndefMacroDirective(UndefLoc); 72 } 73 74 VisibilityMacroDirective * 75 Preprocessor::AllocateVisibilityMacroDirective(SourceLocation Loc, 76 bool isPublic) { 77 return new (BP) VisibilityMacroDirective(Loc, isPublic); 78 } 79 80 /// \brief Read and discard all tokens remaining on the current line until 81 /// the tok::eod token is found. 82 void Preprocessor::DiscardUntilEndOfDirective() { 83 Token Tmp; 84 do { 85 LexUnexpandedToken(Tmp); 86 assert(Tmp.isNot(tok::eof) && "EOF seen while discarding directive tokens"); 87 } while (Tmp.isNot(tok::eod)); 88 } 89 90 /// \brief Enumerates possible cases of #define/#undef a reserved identifier. 91 enum MacroDiag { 92 MD_NoWarn, //> Not a reserved identifier 93 MD_KeywordDef, //> Macro hides keyword, enabled by default 94 MD_ReservedMacro //> #define of #undef reserved id, disabled by default 95 }; 96 97 /// \brief Checks if the specified identifier is reserved in the specified 98 /// language. 99 /// This function does not check if the identifier is a keyword. 100 static bool isReservedId(StringRef Text, const LangOptions &Lang) { 101 // C++ [macro.names], C11 7.1.3: 102 // All identifiers that begin with an underscore and either an uppercase 103 // letter or another underscore are always reserved for any use. 104 if (Text.size() >= 2 && Text[0] == '_' && 105 (isUppercase(Text[1]) || Text[1] == '_')) 106 return true; 107 // C++ [global.names] 108 // Each name that contains a double underscore ... is reserved to the 109 // implementation for any use. 110 if (Lang.CPlusPlus) { 111 if (Text.find("__") != StringRef::npos) 112 return true; 113 } 114 return false; 115 } 116 117 static MacroDiag shouldWarnOnMacroDef(Preprocessor &PP, IdentifierInfo *II) { 118 const LangOptions &Lang = PP.getLangOpts(); 119 StringRef Text = II->getName(); 120 if (isReservedId(Text, Lang)) 121 return MD_ReservedMacro; 122 if (II->isKeyword(Lang)) 123 return MD_KeywordDef; 124 if (Lang.CPlusPlus11 && (Text.equals("override") || Text.equals("final"))) 125 return MD_KeywordDef; 126 return MD_NoWarn; 127 } 128 129 static MacroDiag shouldWarnOnMacroUndef(Preprocessor &PP, IdentifierInfo *II) { 130 const LangOptions &Lang = PP.getLangOpts(); 131 StringRef Text = II->getName(); 132 // Do not warn on keyword undef. It is generally harmless and widely used. 133 if (isReservedId(Text, Lang)) 134 return MD_ReservedMacro; 135 return MD_NoWarn; 136 } 137 138 // Return true if we want to issue a diagnostic by default if we 139 // encounter this name in a #include with the wrong case. For now, 140 // this includes the standard C and C++ headers, Posix headers, 141 // and Boost headers. Improper case for these #includes is a 142 // potential portability issue. 143 static bool warnByDefaultOnWrongCase(StringRef Include) { 144 // If the first component of the path is "boost", treat this like a standard header 145 // for the purposes of diagnostics. 146 if (::llvm::sys::path::begin(Include)->equals_lower("boost")) 147 return true; 148 149 // "condition_variable" is the longest standard header name at 18 characters. 150 // If the include file name is longer than that, it can't be a standard header. 151 static const size_t MaxStdHeaderNameLen = 18u; 152 if (Include.size() > MaxStdHeaderNameLen) 153 return false; 154 155 // Lowercase and normalize the search string. 156 SmallString<32> LowerInclude{Include}; 157 for (char &Ch : LowerInclude) { 158 // In the ASCII range? 159 if (static_cast<unsigned char>(Ch) > 0x7f) 160 return false; // Can't be a standard header 161 // ASCII lowercase: 162 if (Ch >= 'A' && Ch <= 'Z') 163 Ch += 'a' - 'A'; 164 // Normalize path separators for comparison purposes. 165 else if (::llvm::sys::path::is_separator(Ch)) 166 Ch = '/'; 167 } 168 169 // The standard C/C++ and Posix headers 170 return llvm::StringSwitch<bool>(LowerInclude) 171 // C library headers 172 .Cases("assert.h", "complex.h", "ctype.h", "errno.h", "fenv.h", true) 173 .Cases("float.h", "inttypes.h", "iso646.h", "limits.h", "locale.h", true) 174 .Cases("math.h", "setjmp.h", "signal.h", "stdalign.h", "stdarg.h", true) 175 .Cases("stdatomic.h", "stdbool.h", "stddef.h", "stdint.h", "stdio.h", true) 176 .Cases("stdlib.h", "stdnoreturn.h", "string.h", "tgmath.h", "threads.h", true) 177 .Cases("time.h", "uchar.h", "wchar.h", "wctype.h", true) 178 179 // C++ headers for C library facilities 180 .Cases("cassert", "ccomplex", "cctype", "cerrno", "cfenv", true) 181 .Cases("cfloat", "cinttypes", "ciso646", "climits", "clocale", true) 182 .Cases("cmath", "csetjmp", "csignal", "cstdalign", "cstdarg", true) 183 .Cases("cstdbool", "cstddef", "cstdint", "cstdio", "cstdlib", true) 184 .Cases("cstring", "ctgmath", "ctime", "cuchar", "cwchar", true) 185 .Case("cwctype", true) 186 187 // C++ library headers 188 .Cases("algorithm", "fstream", "list", "regex", "thread", true) 189 .Cases("array", "functional", "locale", "scoped_allocator", "tuple", true) 190 .Cases("atomic", "future", "map", "set", "type_traits", true) 191 .Cases("bitset", "initializer_list", "memory", "shared_mutex", "typeindex", true) 192 .Cases("chrono", "iomanip", "mutex", "sstream", "typeinfo", true) 193 .Cases("codecvt", "ios", "new", "stack", "unordered_map", true) 194 .Cases("complex", "iosfwd", "numeric", "stdexcept", "unordered_set", true) 195 .Cases("condition_variable", "iostream", "ostream", "streambuf", "utility", true) 196 .Cases("deque", "istream", "queue", "string", "valarray", true) 197 .Cases("exception", "iterator", "random", "strstream", "vector", true) 198 .Cases("forward_list", "limits", "ratio", "system_error", true) 199 200 // POSIX headers (which aren't also C headers) 201 .Cases("aio.h", "arpa/inet.h", "cpio.h", "dirent.h", "dlfcn.h", true) 202 .Cases("fcntl.h", "fmtmsg.h", "fnmatch.h", "ftw.h", "glob.h", true) 203 .Cases("grp.h", "iconv.h", "langinfo.h", "libgen.h", "monetary.h", true) 204 .Cases("mqueue.h", "ndbm.h", "net/if.h", "netdb.h", "netinet/in.h", true) 205 .Cases("netinet/tcp.h", "nl_types.h", "poll.h", "pthread.h", "pwd.h", true) 206 .Cases("regex.h", "sched.h", "search.h", "semaphore.h", "spawn.h", true) 207 .Cases("strings.h", "stropts.h", "sys/ipc.h", "sys/mman.h", "sys/msg.h", true) 208 .Cases("sys/resource.h", "sys/select.h", "sys/sem.h", "sys/shm.h", "sys/socket.h", true) 209 .Cases("sys/stat.h", "sys/statvfs.h", "sys/time.h", "sys/times.h", "sys/types.h", true) 210 .Cases("sys/uio.h", "sys/un.h", "sys/utsname.h", "sys/wait.h", "syslog.h", true) 211 .Cases("tar.h", "termios.h", "trace.h", "ulimit.h", true) 212 .Cases("unistd.h", "utime.h", "utmpx.h", "wordexp.h", true) 213 .Default(false); 214 } 215 216 bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, 217 bool *ShadowFlag) { 218 // Missing macro name? 219 if (MacroNameTok.is(tok::eod)) 220 return Diag(MacroNameTok, diag::err_pp_missing_macro_name); 221 222 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 223 if (!II) { 224 bool Invalid = false; 225 std::string Spelling = getSpelling(MacroNameTok, &Invalid); 226 if (Invalid) 227 return Diag(MacroNameTok, diag::err_pp_macro_not_identifier); 228 II = getIdentifierInfo(Spelling); 229 230 if (!II->isCPlusPlusOperatorKeyword()) 231 return Diag(MacroNameTok, diag::err_pp_macro_not_identifier); 232 233 // C++ 2.5p2: Alternative tokens behave the same as its primary token 234 // except for their spellings. 235 Diag(MacroNameTok, getLangOpts().MicrosoftExt 236 ? diag::ext_pp_operator_used_as_macro_name 237 : diag::err_pp_operator_used_as_macro_name) 238 << II << MacroNameTok.getKind(); 239 240 // Allow #defining |and| and friends for Microsoft compatibility or 241 // recovery when legacy C headers are included in C++. 242 MacroNameTok.setIdentifierInfo(II); 243 } 244 245 if ((isDefineUndef != MU_Other) && II->getPPKeywordID() == tok::pp_defined) { 246 // Error if defining "defined": C99 6.10.8/4, C++ [cpp.predefined]p4. 247 return Diag(MacroNameTok, diag::err_defined_macro_name); 248 } 249 250 if (isDefineUndef == MU_Undef) { 251 auto *MI = getMacroInfo(II); 252 if (MI && MI->isBuiltinMacro()) { 253 // Warn if undefining "__LINE__" and other builtins, per C99 6.10.8/4 254 // and C++ [cpp.predefined]p4], but allow it as an extension. 255 Diag(MacroNameTok, diag::ext_pp_undef_builtin_macro); 256 } 257 } 258 259 // If defining/undefining reserved identifier or a keyword, we need to issue 260 // a warning. 261 SourceLocation MacroNameLoc = MacroNameTok.getLocation(); 262 if (ShadowFlag) 263 *ShadowFlag = false; 264 if (!SourceMgr.isInSystemHeader(MacroNameLoc) && 265 (SourceMgr.getBufferName(MacroNameLoc) != "<built-in>")) { 266 MacroDiag D = MD_NoWarn; 267 if (isDefineUndef == MU_Define) { 268 D = shouldWarnOnMacroDef(*this, II); 269 } 270 else if (isDefineUndef == MU_Undef) 271 D = shouldWarnOnMacroUndef(*this, II); 272 if (D == MD_KeywordDef) { 273 // We do not want to warn on some patterns widely used in configuration 274 // scripts. This requires analyzing next tokens, so do not issue warnings 275 // now, only inform caller. 276 if (ShadowFlag) 277 *ShadowFlag = true; 278 } 279 if (D == MD_ReservedMacro) 280 Diag(MacroNameTok, diag::warn_pp_macro_is_reserved_id); 281 } 282 283 // Okay, we got a good identifier. 284 return false; 285 } 286 287 /// \brief Lex and validate a macro name, which occurs after a 288 /// \#define or \#undef. 289 /// 290 /// This sets the token kind to eod and discards the rest of the macro line if 291 /// the macro name is invalid. 292 /// 293 /// \param MacroNameTok Token that is expected to be a macro name. 294 /// \param isDefineUndef Context in which macro is used. 295 /// \param ShadowFlag Points to a flag that is set if macro shadows a keyword. 296 void Preprocessor::ReadMacroName(Token &MacroNameTok, MacroUse isDefineUndef, 297 bool *ShadowFlag) { 298 // Read the token, don't allow macro expansion on it. 299 LexUnexpandedToken(MacroNameTok); 300 301 if (MacroNameTok.is(tok::code_completion)) { 302 if (CodeComplete) 303 CodeComplete->CodeCompleteMacroName(isDefineUndef == MU_Define); 304 setCodeCompletionReached(); 305 LexUnexpandedToken(MacroNameTok); 306 } 307 308 if (!CheckMacroName(MacroNameTok, isDefineUndef, ShadowFlag)) 309 return; 310 311 // Invalid macro name, read and discard the rest of the line and set the 312 // token kind to tok::eod if necessary. 313 if (MacroNameTok.isNot(tok::eod)) { 314 MacroNameTok.setKind(tok::eod); 315 DiscardUntilEndOfDirective(); 316 } 317 } 318 319 /// \brief Ensure that the next token is a tok::eod token. 320 /// 321 /// If not, emit a diagnostic and consume up until the eod. If EnableMacros is 322 /// true, then we consider macros that expand to zero tokens as being ok. 323 void Preprocessor::CheckEndOfDirective(const char *DirType, bool EnableMacros) { 324 Token Tmp; 325 // Lex unexpanded tokens for most directives: macros might expand to zero 326 // tokens, causing us to miss diagnosing invalid lines. Some directives (like 327 // #line) allow empty macros. 328 if (EnableMacros) 329 Lex(Tmp); 330 else 331 LexUnexpandedToken(Tmp); 332 333 // There should be no tokens after the directive, but we allow them as an 334 // extension. 335 while (Tmp.is(tok::comment)) // Skip comments in -C mode. 336 LexUnexpandedToken(Tmp); 337 338 if (Tmp.isNot(tok::eod)) { 339 // Add a fixit in GNU/C99/C++ mode. Don't offer a fixit for strict-C89, 340 // or if this is a macro-style preprocessing directive, because it is more 341 // trouble than it is worth to insert /**/ and check that there is no /**/ 342 // in the range also. 343 FixItHint Hint; 344 if ((LangOpts.GNUMode || LangOpts.C99 || LangOpts.CPlusPlus) && 345 !CurTokenLexer) 346 Hint = FixItHint::CreateInsertion(Tmp.getLocation(),"//"); 347 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol) << DirType << Hint; 348 DiscardUntilEndOfDirective(); 349 } 350 } 351 352 /// SkipExcludedConditionalBlock - We just read a \#if or related directive and 353 /// decided that the subsequent tokens are in the \#if'd out portion of the 354 /// file. Lex the rest of the file, until we see an \#endif. If 355 /// FoundNonSkipPortion is true, then we have already emitted code for part of 356 /// this \#if directive, so \#else/\#elif blocks should never be entered. 357 /// If ElseOk is true, then \#else directives are ok, if not, then we have 358 /// already seen one so a \#else directive is a duplicate. When this returns, 359 /// the caller can lex the first valid token. 360 void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc, 361 bool FoundNonSkipPortion, 362 bool FoundElse, 363 SourceLocation ElseLoc) { 364 ++NumSkipped; 365 assert(!CurTokenLexer && CurPPLexer && "Lexing a macro, not a file?"); 366 367 CurPPLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false, 368 FoundNonSkipPortion, FoundElse); 369 370 if (CurPTHLexer) { 371 PTHSkipExcludedConditionalBlock(); 372 return; 373 } 374 375 // Enter raw mode to disable identifier lookup (and thus macro expansion), 376 // disabling warnings, etc. 377 CurPPLexer->LexingRawMode = true; 378 Token Tok; 379 while (true) { 380 CurLexer->Lex(Tok); 381 382 if (Tok.is(tok::code_completion)) { 383 if (CodeComplete) 384 CodeComplete->CodeCompleteInConditionalExclusion(); 385 setCodeCompletionReached(); 386 continue; 387 } 388 389 // If this is the end of the buffer, we have an error. 390 if (Tok.is(tok::eof)) { 391 // Emit errors for each unterminated conditional on the stack, including 392 // the current one. 393 while (!CurPPLexer->ConditionalStack.empty()) { 394 if (CurLexer->getFileLoc() != CodeCompletionFileLoc) 395 Diag(CurPPLexer->ConditionalStack.back().IfLoc, 396 diag::err_pp_unterminated_conditional); 397 CurPPLexer->ConditionalStack.pop_back(); 398 } 399 400 // Just return and let the caller lex after this #include. 401 break; 402 } 403 404 // If this token is not a preprocessor directive, just skip it. 405 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine()) 406 continue; 407 408 // We just parsed a # character at the start of a line, so we're in 409 // directive mode. Tell the lexer this so any newlines we see will be 410 // converted into an EOD token (this terminates the macro). 411 CurPPLexer->ParsingPreprocessorDirective = true; 412 if (CurLexer) CurLexer->SetKeepWhitespaceMode(false); 413 414 415 // Read the next token, the directive flavor. 416 LexUnexpandedToken(Tok); 417 418 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or 419 // something bogus), skip it. 420 if (Tok.isNot(tok::raw_identifier)) { 421 CurPPLexer->ParsingPreprocessorDirective = false; 422 // Restore comment saving mode. 423 if (CurLexer) CurLexer->resetExtendedTokenMode(); 424 continue; 425 } 426 427 // If the first letter isn't i or e, it isn't intesting to us. We know that 428 // this is safe in the face of spelling differences, because there is no way 429 // to spell an i/e in a strange way that is another letter. Skipping this 430 // allows us to avoid looking up the identifier info for #define/#undef and 431 // other common directives. 432 StringRef RI = Tok.getRawIdentifier(); 433 434 char FirstChar = RI[0]; 435 if (FirstChar >= 'a' && FirstChar <= 'z' && 436 FirstChar != 'i' && FirstChar != 'e') { 437 CurPPLexer->ParsingPreprocessorDirective = false; 438 // Restore comment saving mode. 439 if (CurLexer) CurLexer->resetExtendedTokenMode(); 440 continue; 441 } 442 443 // Get the identifier name without trigraphs or embedded newlines. Note 444 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled 445 // when skipping. 446 char DirectiveBuf[20]; 447 StringRef Directive; 448 if (!Tok.needsCleaning() && RI.size() < 20) { 449 Directive = RI; 450 } else { 451 std::string DirectiveStr = getSpelling(Tok); 452 size_t IdLen = DirectiveStr.size(); 453 if (IdLen >= 20) { 454 CurPPLexer->ParsingPreprocessorDirective = false; 455 // Restore comment saving mode. 456 if (CurLexer) CurLexer->resetExtendedTokenMode(); 457 continue; 458 } 459 memcpy(DirectiveBuf, &DirectiveStr[0], IdLen); 460 Directive = StringRef(DirectiveBuf, IdLen); 461 } 462 463 if (Directive.startswith("if")) { 464 StringRef Sub = Directive.substr(2); 465 if (Sub.empty() || // "if" 466 Sub == "def" || // "ifdef" 467 Sub == "ndef") { // "ifndef" 468 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't 469 // bother parsing the condition. 470 DiscardUntilEndOfDirective(); 471 CurPPLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true, 472 /*foundnonskip*/false, 473 /*foundelse*/false); 474 } 475 } else if (Directive[0] == 'e') { 476 StringRef Sub = Directive.substr(1); 477 if (Sub == "ndif") { // "endif" 478 PPConditionalInfo CondInfo; 479 CondInfo.WasSkipping = true; // Silence bogus warning. 480 bool InCond = CurPPLexer->popConditionalLevel(CondInfo); 481 (void)InCond; // Silence warning in no-asserts mode. 482 assert(!InCond && "Can't be skipping if not in a conditional!"); 483 484 // If we popped the outermost skipping block, we're done skipping! 485 if (!CondInfo.WasSkipping) { 486 // Restore the value of LexingRawMode so that trailing comments 487 // are handled correctly, if we've reached the outermost block. 488 CurPPLexer->LexingRawMode = false; 489 CheckEndOfDirective("endif"); 490 CurPPLexer->LexingRawMode = true; 491 if (Callbacks) 492 Callbacks->Endif(Tok.getLocation(), CondInfo.IfLoc); 493 break; 494 } else { 495 DiscardUntilEndOfDirective(); 496 } 497 } else if (Sub == "lse") { // "else". 498 // #else directive in a skipping conditional. If not in some other 499 // skipping conditional, and if #else hasn't already been seen, enter it 500 // as a non-skipping conditional. 501 PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel(); 502 503 // If this is a #else with a #else before it, report the error. 504 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else); 505 506 // Note that we've seen a #else in this conditional. 507 CondInfo.FoundElse = true; 508 509 // If the conditional is at the top level, and the #if block wasn't 510 // entered, enter the #else block now. 511 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) { 512 CondInfo.FoundNonSkip = true; 513 // Restore the value of LexingRawMode so that trailing comments 514 // are handled correctly. 515 CurPPLexer->LexingRawMode = false; 516 CheckEndOfDirective("else"); 517 CurPPLexer->LexingRawMode = true; 518 if (Callbacks) 519 Callbacks->Else(Tok.getLocation(), CondInfo.IfLoc); 520 break; 521 } else { 522 DiscardUntilEndOfDirective(); // C99 6.10p4. 523 } 524 } else if (Sub == "lif") { // "elif". 525 PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel(); 526 527 // If this is a #elif with a #else before it, report the error. 528 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else); 529 530 // If this is in a skipping block or if we're already handled this #if 531 // block, don't bother parsing the condition. 532 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) { 533 DiscardUntilEndOfDirective(); 534 } else { 535 const SourceLocation CondBegin = CurPPLexer->getSourceLocation(); 536 // Restore the value of LexingRawMode so that identifiers are 537 // looked up, etc, inside the #elif expression. 538 assert(CurPPLexer->LexingRawMode && "We have to be skipping here!"); 539 CurPPLexer->LexingRawMode = false; 540 IdentifierInfo *IfNDefMacro = nullptr; 541 const bool CondValue = EvaluateDirectiveExpression(IfNDefMacro).Conditional; 542 CurPPLexer->LexingRawMode = true; 543 if (Callbacks) { 544 const SourceLocation CondEnd = CurPPLexer->getSourceLocation(); 545 Callbacks->Elif(Tok.getLocation(), 546 SourceRange(CondBegin, CondEnd), 547 (CondValue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False), CondInfo.IfLoc); 548 } 549 // If this condition is true, enter it! 550 if (CondValue) { 551 CondInfo.FoundNonSkip = true; 552 break; 553 } 554 } 555 } 556 } 557 558 CurPPLexer->ParsingPreprocessorDirective = false; 559 // Restore comment saving mode. 560 if (CurLexer) CurLexer->resetExtendedTokenMode(); 561 } 562 563 // Finally, if we are out of the conditional (saw an #endif or ran off the end 564 // of the file, just stop skipping and return to lexing whatever came after 565 // the #if block. 566 CurPPLexer->LexingRawMode = false; 567 568 if (Callbacks) { 569 SourceLocation BeginLoc = ElseLoc.isValid() ? ElseLoc : IfTokenLoc; 570 Callbacks->SourceRangeSkipped(SourceRange(BeginLoc, Tok.getLocation())); 571 } 572 } 573 574 void Preprocessor::PTHSkipExcludedConditionalBlock() { 575 while (true) { 576 assert(CurPTHLexer); 577 assert(CurPTHLexer->LexingRawMode == false); 578 579 // Skip to the next '#else', '#elif', or #endif. 580 if (CurPTHLexer->SkipBlock()) { 581 // We have reached an #endif. Both the '#' and 'endif' tokens 582 // have been consumed by the PTHLexer. Just pop off the condition level. 583 PPConditionalInfo CondInfo; 584 bool InCond = CurPTHLexer->popConditionalLevel(CondInfo); 585 (void)InCond; // Silence warning in no-asserts mode. 586 assert(!InCond && "Can't be skipping if not in a conditional!"); 587 break; 588 } 589 590 // We have reached a '#else' or '#elif'. Lex the next token to get 591 // the directive flavor. 592 Token Tok; 593 LexUnexpandedToken(Tok); 594 595 // We can actually look up the IdentifierInfo here since we aren't in 596 // raw mode. 597 tok::PPKeywordKind K = Tok.getIdentifierInfo()->getPPKeywordID(); 598 599 if (K == tok::pp_else) { 600 // #else: Enter the else condition. We aren't in a nested condition 601 // since we skip those. We're always in the one matching the last 602 // blocked we skipped. 603 PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel(); 604 // Note that we've seen a #else in this conditional. 605 CondInfo.FoundElse = true; 606 607 // If the #if block wasn't entered then enter the #else block now. 608 if (!CondInfo.FoundNonSkip) { 609 CondInfo.FoundNonSkip = true; 610 611 // Scan until the eod token. 612 CurPTHLexer->ParsingPreprocessorDirective = true; 613 DiscardUntilEndOfDirective(); 614 CurPTHLexer->ParsingPreprocessorDirective = false; 615 616 break; 617 } 618 619 // Otherwise skip this block. 620 continue; 621 } 622 623 assert(K == tok::pp_elif); 624 PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel(); 625 626 // If this is a #elif with a #else before it, report the error. 627 if (CondInfo.FoundElse) 628 Diag(Tok, diag::pp_err_elif_after_else); 629 630 // If this is in a skipping block or if we're already handled this #if 631 // block, don't bother parsing the condition. We just skip this block. 632 if (CondInfo.FoundNonSkip) 633 continue; 634 635 // Evaluate the condition of the #elif. 636 IdentifierInfo *IfNDefMacro = nullptr; 637 CurPTHLexer->ParsingPreprocessorDirective = true; 638 bool ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro).Conditional; 639 CurPTHLexer->ParsingPreprocessorDirective = false; 640 641 // If this condition is true, enter it! 642 if (ShouldEnter) { 643 CondInfo.FoundNonSkip = true; 644 break; 645 } 646 647 // Otherwise, skip this block and go to the next one. 648 } 649 } 650 651 Module *Preprocessor::getModuleForLocation(SourceLocation Loc) { 652 if (!SourceMgr.isInMainFile(Loc)) { 653 // Try to determine the module of the include directive. 654 // FIXME: Look into directly passing the FileEntry from LookupFile instead. 655 FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getExpansionLoc(Loc)); 656 if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) { 657 // The include comes from an included file. 658 return HeaderInfo.getModuleMap() 659 .findModuleForHeader(EntryOfIncl) 660 .getModule(); 661 } 662 } 663 664 // This is either in the main file or not in a file at all. It belongs 665 // to the current module, if there is one. 666 return getLangOpts().CurrentModule.empty() 667 ? nullptr 668 : HeaderInfo.lookupModule(getLangOpts().CurrentModule); 669 } 670 671 const FileEntry * 672 Preprocessor::getModuleHeaderToIncludeForDiagnostics(SourceLocation IncLoc, 673 Module *M, 674 SourceLocation Loc) { 675 assert(M && "no module to include"); 676 677 // If we have a module import syntax, we shouldn't include a header to 678 // make a particular module visible. 679 if (getLangOpts().ObjC2) 680 return nullptr; 681 682 Module *TopM = M->getTopLevelModule(); 683 Module *IncM = getModuleForLocation(IncLoc); 684 685 // Walk up through the include stack, looking through textual headers of M 686 // until we hit a non-textual header that we can #include. (We assume textual 687 // headers of a module with non-textual headers aren't meant to be used to 688 // import entities from the module.) 689 auto &SM = getSourceManager(); 690 while (!Loc.isInvalid() && !SM.isInMainFile(Loc)) { 691 auto ID = SM.getFileID(SM.getExpansionLoc(Loc)); 692 auto *FE = SM.getFileEntryForID(ID); 693 if (!FE) 694 break; 695 696 bool InTextualHeader = false; 697 for (auto Header : HeaderInfo.getModuleMap().findAllModulesForHeader(FE)) { 698 if (!Header.getModule()->isSubModuleOf(TopM)) 699 continue; 700 701 if (!(Header.getRole() & ModuleMap::TextualHeader)) { 702 // If this is an accessible, non-textual header of M's top-level module 703 // that transitively includes the given location and makes the 704 // corresponding module visible, this is the thing to #include. 705 if (Header.isAccessibleFrom(IncM)) 706 return FE; 707 708 // It's in a private header; we can't #include it. 709 // FIXME: If there's a public header in some module that re-exports it, 710 // then we could suggest including that, but it's not clear that's the 711 // expected way to make this entity visible. 712 continue; 713 } 714 715 InTextualHeader = true; 716 } 717 718 if (!InTextualHeader) 719 break; 720 721 Loc = SM.getIncludeLoc(ID); 722 } 723 724 return nullptr; 725 } 726 727 const FileEntry *Preprocessor::LookupFile( 728 SourceLocation FilenameLoc, StringRef Filename, bool isAngled, 729 const DirectoryLookup *FromDir, const FileEntry *FromFile, 730 const DirectoryLookup *&CurDir, SmallVectorImpl<char> *SearchPath, 731 SmallVectorImpl<char> *RelativePath, 732 ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool SkipCache) { 733 Module *RequestingModule = getModuleForLocation(FilenameLoc); 734 bool RequestingModuleIsModuleInterface = !SourceMgr.isInMainFile(FilenameLoc); 735 736 // If the header lookup mechanism may be relative to the current inclusion 737 // stack, record the parent #includes. 738 SmallVector<std::pair<const FileEntry *, const DirectoryEntry *>, 16> 739 Includers; 740 bool BuildSystemModule = false; 741 if (!FromDir && !FromFile) { 742 FileID FID = getCurrentFileLexer()->getFileID(); 743 const FileEntry *FileEnt = SourceMgr.getFileEntryForID(FID); 744 745 // If there is no file entry associated with this file, it must be the 746 // predefines buffer or the module includes buffer. Any other file is not 747 // lexed with a normal lexer, so it won't be scanned for preprocessor 748 // directives. 749 // 750 // If we have the predefines buffer, resolve #include references (which come 751 // from the -include command line argument) from the current working 752 // directory instead of relative to the main file. 753 // 754 // If we have the module includes buffer, resolve #include references (which 755 // come from header declarations in the module map) relative to the module 756 // map file. 757 if (!FileEnt) { 758 if (FID == SourceMgr.getMainFileID() && MainFileDir) { 759 Includers.push_back(std::make_pair(nullptr, MainFileDir)); 760 BuildSystemModule = getCurrentModule()->IsSystem; 761 } else if ((FileEnt = 762 SourceMgr.getFileEntryForID(SourceMgr.getMainFileID()))) 763 Includers.push_back(std::make_pair(FileEnt, FileMgr.getDirectory("."))); 764 } else { 765 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 766 } 767 768 // MSVC searches the current include stack from top to bottom for 769 // headers included by quoted include directives. 770 // See: http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx 771 if (LangOpts.MSVCCompat && !isAngled) { 772 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 773 if (IsFileLexer(ISEntry)) 774 if ((FileEnt = ISEntry.ThePPLexer->getFileEntry())) 775 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 776 } 777 } 778 } 779 780 CurDir = CurDirLookup; 781 782 if (FromFile) { 783 // We're supposed to start looking from after a particular file. Search 784 // the include path until we find that file or run out of files. 785 const DirectoryLookup *TmpCurDir = CurDir; 786 const DirectoryLookup *TmpFromDir = nullptr; 787 while (const FileEntry *FE = HeaderInfo.LookupFile( 788 Filename, FilenameLoc, isAngled, TmpFromDir, TmpCurDir, 789 Includers, SearchPath, RelativePath, RequestingModule, 790 SuggestedModule, /*IsMapped=*/nullptr, SkipCache)) { 791 // Keep looking as if this file did a #include_next. 792 TmpFromDir = TmpCurDir; 793 ++TmpFromDir; 794 if (FE == FromFile) { 795 // Found it. 796 FromDir = TmpFromDir; 797 CurDir = TmpCurDir; 798 break; 799 } 800 } 801 } 802 803 // Do a standard file entry lookup. 804 const FileEntry *FE = HeaderInfo.LookupFile( 805 Filename, FilenameLoc, isAngled, FromDir, CurDir, Includers, SearchPath, 806 RelativePath, RequestingModule, SuggestedModule, IsMapped, SkipCache, 807 BuildSystemModule); 808 if (FE) { 809 if (SuggestedModule && !LangOpts.AsmPreprocessor) 810 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 811 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 812 Filename, FE); 813 return FE; 814 } 815 816 const FileEntry *CurFileEnt; 817 // Otherwise, see if this is a subframework header. If so, this is relative 818 // to one of the headers on the #include stack. Walk the list of the current 819 // headers on the #include stack and pass them to HeaderInfo. 820 if (IsFileLexer()) { 821 if ((CurFileEnt = CurPPLexer->getFileEntry())) { 822 if ((FE = HeaderInfo.LookupSubframeworkHeader(Filename, CurFileEnt, 823 SearchPath, RelativePath, 824 RequestingModule, 825 SuggestedModule))) { 826 if (SuggestedModule && !LangOpts.AsmPreprocessor) 827 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 828 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 829 Filename, FE); 830 return FE; 831 } 832 } 833 } 834 835 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 836 if (IsFileLexer(ISEntry)) { 837 if ((CurFileEnt = ISEntry.ThePPLexer->getFileEntry())) { 838 if ((FE = HeaderInfo.LookupSubframeworkHeader( 839 Filename, CurFileEnt, SearchPath, RelativePath, 840 RequestingModule, SuggestedModule))) { 841 if (SuggestedModule && !LangOpts.AsmPreprocessor) 842 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 843 RequestingModule, RequestingModuleIsModuleInterface, 844 FilenameLoc, Filename, FE); 845 return FE; 846 } 847 } 848 } 849 } 850 851 // Otherwise, we really couldn't find the file. 852 return nullptr; 853 } 854 855 //===----------------------------------------------------------------------===// 856 // Preprocessor Directive Handling. 857 //===----------------------------------------------------------------------===// 858 859 class Preprocessor::ResetMacroExpansionHelper { 860 public: 861 ResetMacroExpansionHelper(Preprocessor *pp) 862 : PP(pp), save(pp->DisableMacroExpansion) { 863 if (pp->MacroExpansionInDirectivesOverride) 864 pp->DisableMacroExpansion = false; 865 } 866 867 ~ResetMacroExpansionHelper() { 868 PP->DisableMacroExpansion = save; 869 } 870 871 private: 872 Preprocessor *PP; 873 bool save; 874 }; 875 876 /// HandleDirective - This callback is invoked when the lexer sees a # token 877 /// at the start of a line. This consumes the directive, modifies the 878 /// lexer/preprocessor state, and advances the lexer(s) so that the next token 879 /// read is the correct one. 880 void Preprocessor::HandleDirective(Token &Result) { 881 // FIXME: Traditional: # with whitespace before it not recognized by K&R? 882 883 // We just parsed a # character at the start of a line, so we're in directive 884 // mode. Tell the lexer this so any newlines we see will be converted into an 885 // EOD token (which terminates the directive). 886 CurPPLexer->ParsingPreprocessorDirective = true; 887 if (CurLexer) CurLexer->SetKeepWhitespaceMode(false); 888 889 bool ImmediatelyAfterTopLevelIfndef = 890 CurPPLexer->MIOpt.getImmediatelyAfterTopLevelIfndef(); 891 CurPPLexer->MIOpt.resetImmediatelyAfterTopLevelIfndef(); 892 893 ++NumDirectives; 894 895 // We are about to read a token. For the multiple-include optimization FA to 896 // work, we have to remember if we had read any tokens *before* this 897 // pp-directive. 898 bool ReadAnyTokensBeforeDirective =CurPPLexer->MIOpt.getHasReadAnyTokensVal(); 899 900 // Save the '#' token in case we need to return it later. 901 Token SavedHash = Result; 902 903 // Read the next token, the directive flavor. This isn't expanded due to 904 // C99 6.10.3p8. 905 LexUnexpandedToken(Result); 906 907 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.: 908 // #define A(x) #x 909 // A(abc 910 // #warning blah 911 // def) 912 // If so, the user is relying on undefined behavior, emit a diagnostic. Do 913 // not support this for #include-like directives, since that can result in 914 // terrible diagnostics, and does not work in GCC. 915 if (InMacroArgs) { 916 if (IdentifierInfo *II = Result.getIdentifierInfo()) { 917 switch (II->getPPKeywordID()) { 918 case tok::pp_include: 919 case tok::pp_import: 920 case tok::pp_include_next: 921 case tok::pp___include_macros: 922 case tok::pp_pragma: 923 Diag(Result, diag::err_embedded_directive) << II->getName(); 924 DiscardUntilEndOfDirective(); 925 return; 926 default: 927 break; 928 } 929 } 930 Diag(Result, diag::ext_embedded_directive); 931 } 932 933 // Temporarily enable macro expansion if set so 934 // and reset to previous state when returning from this function. 935 ResetMacroExpansionHelper helper(this); 936 937 switch (Result.getKind()) { 938 case tok::eod: 939 return; // null directive. 940 case tok::code_completion: 941 if (CodeComplete) 942 CodeComplete->CodeCompleteDirective( 943 CurPPLexer->getConditionalStackDepth() > 0); 944 setCodeCompletionReached(); 945 return; 946 case tok::numeric_constant: // # 7 GNU line marker directive. 947 if (getLangOpts().AsmPreprocessor) 948 break; // # 4 is not a preprocessor directive in .S files. 949 return HandleDigitDirective(Result); 950 default: 951 IdentifierInfo *II = Result.getIdentifierInfo(); 952 if (!II) break; // Not an identifier. 953 954 // Ask what the preprocessor keyword ID is. 955 switch (II->getPPKeywordID()) { 956 default: break; 957 // C99 6.10.1 - Conditional Inclusion. 958 case tok::pp_if: 959 return HandleIfDirective(Result, ReadAnyTokensBeforeDirective); 960 case tok::pp_ifdef: 961 return HandleIfdefDirective(Result, false, true/*not valid for miopt*/); 962 case tok::pp_ifndef: 963 return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective); 964 case tok::pp_elif: 965 return HandleElifDirective(Result); 966 case tok::pp_else: 967 return HandleElseDirective(Result); 968 case tok::pp_endif: 969 return HandleEndifDirective(Result); 970 971 // C99 6.10.2 - Source File Inclusion. 972 case tok::pp_include: 973 // Handle #include. 974 return HandleIncludeDirective(SavedHash.getLocation(), Result); 975 case tok::pp___include_macros: 976 // Handle -imacros. 977 return HandleIncludeMacrosDirective(SavedHash.getLocation(), Result); 978 979 // C99 6.10.3 - Macro Replacement. 980 case tok::pp_define: 981 return HandleDefineDirective(Result, ImmediatelyAfterTopLevelIfndef); 982 case tok::pp_undef: 983 return HandleUndefDirective(); 984 985 // C99 6.10.4 - Line Control. 986 case tok::pp_line: 987 return HandleLineDirective(); 988 989 // C99 6.10.5 - Error Directive. 990 case tok::pp_error: 991 return HandleUserDiagnosticDirective(Result, false); 992 993 // C99 6.10.6 - Pragma Directive. 994 case tok::pp_pragma: 995 return HandlePragmaDirective(SavedHash.getLocation(), PIK_HashPragma); 996 997 // GNU Extensions. 998 case tok::pp_import: 999 return HandleImportDirective(SavedHash.getLocation(), Result); 1000 case tok::pp_include_next: 1001 return HandleIncludeNextDirective(SavedHash.getLocation(), Result); 1002 1003 case tok::pp_warning: 1004 Diag(Result, diag::ext_pp_warning_directive); 1005 return HandleUserDiagnosticDirective(Result, true); 1006 case tok::pp_ident: 1007 return HandleIdentSCCSDirective(Result); 1008 case tok::pp_sccs: 1009 return HandleIdentSCCSDirective(Result); 1010 case tok::pp_assert: 1011 //isExtension = true; // FIXME: implement #assert 1012 break; 1013 case tok::pp_unassert: 1014 //isExtension = true; // FIXME: implement #unassert 1015 break; 1016 1017 case tok::pp___public_macro: 1018 if (getLangOpts().Modules) 1019 return HandleMacroPublicDirective(Result); 1020 break; 1021 1022 case tok::pp___private_macro: 1023 if (getLangOpts().Modules) 1024 return HandleMacroPrivateDirective(); 1025 break; 1026 } 1027 break; 1028 } 1029 1030 // If this is a .S file, treat unknown # directives as non-preprocessor 1031 // directives. This is important because # may be a comment or introduce 1032 // various pseudo-ops. Just return the # token and push back the following 1033 // token to be lexed next time. 1034 if (getLangOpts().AsmPreprocessor) { 1035 auto Toks = llvm::make_unique<Token[]>(2); 1036 // Return the # and the token after it. 1037 Toks[0] = SavedHash; 1038 Toks[1] = Result; 1039 1040 // If the second token is a hashhash token, then we need to translate it to 1041 // unknown so the token lexer doesn't try to perform token pasting. 1042 if (Result.is(tok::hashhash)) 1043 Toks[1].setKind(tok::unknown); 1044 1045 // Enter this token stream so that we re-lex the tokens. Make sure to 1046 // enable macro expansion, in case the token after the # is an identifier 1047 // that is expanded. 1048 EnterTokenStream(std::move(Toks), 2, false); 1049 return; 1050 } 1051 1052 // If we reached here, the preprocessing token is not valid! 1053 Diag(Result, diag::err_pp_invalid_directive); 1054 1055 // Read the rest of the PP line. 1056 DiscardUntilEndOfDirective(); 1057 1058 // Okay, we're done parsing the directive. 1059 } 1060 1061 /// GetLineValue - Convert a numeric token into an unsigned value, emitting 1062 /// Diagnostic DiagID if it is invalid, and returning the value in Val. 1063 static bool GetLineValue(Token &DigitTok, unsigned &Val, 1064 unsigned DiagID, Preprocessor &PP, 1065 bool IsGNULineDirective=false) { 1066 if (DigitTok.isNot(tok::numeric_constant)) { 1067 PP.Diag(DigitTok, DiagID); 1068 1069 if (DigitTok.isNot(tok::eod)) 1070 PP.DiscardUntilEndOfDirective(); 1071 return true; 1072 } 1073 1074 SmallString<64> IntegerBuffer; 1075 IntegerBuffer.resize(DigitTok.getLength()); 1076 const char *DigitTokBegin = &IntegerBuffer[0]; 1077 bool Invalid = false; 1078 unsigned ActualLength = PP.getSpelling(DigitTok, DigitTokBegin, &Invalid); 1079 if (Invalid) 1080 return true; 1081 1082 // Verify that we have a simple digit-sequence, and compute the value. This 1083 // is always a simple digit string computed in decimal, so we do this manually 1084 // here. 1085 Val = 0; 1086 for (unsigned i = 0; i != ActualLength; ++i) { 1087 // C++1y [lex.fcon]p1: 1088 // Optional separating single quotes in a digit-sequence are ignored 1089 if (DigitTokBegin[i] == '\'') 1090 continue; 1091 1092 if (!isDigit(DigitTokBegin[i])) { 1093 PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), 1094 diag::err_pp_line_digit_sequence) << IsGNULineDirective; 1095 PP.DiscardUntilEndOfDirective(); 1096 return true; 1097 } 1098 1099 unsigned NextVal = Val*10+(DigitTokBegin[i]-'0'); 1100 if (NextVal < Val) { // overflow. 1101 PP.Diag(DigitTok, DiagID); 1102 PP.DiscardUntilEndOfDirective(); 1103 return true; 1104 } 1105 Val = NextVal; 1106 } 1107 1108 if (DigitTokBegin[0] == '0' && Val) 1109 PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal) 1110 << IsGNULineDirective; 1111 1112 return false; 1113 } 1114 1115 /// \brief Handle a \#line directive: C99 6.10.4. 1116 /// 1117 /// The two acceptable forms are: 1118 /// \verbatim 1119 /// # line digit-sequence 1120 /// # line digit-sequence "s-char-sequence" 1121 /// \endverbatim 1122 void Preprocessor::HandleLineDirective() { 1123 // Read the line # and string argument. Per C99 6.10.4p5, these tokens are 1124 // expanded. 1125 Token DigitTok; 1126 Lex(DigitTok); 1127 1128 // Validate the number and convert it to an unsigned. 1129 unsigned LineNo; 1130 if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer,*this)) 1131 return; 1132 1133 if (LineNo == 0) 1134 Diag(DigitTok, diag::ext_pp_line_zero); 1135 1136 // Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a 1137 // number greater than 2147483647". C90 requires that the line # be <= 32767. 1138 unsigned LineLimit = 32768U; 1139 if (LangOpts.C99 || LangOpts.CPlusPlus11) 1140 LineLimit = 2147483648U; 1141 if (LineNo >= LineLimit) 1142 Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit; 1143 else if (LangOpts.CPlusPlus11 && LineNo >= 32768U) 1144 Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big); 1145 1146 int FilenameID = -1; 1147 Token StrTok; 1148 Lex(StrTok); 1149 1150 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1151 // string followed by eod. 1152 if (StrTok.is(tok::eod)) 1153 ; // ok 1154 else if (StrTok.isNot(tok::string_literal)) { 1155 Diag(StrTok, diag::err_pp_line_invalid_filename); 1156 return DiscardUntilEndOfDirective(); 1157 } else if (StrTok.hasUDSuffix()) { 1158 Diag(StrTok, diag::err_invalid_string_udl); 1159 return DiscardUntilEndOfDirective(); 1160 } else { 1161 // Parse and validate the string, converting it into a unique ID. 1162 StringLiteralParser Literal(StrTok, *this); 1163 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1164 if (Literal.hadError) 1165 return DiscardUntilEndOfDirective(); 1166 if (Literal.Pascal) { 1167 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1168 return DiscardUntilEndOfDirective(); 1169 } 1170 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1171 1172 // Verify that there is nothing after the string, other than EOD. Because 1173 // of C99 6.10.4p5, macros that expand to empty tokens are ok. 1174 CheckEndOfDirective("line", true); 1175 } 1176 1177 // Take the file kind of the file containing the #line directive. #line 1178 // directives are often used for generated sources from the same codebase, so 1179 // the new file should generally be classified the same way as the current 1180 // file. This is visible in GCC's pre-processed output, which rewrites #line 1181 // to GNU line markers. 1182 SrcMgr::CharacteristicKind FileKind = 1183 SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1184 1185 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, false, 1186 false, FileKind); 1187 1188 if (Callbacks) 1189 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), 1190 PPCallbacks::RenameFile, FileKind); 1191 } 1192 1193 /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line 1194 /// marker directive. 1195 static bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, 1196 SrcMgr::CharacteristicKind &FileKind, 1197 Preprocessor &PP) { 1198 unsigned FlagVal; 1199 Token FlagTok; 1200 PP.Lex(FlagTok); 1201 if (FlagTok.is(tok::eod)) return false; 1202 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1203 return true; 1204 1205 if (FlagVal == 1) { 1206 IsFileEntry = true; 1207 1208 PP.Lex(FlagTok); 1209 if (FlagTok.is(tok::eod)) return false; 1210 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1211 return true; 1212 } else if (FlagVal == 2) { 1213 IsFileExit = true; 1214 1215 SourceManager &SM = PP.getSourceManager(); 1216 // If we are leaving the current presumed file, check to make sure the 1217 // presumed include stack isn't empty! 1218 FileID CurFileID = 1219 SM.getDecomposedExpansionLoc(FlagTok.getLocation()).first; 1220 PresumedLoc PLoc = SM.getPresumedLoc(FlagTok.getLocation()); 1221 if (PLoc.isInvalid()) 1222 return true; 1223 1224 // If there is no include loc (main file) or if the include loc is in a 1225 // different physical file, then we aren't in a "1" line marker flag region. 1226 SourceLocation IncLoc = PLoc.getIncludeLoc(); 1227 if (IncLoc.isInvalid() || 1228 SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) { 1229 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop); 1230 PP.DiscardUntilEndOfDirective(); 1231 return true; 1232 } 1233 1234 PP.Lex(FlagTok); 1235 if (FlagTok.is(tok::eod)) return false; 1236 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1237 return true; 1238 } 1239 1240 // We must have 3 if there are still flags. 1241 if (FlagVal != 3) { 1242 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1243 PP.DiscardUntilEndOfDirective(); 1244 return true; 1245 } 1246 1247 FileKind = SrcMgr::C_System; 1248 1249 PP.Lex(FlagTok); 1250 if (FlagTok.is(tok::eod)) return false; 1251 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1252 return true; 1253 1254 // We must have 4 if there is yet another flag. 1255 if (FlagVal != 4) { 1256 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1257 PP.DiscardUntilEndOfDirective(); 1258 return true; 1259 } 1260 1261 FileKind = SrcMgr::C_ExternCSystem; 1262 1263 PP.Lex(FlagTok); 1264 if (FlagTok.is(tok::eod)) return false; 1265 1266 // There are no more valid flags here. 1267 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1268 PP.DiscardUntilEndOfDirective(); 1269 return true; 1270 } 1271 1272 /// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is 1273 /// one of the following forms: 1274 /// 1275 /// # 42 1276 /// # 42 "file" ('1' | '2')? 1277 /// # 42 "file" ('1' | '2')? '3' '4'? 1278 /// 1279 void Preprocessor::HandleDigitDirective(Token &DigitTok) { 1280 // Validate the number and convert it to an unsigned. GNU does not have a 1281 // line # limit other than it fit in 32-bits. 1282 unsigned LineNo; 1283 if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, 1284 *this, true)) 1285 return; 1286 1287 Token StrTok; 1288 Lex(StrTok); 1289 1290 bool IsFileEntry = false, IsFileExit = false; 1291 int FilenameID = -1; 1292 SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User; 1293 1294 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1295 // string followed by eod. 1296 if (StrTok.is(tok::eod)) { 1297 // Treat this like "#line NN", which doesn't change file characteristics. 1298 FileKind = SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1299 } else if (StrTok.isNot(tok::string_literal)) { 1300 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1301 return DiscardUntilEndOfDirective(); 1302 } else if (StrTok.hasUDSuffix()) { 1303 Diag(StrTok, diag::err_invalid_string_udl); 1304 return DiscardUntilEndOfDirective(); 1305 } else { 1306 // Parse and validate the string, converting it into a unique ID. 1307 StringLiteralParser Literal(StrTok, *this); 1308 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1309 if (Literal.hadError) 1310 return DiscardUntilEndOfDirective(); 1311 if (Literal.Pascal) { 1312 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1313 return DiscardUntilEndOfDirective(); 1314 } 1315 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1316 1317 // If a filename was present, read any flags that are present. 1318 if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this)) 1319 return; 1320 } 1321 1322 // Create a line note with this information. 1323 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry, 1324 IsFileExit, FileKind); 1325 1326 // If the preprocessor has callbacks installed, notify them of the #line 1327 // change. This is used so that the line marker comes out in -E mode for 1328 // example. 1329 if (Callbacks) { 1330 PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile; 1331 if (IsFileEntry) 1332 Reason = PPCallbacks::EnterFile; 1333 else if (IsFileExit) 1334 Reason = PPCallbacks::ExitFile; 1335 1336 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind); 1337 } 1338 } 1339 1340 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive. 1341 /// 1342 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok, 1343 bool isWarning) { 1344 // PTH doesn't emit #warning or #error directives. 1345 if (CurPTHLexer) 1346 return CurPTHLexer->DiscardToEndOfLine(); 1347 1348 // Read the rest of the line raw. We do this because we don't want macros 1349 // to be expanded and we don't require that the tokens be valid preprocessing 1350 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does 1351 // collapse multiple consequtive white space between tokens, but this isn't 1352 // specified by the standard. 1353 SmallString<128> Message; 1354 CurLexer->ReadToEndOfLine(&Message); 1355 1356 // Find the first non-whitespace character, so that we can make the 1357 // diagnostic more succinct. 1358 StringRef Msg = StringRef(Message).ltrim(' '); 1359 1360 if (isWarning) 1361 Diag(Tok, diag::pp_hash_warning) << Msg; 1362 else 1363 Diag(Tok, diag::err_pp_hash_error) << Msg; 1364 } 1365 1366 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive. 1367 /// 1368 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) { 1369 // Yes, this directive is an extension. 1370 Diag(Tok, diag::ext_pp_ident_directive); 1371 1372 // Read the string argument. 1373 Token StrTok; 1374 Lex(StrTok); 1375 1376 // If the token kind isn't a string, it's a malformed directive. 1377 if (StrTok.isNot(tok::string_literal) && 1378 StrTok.isNot(tok::wide_string_literal)) { 1379 Diag(StrTok, diag::err_pp_malformed_ident); 1380 if (StrTok.isNot(tok::eod)) 1381 DiscardUntilEndOfDirective(); 1382 return; 1383 } 1384 1385 if (StrTok.hasUDSuffix()) { 1386 Diag(StrTok, diag::err_invalid_string_udl); 1387 return DiscardUntilEndOfDirective(); 1388 } 1389 1390 // Verify that there is nothing after the string, other than EOD. 1391 CheckEndOfDirective("ident"); 1392 1393 if (Callbacks) { 1394 bool Invalid = false; 1395 std::string Str = getSpelling(StrTok, &Invalid); 1396 if (!Invalid) 1397 Callbacks->Ident(Tok.getLocation(), Str); 1398 } 1399 } 1400 1401 /// \brief Handle a #public directive. 1402 void Preprocessor::HandleMacroPublicDirective(Token &Tok) { 1403 Token MacroNameTok; 1404 ReadMacroName(MacroNameTok, MU_Undef); 1405 1406 // Error reading macro name? If so, diagnostic already issued. 1407 if (MacroNameTok.is(tok::eod)) 1408 return; 1409 1410 // Check to see if this is the last token on the #__public_macro line. 1411 CheckEndOfDirective("__public_macro"); 1412 1413 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1414 // Okay, we finally have a valid identifier to undef. 1415 MacroDirective *MD = getLocalMacroDirective(II); 1416 1417 // If the macro is not defined, this is an error. 1418 if (!MD) { 1419 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1420 return; 1421 } 1422 1423 // Note that this macro has now been exported. 1424 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1425 MacroNameTok.getLocation(), /*IsPublic=*/true)); 1426 } 1427 1428 /// \brief Handle a #private directive. 1429 void Preprocessor::HandleMacroPrivateDirective() { 1430 Token MacroNameTok; 1431 ReadMacroName(MacroNameTok, MU_Undef); 1432 1433 // Error reading macro name? If so, diagnostic already issued. 1434 if (MacroNameTok.is(tok::eod)) 1435 return; 1436 1437 // Check to see if this is the last token on the #__private_macro line. 1438 CheckEndOfDirective("__private_macro"); 1439 1440 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1441 // Okay, we finally have a valid identifier to undef. 1442 MacroDirective *MD = getLocalMacroDirective(II); 1443 1444 // If the macro is not defined, this is an error. 1445 if (!MD) { 1446 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1447 return; 1448 } 1449 1450 // Note that this macro has now been marked private. 1451 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1452 MacroNameTok.getLocation(), /*IsPublic=*/false)); 1453 } 1454 1455 //===----------------------------------------------------------------------===// 1456 // Preprocessor Include Directive Handling. 1457 //===----------------------------------------------------------------------===// 1458 1459 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully 1460 /// checked and spelled filename, e.g. as an operand of \#include. This returns 1461 /// true if the input filename was in <>'s or false if it were in ""'s. The 1462 /// caller is expected to provide a buffer that is large enough to hold the 1463 /// spelling of the filename, but is also expected to handle the case when 1464 /// this method decides to use a different buffer. 1465 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, 1466 StringRef &Buffer) { 1467 // Get the text form of the filename. 1468 assert(!Buffer.empty() && "Can't have tokens with empty spellings!"); 1469 1470 // Make sure the filename is <x> or "x". 1471 bool isAngled; 1472 if (Buffer[0] == '<') { 1473 if (Buffer.back() != '>') { 1474 Diag(Loc, diag::err_pp_expects_filename); 1475 Buffer = StringRef(); 1476 return true; 1477 } 1478 isAngled = true; 1479 } else if (Buffer[0] == '"') { 1480 if (Buffer.back() != '"') { 1481 Diag(Loc, diag::err_pp_expects_filename); 1482 Buffer = StringRef(); 1483 return true; 1484 } 1485 isAngled = false; 1486 } else { 1487 Diag(Loc, diag::err_pp_expects_filename); 1488 Buffer = StringRef(); 1489 return true; 1490 } 1491 1492 // Diagnose #include "" as invalid. 1493 if (Buffer.size() <= 2) { 1494 Diag(Loc, diag::err_pp_empty_filename); 1495 Buffer = StringRef(); 1496 return true; 1497 } 1498 1499 // Skip the brackets. 1500 Buffer = Buffer.substr(1, Buffer.size()-2); 1501 return isAngled; 1502 } 1503 1504 // \brief Handle cases where the \#include name is expanded from a macro 1505 // as multiple tokens, which need to be glued together. 1506 // 1507 // This occurs for code like: 1508 // \code 1509 // \#define FOO <a/b.h> 1510 // \#include FOO 1511 // \endcode 1512 // because in this case, "<a/b.h>" is returned as 7 tokens, not one. 1513 // 1514 // This code concatenates and consumes tokens up to the '>' token. It returns 1515 // false if the > was found, otherwise it returns true if it finds and consumes 1516 // the EOD marker. 1517 bool Preprocessor::ConcatenateIncludeName(SmallString<128> &FilenameBuffer, 1518 SourceLocation &End) { 1519 Token CurTok; 1520 1521 Lex(CurTok); 1522 while (CurTok.isNot(tok::eod)) { 1523 End = CurTok.getLocation(); 1524 1525 // FIXME: Provide code completion for #includes. 1526 if (CurTok.is(tok::code_completion)) { 1527 setCodeCompletionReached(); 1528 Lex(CurTok); 1529 continue; 1530 } 1531 1532 // Append the spelling of this token to the buffer. If there was a space 1533 // before it, add it now. 1534 if (CurTok.hasLeadingSpace()) 1535 FilenameBuffer.push_back(' '); 1536 1537 // Get the spelling of the token, directly into FilenameBuffer if possible. 1538 size_t PreAppendSize = FilenameBuffer.size(); 1539 FilenameBuffer.resize(PreAppendSize+CurTok.getLength()); 1540 1541 const char *BufPtr = &FilenameBuffer[PreAppendSize]; 1542 unsigned ActualLen = getSpelling(CurTok, BufPtr); 1543 1544 // If the token was spelled somewhere else, copy it into FilenameBuffer. 1545 if (BufPtr != &FilenameBuffer[PreAppendSize]) 1546 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen); 1547 1548 // Resize FilenameBuffer to the correct size. 1549 if (CurTok.getLength() != ActualLen) 1550 FilenameBuffer.resize(PreAppendSize+ActualLen); 1551 1552 // If we found the '>' marker, return success. 1553 if (CurTok.is(tok::greater)) 1554 return false; 1555 1556 Lex(CurTok); 1557 } 1558 1559 // If we hit the eod marker, emit an error and return true so that the caller 1560 // knows the EOD has been read. 1561 Diag(CurTok.getLocation(), diag::err_pp_expects_filename); 1562 return true; 1563 } 1564 1565 /// \brief Push a token onto the token stream containing an annotation. 1566 void Preprocessor::EnterAnnotationToken(SourceRange Range, 1567 tok::TokenKind Kind, 1568 void *AnnotationVal) { 1569 // FIXME: Produce this as the current token directly, rather than 1570 // allocating a new token for it. 1571 auto Tok = llvm::make_unique<Token[]>(1); 1572 Tok[0].startToken(); 1573 Tok[0].setKind(Kind); 1574 Tok[0].setLocation(Range.getBegin()); 1575 Tok[0].setAnnotationEndLoc(Range.getEnd()); 1576 Tok[0].setAnnotationValue(AnnotationVal); 1577 EnterTokenStream(std::move(Tok), 1, true); 1578 } 1579 1580 /// \brief Produce a diagnostic informing the user that a #include or similar 1581 /// was implicitly treated as a module import. 1582 static void diagnoseAutoModuleImport( 1583 Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, 1584 ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, 1585 SourceLocation PathEnd) { 1586 assert(PP.getLangOpts().ObjC2 && "no import syntax available"); 1587 1588 SmallString<128> PathString; 1589 for (size_t I = 0, N = Path.size(); I != N; ++I) { 1590 if (I) 1591 PathString += '.'; 1592 PathString += Path[I].first->getName(); 1593 } 1594 int IncludeKind = 0; 1595 1596 switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) { 1597 case tok::pp_include: 1598 IncludeKind = 0; 1599 break; 1600 1601 case tok::pp_import: 1602 IncludeKind = 1; 1603 break; 1604 1605 case tok::pp_include_next: 1606 IncludeKind = 2; 1607 break; 1608 1609 case tok::pp___include_macros: 1610 IncludeKind = 3; 1611 break; 1612 1613 default: 1614 llvm_unreachable("unknown include directive kind"); 1615 } 1616 1617 CharSourceRange ReplaceRange(SourceRange(HashLoc, PathEnd), 1618 /*IsTokenRange=*/false); 1619 PP.Diag(HashLoc, diag::warn_auto_module_import) 1620 << IncludeKind << PathString 1621 << FixItHint::CreateReplacement(ReplaceRange, 1622 ("@import " + PathString + ";").str()); 1623 } 1624 1625 // Given a vector of path components and a string containing the real 1626 // path to the file, build a properly-cased replacement in the vector, 1627 // and return true if the replacement should be suggested. 1628 static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components, 1629 StringRef RealPathName) { 1630 auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName); 1631 auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName); 1632 int Cnt = 0; 1633 bool SuggestReplacement = false; 1634 // Below is a best-effort to handle ".." in paths. It is admittedly 1635 // not 100% correct in the presence of symlinks. 1636 for (auto &Component : llvm::reverse(Components)) { 1637 if ("." == Component) { 1638 } else if (".." == Component) { 1639 ++Cnt; 1640 } else if (Cnt) { 1641 --Cnt; 1642 } else if (RealPathComponentIter != RealPathComponentEnd) { 1643 if (Component != *RealPathComponentIter) { 1644 // If these path components differ by more than just case, then we 1645 // may be looking at symlinked paths. Bail on this diagnostic to avoid 1646 // noisy false positives. 1647 SuggestReplacement = RealPathComponentIter->equals_lower(Component); 1648 if (!SuggestReplacement) 1649 break; 1650 Component = *RealPathComponentIter; 1651 } 1652 ++RealPathComponentIter; 1653 } 1654 } 1655 return SuggestReplacement; 1656 } 1657 1658 bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, 1659 const TargetInfo &TargetInfo, 1660 DiagnosticsEngine &Diags, Module *M) { 1661 Module::Requirement Requirement; 1662 Module::UnresolvedHeaderDirective MissingHeader; 1663 if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader)) 1664 return false; 1665 1666 if (MissingHeader.FileNameLoc.isValid()) { 1667 Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) 1668 << MissingHeader.IsUmbrella << MissingHeader.FileName; 1669 } else { 1670 // FIXME: Track the location at which the requirement was specified, and 1671 // use it here. 1672 Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) 1673 << M->getFullModuleName() << Requirement.second << Requirement.first; 1674 } 1675 return true; 1676 } 1677 1678 /// HandleIncludeDirective - The "\#include" tokens have just been read, read 1679 /// the file to be included from the lexer, then include it! This is a common 1680 /// routine with functionality shared between \#include, \#include_next and 1681 /// \#import. LookupFrom is set when this is a \#include_next directive, it 1682 /// specifies the file to start searching from. 1683 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, 1684 Token &IncludeTok, 1685 const DirectoryLookup *LookupFrom, 1686 const FileEntry *LookupFromFile, 1687 bool isImport) { 1688 Token FilenameTok; 1689 CurPPLexer->LexIncludeFilename(FilenameTok); 1690 1691 // Reserve a buffer to get the spelling. 1692 SmallString<128> FilenameBuffer; 1693 StringRef Filename; 1694 SourceLocation End; 1695 SourceLocation CharEnd; // the end of this directive, in characters 1696 1697 switch (FilenameTok.getKind()) { 1698 case tok::eod: 1699 // If the token kind is EOD, the error has already been diagnosed. 1700 return; 1701 1702 case tok::angle_string_literal: 1703 case tok::string_literal: 1704 Filename = getSpelling(FilenameTok, FilenameBuffer); 1705 End = FilenameTok.getLocation(); 1706 CharEnd = End.getLocWithOffset(FilenameTok.getLength()); 1707 break; 1708 1709 case tok::less: 1710 // This could be a <foo/bar.h> file coming from a macro expansion. In this 1711 // case, glue the tokens together into FilenameBuffer and interpret those. 1712 FilenameBuffer.push_back('<'); 1713 if (ConcatenateIncludeName(FilenameBuffer, End)) 1714 return; // Found <eod> but no ">"? Diagnostic already emitted. 1715 Filename = FilenameBuffer; 1716 CharEnd = End.getLocWithOffset(1); 1717 break; 1718 default: 1719 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename); 1720 DiscardUntilEndOfDirective(); 1721 return; 1722 } 1723 1724 CharSourceRange FilenameRange 1725 = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd); 1726 StringRef OriginalFilename = Filename; 1727 bool isAngled = 1728 GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename); 1729 // If GetIncludeFilenameSpelling set the start ptr to null, there was an 1730 // error. 1731 if (Filename.empty()) { 1732 DiscardUntilEndOfDirective(); 1733 return; 1734 } 1735 1736 // Verify that there is nothing after the filename, other than EOD. Note that 1737 // we allow macros that expand to nothing after the filename, because this 1738 // falls into the category of "#include pp-tokens new-line" specified in 1739 // C99 6.10.2p4. 1740 CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true); 1741 1742 // Check that we don't have infinite #include recursion. 1743 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) { 1744 Diag(FilenameTok, diag::err_pp_include_too_deep); 1745 return; 1746 } 1747 1748 // Complain about attempts to #include files in an audit pragma. 1749 if (PragmaARCCFCodeAuditedLoc.isValid()) { 1750 Diag(HashLoc, diag::err_pp_include_in_arc_cf_code_audited); 1751 Diag(PragmaARCCFCodeAuditedLoc, diag::note_pragma_entered_here); 1752 1753 // Immediately leave the pragma. 1754 PragmaARCCFCodeAuditedLoc = SourceLocation(); 1755 } 1756 1757 // Complain about attempts to #include files in an assume-nonnull pragma. 1758 if (PragmaAssumeNonNullLoc.isValid()) { 1759 Diag(HashLoc, diag::err_pp_include_in_assume_nonnull); 1760 Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here); 1761 1762 // Immediately leave the pragma. 1763 PragmaAssumeNonNullLoc = SourceLocation(); 1764 } 1765 1766 if (HeaderInfo.HasIncludeAliasMap()) { 1767 // Map the filename with the brackets still attached. If the name doesn't 1768 // map to anything, fall back on the filename we've already gotten the 1769 // spelling for. 1770 StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename); 1771 if (!NewName.empty()) 1772 Filename = NewName; 1773 } 1774 1775 // Search include directories. 1776 bool IsMapped = false; 1777 const DirectoryLookup *CurDir; 1778 SmallString<1024> SearchPath; 1779 SmallString<1024> RelativePath; 1780 // We get the raw path only if we have 'Callbacks' to which we later pass 1781 // the path. 1782 ModuleMap::KnownHeader SuggestedModule; 1783 SourceLocation FilenameLoc = FilenameTok.getLocation(); 1784 SmallString<128> NormalizedPath; 1785 if (LangOpts.MSVCCompat) { 1786 NormalizedPath = Filename.str(); 1787 #ifndef LLVM_ON_WIN32 1788 llvm::sys::path::native(NormalizedPath); 1789 #endif 1790 } 1791 const FileEntry *File = LookupFile( 1792 FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, 1793 isAngled, LookupFrom, LookupFromFile, CurDir, 1794 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1795 &SuggestedModule, &IsMapped); 1796 1797 if (!File) { 1798 if (Callbacks) { 1799 // Give the clients a chance to recover. 1800 SmallString<128> RecoveryPath; 1801 if (Callbacks->FileNotFound(Filename, RecoveryPath)) { 1802 if (const DirectoryEntry *DE = FileMgr.getDirectory(RecoveryPath)) { 1803 // Add the recovery path to the list of search paths. 1804 DirectoryLookup DL(DE, SrcMgr::C_User, false); 1805 HeaderInfo.AddSearchPath(DL, isAngled); 1806 1807 // Try the lookup again, skipping the cache. 1808 File = LookupFile( 1809 FilenameLoc, 1810 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled, 1811 LookupFrom, LookupFromFile, CurDir, nullptr, nullptr, 1812 &SuggestedModule, &IsMapped, /*SkipCache*/ true); 1813 } 1814 } 1815 } 1816 1817 if (!SuppressIncludeNotFoundError) { 1818 // If the file could not be located and it was included via angle 1819 // brackets, we can attempt a lookup as though it were a quoted path to 1820 // provide the user with a possible fixit. 1821 if (isAngled) { 1822 File = LookupFile( 1823 FilenameLoc, 1824 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, false, 1825 LookupFrom, LookupFromFile, CurDir, 1826 Callbacks ? &SearchPath : nullptr, 1827 Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped); 1828 if (File) { 1829 SourceRange Range(FilenameTok.getLocation(), CharEnd); 1830 Diag(FilenameTok, diag::err_pp_file_not_found_not_fatal) << 1831 Filename << 1832 FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\""); 1833 } 1834 } 1835 1836 // If the file is still not found, just go with the vanilla diagnostic 1837 if (!File) 1838 Diag(FilenameTok, diag::err_pp_file_not_found) << Filename 1839 << FilenameRange; 1840 } 1841 } 1842 1843 // Should we enter the source file? Set to false if either the source file is 1844 // known to have no effect beyond its effect on module visibility -- that is, 1845 // if it's got an include guard that is already defined or is a modular header 1846 // we've imported or already built. 1847 bool ShouldEnter = true; 1848 1849 if (PPOpts->SingleFileParseMode) 1850 ShouldEnter = false; 1851 1852 // Determine whether we should try to import the module for this #include, if 1853 // there is one. Don't do so if precompiled module support is disabled or we 1854 // are processing this module textually (because we're building the module). 1855 if (ShouldEnter && File && SuggestedModule && getLangOpts().Modules && 1856 SuggestedModule.getModule()->getTopLevelModuleName() != 1857 getLangOpts().CurrentModule) { 1858 // If this include corresponds to a module but that module is 1859 // unavailable, diagnose the situation and bail out. 1860 // FIXME: Remove this; loadModule does the same check (but produces 1861 // slightly worse diagnostics). 1862 if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(), 1863 SuggestedModule.getModule())) { 1864 Diag(FilenameTok.getLocation(), 1865 diag::note_implicit_top_level_module_import_here) 1866 << SuggestedModule.getModule()->getTopLevelModuleName(); 1867 return; 1868 } 1869 1870 // Compute the module access path corresponding to this module. 1871 // FIXME: Should we have a second loadModule() overload to avoid this 1872 // extra lookup step? 1873 SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path; 1874 for (Module *Mod = SuggestedModule.getModule(); Mod; Mod = Mod->Parent) 1875 Path.push_back(std::make_pair(getIdentifierInfo(Mod->Name), 1876 FilenameTok.getLocation())); 1877 std::reverse(Path.begin(), Path.end()); 1878 1879 // Warn that we're replacing the include/import with a module import. 1880 // We only do this in Objective-C, where we have a module-import syntax. 1881 if (getLangOpts().ObjC2) 1882 diagnoseAutoModuleImport(*this, HashLoc, IncludeTok, Path, CharEnd); 1883 1884 // Load the module to import its macros. We'll make the declarations 1885 // visible when the parser gets here. 1886 // FIXME: Pass SuggestedModule in here rather than converting it to a path 1887 // and making the module loader convert it back again. 1888 ModuleLoadResult Imported = TheModuleLoader.loadModule( 1889 IncludeTok.getLocation(), Path, Module::Hidden, 1890 /*IsIncludeDirective=*/true); 1891 assert((Imported == nullptr || Imported == SuggestedModule.getModule()) && 1892 "the imported module is different than the suggested one"); 1893 1894 if (Imported) 1895 ShouldEnter = false; 1896 else if (Imported.isMissingExpected()) { 1897 // We failed to find a submodule that we assumed would exist (because it 1898 // was in the directory of an umbrella header, for instance), but no 1899 // actual module containing it exists (because the umbrella header is 1900 // incomplete). Treat this as a textual inclusion. 1901 SuggestedModule = ModuleMap::KnownHeader(); 1902 } else if (Imported.isConfigMismatch()) { 1903 // On a configuration mismatch, enter the header textually. We still know 1904 // that it's part of the corresponding module. 1905 } else { 1906 // We hit an error processing the import. Bail out. 1907 if (hadModuleLoaderFatalFailure()) { 1908 // With a fatal failure in the module loader, we abort parsing. 1909 Token &Result = IncludeTok; 1910 if (CurLexer) { 1911 Result.startToken(); 1912 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd, tok::eof); 1913 CurLexer->cutOffLexing(); 1914 } else { 1915 assert(CurPTHLexer && "#include but no current lexer set!"); 1916 CurPTHLexer->getEOF(Result); 1917 } 1918 } 1919 return; 1920 } 1921 } 1922 1923 // The #included file will be considered to be a system header if either it is 1924 // in a system include directory, or if the #includer is a system include 1925 // header. 1926 SrcMgr::CharacteristicKind FileCharacter = 1927 SourceMgr.getFileCharacteristic(FilenameTok.getLocation()); 1928 if (File) 1929 FileCharacter = std::max(HeaderInfo.getFileDirFlavor(File), FileCharacter); 1930 1931 // Ask HeaderInfo if we should enter this #include file. If not, #including 1932 // this file will have no effect. 1933 bool SkipHeader = false; 1934 if (ShouldEnter && File && 1935 !HeaderInfo.ShouldEnterIncludeFile(*this, File, isImport, 1936 getLangOpts().Modules, 1937 SuggestedModule.getModule())) { 1938 ShouldEnter = false; 1939 SkipHeader = true; 1940 } 1941 1942 if (Callbacks) { 1943 // Notify the callback object that we've seen an inclusion directive. 1944 Callbacks->InclusionDirective( 1945 HashLoc, IncludeTok, 1946 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled, 1947 FilenameRange, File, SearchPath, RelativePath, 1948 ShouldEnter ? nullptr : SuggestedModule.getModule()); 1949 if (SkipHeader && !SuggestedModule.getModule()) 1950 Callbacks->FileSkipped(*File, FilenameTok, FileCharacter); 1951 } 1952 1953 if (!File) 1954 return; 1955 1956 // FIXME: If we have a suggested module, and we've already visited this file, 1957 // don't bother entering it again. We know it has no further effect. 1958 1959 // Issue a diagnostic if the name of the file on disk has a different case 1960 // than the one we're about to open. 1961 const bool CheckIncludePathPortability = 1962 !IsMapped && File && !File->tryGetRealPathName().empty(); 1963 1964 if (CheckIncludePathPortability) { 1965 StringRef Name = LangOpts.MSVCCompat ? NormalizedPath.str() : Filename; 1966 StringRef RealPathName = File->tryGetRealPathName(); 1967 SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name), 1968 llvm::sys::path::end(Name)); 1969 1970 if (trySimplifyPath(Components, RealPathName)) { 1971 SmallString<128> Path; 1972 Path.reserve(Name.size()+2); 1973 Path.push_back(isAngled ? '<' : '"'); 1974 bool isLeadingSeparator = llvm::sys::path::is_absolute(Name); 1975 for (auto Component : Components) { 1976 if (isLeadingSeparator) 1977 isLeadingSeparator = false; 1978 else 1979 Path.append(Component); 1980 // Append the separator the user used, or the close quote 1981 Path.push_back( 1982 Path.size() <= Filename.size() ? Filename[Path.size()-1] : 1983 (isAngled ? '>' : '"')); 1984 } 1985 // For user files and known standard headers, by default we issue a diagnostic. 1986 // For other system headers, we don't. They can be controlled separately. 1987 auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? 1988 diag::pp_nonportable_path : diag::pp_nonportable_system_path; 1989 SourceRange Range(FilenameTok.getLocation(), CharEnd); 1990 Diag(FilenameTok, DiagId) << Path << 1991 FixItHint::CreateReplacement(Range, Path); 1992 } 1993 } 1994 1995 // If we don't need to enter the file, stop now. 1996 if (!ShouldEnter) { 1997 // If this is a module import, make it visible if needed. 1998 if (auto *M = SuggestedModule.getModule()) { 1999 // When building a pch, -fmodule-name tells the compiler to textually 2000 // include headers in the specified module. But it is possible that 2001 // ShouldEnter is false because we are skipping the header. In that 2002 // case, We are not importing the specified module. 2003 if (SkipHeader && getLangOpts().CompilingPCH && 2004 M->getTopLevelModuleName() == getLangOpts().CurrentModule) 2005 return; 2006 2007 makeModuleVisible(M, HashLoc); 2008 2009 if (IncludeTok.getIdentifierInfo()->getPPKeywordID() != 2010 tok::pp___include_macros) 2011 EnterAnnotationToken(SourceRange(HashLoc, End), 2012 tok::annot_module_include, M); 2013 } 2014 return; 2015 } 2016 2017 // Look up the file, create a File ID for it. 2018 SourceLocation IncludePos = End; 2019 // If the filename string was the result of macro expansions, set the include 2020 // position on the file where it will be included and after the expansions. 2021 if (IncludePos.isMacroID()) 2022 IncludePos = SourceMgr.getExpansionRange(IncludePos).second; 2023 FileID FID = SourceMgr.createFileID(File, IncludePos, FileCharacter); 2024 assert(FID.isValid() && "Expected valid file ID"); 2025 2026 // If all is good, enter the new file! 2027 if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation())) 2028 return; 2029 2030 // Determine if we're switching to building a new submodule, and which one. 2031 if (auto *M = SuggestedModule.getModule()) { 2032 // When building a pch, -fmodule-name tells the compiler to textually 2033 // include headers in the specified module. We are not building the 2034 // specified module. 2035 if (getLangOpts().CompilingPCH && 2036 M->getTopLevelModuleName() == getLangOpts().CurrentModule) 2037 return; 2038 2039 assert(!CurLexerSubmodule && "should not have marked this as a module yet"); 2040 CurLexerSubmodule = M; 2041 2042 // Let the macro handling code know that any future macros are within 2043 // the new submodule. 2044 EnterSubmodule(M, HashLoc, /*ForPragma*/false); 2045 2046 // Let the parser know that any future declarations are within the new 2047 // submodule. 2048 // FIXME: There's no point doing this if we're handling a #__include_macros 2049 // directive. 2050 EnterAnnotationToken(SourceRange(HashLoc, End), tok::annot_module_begin, M); 2051 } 2052 } 2053 2054 /// HandleIncludeNextDirective - Implements \#include_next. 2055 /// 2056 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, 2057 Token &IncludeNextTok) { 2058 Diag(IncludeNextTok, diag::ext_pp_include_next_directive); 2059 2060 // #include_next is like #include, except that we start searching after 2061 // the current found directory. If we can't do this, issue a 2062 // diagnostic. 2063 const DirectoryLookup *Lookup = CurDirLookup; 2064 const FileEntry *LookupFromFile = nullptr; 2065 if (isInPrimaryFile() && LangOpts.IsHeaderFile) { 2066 // If the main file is a header, then it's either for PCH/AST generation, 2067 // or libclang opened it. Either way, handle it as a normal include below 2068 // and do not complain about include_next. 2069 } else if (isInPrimaryFile()) { 2070 Lookup = nullptr; 2071 Diag(IncludeNextTok, diag::pp_include_next_in_primary); 2072 } else if (CurLexerSubmodule) { 2073 // Start looking up in the directory *after* the one in which the current 2074 // file would be found, if any. 2075 assert(CurPPLexer && "#include_next directive in macro?"); 2076 LookupFromFile = CurPPLexer->getFileEntry(); 2077 Lookup = nullptr; 2078 } else if (!Lookup) { 2079 Diag(IncludeNextTok, diag::pp_include_next_absolute_path); 2080 } else { 2081 // Start looking up in the next directory. 2082 ++Lookup; 2083 } 2084 2085 return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup, 2086 LookupFromFile); 2087 } 2088 2089 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode 2090 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) { 2091 // The Microsoft #import directive takes a type library and generates header 2092 // files from it, and includes those. This is beyond the scope of what clang 2093 // does, so we ignore it and error out. However, #import can optionally have 2094 // trailing attributes that span multiple lines. We're going to eat those 2095 // so we can continue processing from there. 2096 Diag(Tok, diag::err_pp_import_directive_ms ); 2097 2098 // Read tokens until we get to the end of the directive. Note that the 2099 // directive can be split over multiple lines using the backslash character. 2100 DiscardUntilEndOfDirective(); 2101 } 2102 2103 /// HandleImportDirective - Implements \#import. 2104 /// 2105 void Preprocessor::HandleImportDirective(SourceLocation HashLoc, 2106 Token &ImportTok) { 2107 if (!LangOpts.ObjC1) { // #import is standard for ObjC. 2108 if (LangOpts.MSVCCompat) 2109 return HandleMicrosoftImportDirective(ImportTok); 2110 Diag(ImportTok, diag::ext_pp_import_directive); 2111 } 2112 return HandleIncludeDirective(HashLoc, ImportTok, nullptr, nullptr, true); 2113 } 2114 2115 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a 2116 /// pseudo directive in the predefines buffer. This handles it by sucking all 2117 /// tokens through the preprocessor and discarding them (only keeping the side 2118 /// effects on the preprocessor). 2119 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, 2120 Token &IncludeMacrosTok) { 2121 // This directive should only occur in the predefines buffer. If not, emit an 2122 // error and reject it. 2123 SourceLocation Loc = IncludeMacrosTok.getLocation(); 2124 if (SourceMgr.getBufferName(Loc) != "<built-in>") { 2125 Diag(IncludeMacrosTok.getLocation(), 2126 diag::pp_include_macros_out_of_predefines); 2127 DiscardUntilEndOfDirective(); 2128 return; 2129 } 2130 2131 // Treat this as a normal #include for checking purposes. If this is 2132 // successful, it will push a new lexer onto the include stack. 2133 HandleIncludeDirective(HashLoc, IncludeMacrosTok); 2134 2135 Token TmpTok; 2136 do { 2137 Lex(TmpTok); 2138 assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!"); 2139 } while (TmpTok.isNot(tok::hashhash)); 2140 } 2141 2142 //===----------------------------------------------------------------------===// 2143 // Preprocessor Macro Directive Handling. 2144 //===----------------------------------------------------------------------===// 2145 2146 /// ReadMacroDefinitionArgList - The ( starting an argument list of a macro 2147 /// definition has just been read. Lex the rest of the arguments and the 2148 /// closing ), updating MI with what we learn. Return true if an error occurs 2149 /// parsing the arg list. 2150 bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI, Token &Tok) { 2151 SmallVector<IdentifierInfo*, 32> Arguments; 2152 2153 while (true) { 2154 LexUnexpandedToken(Tok); 2155 switch (Tok.getKind()) { 2156 case tok::r_paren: 2157 // Found the end of the argument list. 2158 if (Arguments.empty()) // #define FOO() 2159 return false; 2160 // Otherwise we have #define FOO(A,) 2161 Diag(Tok, diag::err_pp_expected_ident_in_arg_list); 2162 return true; 2163 case tok::ellipsis: // #define X(... -> C99 varargs 2164 if (!LangOpts.C99) 2165 Diag(Tok, LangOpts.CPlusPlus11 ? 2166 diag::warn_cxx98_compat_variadic_macro : 2167 diag::ext_variadic_macro); 2168 2169 // OpenCL v1.2 s6.9.e: variadic macros are not supported. 2170 if (LangOpts.OpenCL) { 2171 Diag(Tok, diag::err_pp_opencl_variadic_macros); 2172 return true; 2173 } 2174 2175 // Lex the token after the identifier. 2176 LexUnexpandedToken(Tok); 2177 if (Tok.isNot(tok::r_paren)) { 2178 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2179 return true; 2180 } 2181 // Add the __VA_ARGS__ identifier as an argument. 2182 Arguments.push_back(Ident__VA_ARGS__); 2183 MI->setIsC99Varargs(); 2184 MI->setArgumentList(Arguments, BP); 2185 return false; 2186 case tok::eod: // #define X( 2187 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2188 return true; 2189 default: 2190 // Handle keywords and identifiers here to accept things like 2191 // #define Foo(for) for. 2192 IdentifierInfo *II = Tok.getIdentifierInfo(); 2193 if (!II) { 2194 // #define X(1 2195 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list); 2196 return true; 2197 } 2198 2199 // If this is already used as an argument, it is used multiple times (e.g. 2200 // #define X(A,A. 2201 if (std::find(Arguments.begin(), Arguments.end(), II) != 2202 Arguments.end()) { // C99 6.10.3p6 2203 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II; 2204 return true; 2205 } 2206 2207 // Add the argument to the macro info. 2208 Arguments.push_back(II); 2209 2210 // Lex the token after the identifier. 2211 LexUnexpandedToken(Tok); 2212 2213 switch (Tok.getKind()) { 2214 default: // #define X(A B 2215 Diag(Tok, diag::err_pp_expected_comma_in_arg_list); 2216 return true; 2217 case tok::r_paren: // #define X(A) 2218 MI->setArgumentList(Arguments, BP); 2219 return false; 2220 case tok::comma: // #define X(A, 2221 break; 2222 case tok::ellipsis: // #define X(A... -> GCC extension 2223 // Diagnose extension. 2224 Diag(Tok, diag::ext_named_variadic_macro); 2225 2226 // Lex the token after the identifier. 2227 LexUnexpandedToken(Tok); 2228 if (Tok.isNot(tok::r_paren)) { 2229 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2230 return true; 2231 } 2232 2233 MI->setIsGNUVarargs(); 2234 MI->setArgumentList(Arguments, BP); 2235 return false; 2236 } 2237 } 2238 } 2239 } 2240 2241 static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI, 2242 const LangOptions &LOptions) { 2243 if (MI->getNumTokens() == 1) { 2244 const Token &Value = MI->getReplacementToken(0); 2245 2246 // Macro that is identity, like '#define inline inline' is a valid pattern. 2247 if (MacroName.getKind() == Value.getKind()) 2248 return true; 2249 2250 // Macro that maps a keyword to the same keyword decorated with leading/ 2251 // trailing underscores is a valid pattern: 2252 // #define inline __inline 2253 // #define inline __inline__ 2254 // #define inline _inline (in MS compatibility mode) 2255 StringRef MacroText = MacroName.getIdentifierInfo()->getName(); 2256 if (IdentifierInfo *II = Value.getIdentifierInfo()) { 2257 if (!II->isKeyword(LOptions)) 2258 return false; 2259 StringRef ValueText = II->getName(); 2260 StringRef TrimmedValue = ValueText; 2261 if (!ValueText.startswith("__")) { 2262 if (ValueText.startswith("_")) 2263 TrimmedValue = TrimmedValue.drop_front(1); 2264 else 2265 return false; 2266 } else { 2267 TrimmedValue = TrimmedValue.drop_front(2); 2268 if (TrimmedValue.endswith("__")) 2269 TrimmedValue = TrimmedValue.drop_back(2); 2270 } 2271 return TrimmedValue.equals(MacroText); 2272 } else { 2273 return false; 2274 } 2275 } 2276 2277 // #define inline 2278 return MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static, 2279 tok::kw_const) && 2280 MI->getNumTokens() == 0; 2281 } 2282 2283 /// HandleDefineDirective - Implements \#define. This consumes the entire macro 2284 /// line then lets the caller lex the next real token. 2285 void Preprocessor::HandleDefineDirective(Token &DefineTok, 2286 bool ImmediatelyAfterHeaderGuard) { 2287 ++NumDefined; 2288 2289 Token MacroNameTok; 2290 bool MacroShadowsKeyword; 2291 ReadMacroName(MacroNameTok, MU_Define, &MacroShadowsKeyword); 2292 2293 // Error reading macro name? If so, diagnostic already issued. 2294 if (MacroNameTok.is(tok::eod)) 2295 return; 2296 2297 Token LastTok = MacroNameTok; 2298 2299 // If we are supposed to keep comments in #defines, reenable comment saving 2300 // mode. 2301 if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments); 2302 2303 // Create the new macro. 2304 MacroInfo *MI = AllocateMacroInfo(MacroNameTok.getLocation()); 2305 2306 Token Tok; 2307 LexUnexpandedToken(Tok); 2308 2309 // If this is a function-like macro definition, parse the argument list, 2310 // marking each of the identifiers as being used as macro arguments. Also, 2311 // check other constraints on the first token of the macro body. 2312 if (Tok.is(tok::eod)) { 2313 if (ImmediatelyAfterHeaderGuard) { 2314 // Save this macro information since it may part of a header guard. 2315 CurPPLexer->MIOpt.SetDefinedMacro(MacroNameTok.getIdentifierInfo(), 2316 MacroNameTok.getLocation()); 2317 } 2318 // If there is no body to this macro, we have no special handling here. 2319 } else if (Tok.hasLeadingSpace()) { 2320 // This is a normal token with leading space. Clear the leading space 2321 // marker on the first token to get proper expansion. 2322 Tok.clearFlag(Token::LeadingSpace); 2323 } else if (Tok.is(tok::l_paren)) { 2324 // This is a function-like macro definition. Read the argument list. 2325 MI->setIsFunctionLike(); 2326 if (ReadMacroDefinitionArgList(MI, LastTok)) { 2327 // Throw away the rest of the line. 2328 if (CurPPLexer->ParsingPreprocessorDirective) 2329 DiscardUntilEndOfDirective(); 2330 return; 2331 } 2332 2333 // If this is a definition of a variadic C99 function-like macro, not using 2334 // the GNU named varargs extension, enabled __VA_ARGS__. 2335 2336 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro. 2337 // This gets unpoisoned where it is allowed. 2338 assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!"); 2339 if (MI->isC99Varargs()) 2340 Ident__VA_ARGS__->setIsPoisoned(false); 2341 2342 // Read the first token after the arg list for down below. 2343 LexUnexpandedToken(Tok); 2344 } else if (LangOpts.C99 || LangOpts.CPlusPlus11) { 2345 // C99 requires whitespace between the macro definition and the body. Emit 2346 // a diagnostic for something like "#define X+". 2347 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name); 2348 } else { 2349 // C90 6.8 TC1 says: "In the definition of an object-like macro, if the 2350 // first character of a replacement list is not a character required by 2351 // subclause 5.2.1, then there shall be white-space separation between the 2352 // identifier and the replacement list.". 5.2.1 lists this set: 2353 // "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which 2354 // is irrelevant here. 2355 bool isInvalid = false; 2356 if (Tok.is(tok::at)) // @ is not in the list above. 2357 isInvalid = true; 2358 else if (Tok.is(tok::unknown)) { 2359 // If we have an unknown token, it is something strange like "`". Since 2360 // all of valid characters would have lexed into a single character 2361 // token of some sort, we know this is not a valid case. 2362 isInvalid = true; 2363 } 2364 if (isInvalid) 2365 Diag(Tok, diag::ext_missing_whitespace_after_macro_name); 2366 else 2367 Diag(Tok, diag::warn_missing_whitespace_after_macro_name); 2368 } 2369 2370 if (!Tok.is(tok::eod)) 2371 LastTok = Tok; 2372 2373 // Read the rest of the macro body. 2374 if (MI->isObjectLike()) { 2375 // Object-like macros are very simple, just read their body. 2376 while (Tok.isNot(tok::eod)) { 2377 LastTok = Tok; 2378 MI->AddTokenToBody(Tok); 2379 // Get the next token of the macro. 2380 LexUnexpandedToken(Tok); 2381 } 2382 } else { 2383 // Otherwise, read the body of a function-like macro. While we are at it, 2384 // check C99 6.10.3.2p1: ensure that # operators are followed by macro 2385 // parameters in function-like macro expansions. 2386 while (Tok.isNot(tok::eod)) { 2387 LastTok = Tok; 2388 2389 if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) { 2390 MI->AddTokenToBody(Tok); 2391 2392 // Get the next token of the macro. 2393 LexUnexpandedToken(Tok); 2394 continue; 2395 } 2396 2397 // If we're in -traditional mode, then we should ignore stringification 2398 // and token pasting. Mark the tokens as unknown so as not to confuse 2399 // things. 2400 if (getLangOpts().TraditionalCPP) { 2401 Tok.setKind(tok::unknown); 2402 MI->AddTokenToBody(Tok); 2403 2404 // Get the next token of the macro. 2405 LexUnexpandedToken(Tok); 2406 continue; 2407 } 2408 2409 if (Tok.is(tok::hashhash)) { 2410 // If we see token pasting, check if it looks like the gcc comma 2411 // pasting extension. We'll use this information to suppress 2412 // diagnostics later on. 2413 2414 // Get the next token of the macro. 2415 LexUnexpandedToken(Tok); 2416 2417 if (Tok.is(tok::eod)) { 2418 MI->AddTokenToBody(LastTok); 2419 break; 2420 } 2421 2422 unsigned NumTokens = MI->getNumTokens(); 2423 if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ && 2424 MI->getReplacementToken(NumTokens-1).is(tok::comma)) 2425 MI->setHasCommaPasting(); 2426 2427 // Things look ok, add the '##' token to the macro. 2428 MI->AddTokenToBody(LastTok); 2429 continue; 2430 } 2431 2432 // Get the next token of the macro. 2433 LexUnexpandedToken(Tok); 2434 2435 // Check for a valid macro arg identifier. 2436 if (Tok.getIdentifierInfo() == nullptr || 2437 MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) { 2438 2439 // If this is assembler-with-cpp mode, we accept random gibberish after 2440 // the '#' because '#' is often a comment character. However, change 2441 // the kind of the token to tok::unknown so that the preprocessor isn't 2442 // confused. 2443 if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) { 2444 LastTok.setKind(tok::unknown); 2445 MI->AddTokenToBody(LastTok); 2446 continue; 2447 } else { 2448 Diag(Tok, diag::err_pp_stringize_not_parameter) 2449 << LastTok.is(tok::hashat); 2450 2451 // Disable __VA_ARGS__ again. 2452 Ident__VA_ARGS__->setIsPoisoned(true); 2453 return; 2454 } 2455 } 2456 2457 // Things look ok, add the '#' and param name tokens to the macro. 2458 MI->AddTokenToBody(LastTok); 2459 MI->AddTokenToBody(Tok); 2460 LastTok = Tok; 2461 2462 // Get the next token of the macro. 2463 LexUnexpandedToken(Tok); 2464 } 2465 } 2466 2467 if (MacroShadowsKeyword && 2468 !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) { 2469 Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword); 2470 } 2471 2472 // Disable __VA_ARGS__ again. 2473 Ident__VA_ARGS__->setIsPoisoned(true); 2474 2475 // Check that there is no paste (##) operator at the beginning or end of the 2476 // replacement list. 2477 unsigned NumTokens = MI->getNumTokens(); 2478 if (NumTokens != 0) { 2479 if (MI->getReplacementToken(0).is(tok::hashhash)) { 2480 Diag(MI->getReplacementToken(0), diag::err_paste_at_start); 2481 return; 2482 } 2483 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) { 2484 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end); 2485 return; 2486 } 2487 } 2488 2489 MI->setDefinitionEndLoc(LastTok.getLocation()); 2490 2491 // Finally, if this identifier already had a macro defined for it, verify that 2492 // the macro bodies are identical, and issue diagnostics if they are not. 2493 if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) { 2494 // In Objective-C, ignore attempts to directly redefine the builtin 2495 // definitions of the ownership qualifiers. It's still possible to 2496 // #undef them. 2497 auto isObjCProtectedMacro = [](const IdentifierInfo *II) -> bool { 2498 return II->isStr("__strong") || 2499 II->isStr("__weak") || 2500 II->isStr("__unsafe_unretained") || 2501 II->isStr("__autoreleasing"); 2502 }; 2503 if (getLangOpts().ObjC1 && 2504 SourceMgr.getFileID(OtherMI->getDefinitionLoc()) 2505 == getPredefinesFileID() && 2506 isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) { 2507 // Warn if it changes the tokens. 2508 if ((!getDiagnostics().getSuppressSystemWarnings() || 2509 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) && 2510 !MI->isIdenticalTo(*OtherMI, *this, 2511 /*Syntactic=*/LangOpts.MicrosoftExt)) { 2512 Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored); 2513 } 2514 assert(!OtherMI->isWarnIfUnused()); 2515 return; 2516 } 2517 2518 // It is very common for system headers to have tons of macro redefinitions 2519 // and for warnings to be disabled in system headers. If this is the case, 2520 // then don't bother calling MacroInfo::isIdenticalTo. 2521 if (!getDiagnostics().getSuppressSystemWarnings() || 2522 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) { 2523 if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused()) 2524 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used); 2525 2526 // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and 2527 // C++ [cpp.predefined]p4, but allow it as an extension. 2528 if (OtherMI->isBuiltinMacro()) 2529 Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro); 2530 // Macros must be identical. This means all tokens and whitespace 2531 // separation must be the same. C99 6.10.3p2. 2532 else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && 2533 !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) { 2534 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) 2535 << MacroNameTok.getIdentifierInfo(); 2536 Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition); 2537 } 2538 } 2539 if (OtherMI->isWarnIfUnused()) 2540 WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc()); 2541 } 2542 2543 DefMacroDirective *MD = 2544 appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI); 2545 2546 assert(!MI->isUsed()); 2547 // If we need warning for not using the macro, add its location in the 2548 // warn-because-unused-macro set. If it gets used it will be removed from set. 2549 if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && 2550 !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc())) { 2551 MI->setIsWarnIfUnused(true); 2552 WarnUnusedMacroLocs.insert(MI->getDefinitionLoc()); 2553 } 2554 2555 // If the callbacks want to know, tell them about the macro definition. 2556 if (Callbacks) 2557 Callbacks->MacroDefined(MacroNameTok, MD); 2558 } 2559 2560 /// HandleUndefDirective - Implements \#undef. 2561 /// 2562 void Preprocessor::HandleUndefDirective() { 2563 ++NumUndefined; 2564 2565 Token MacroNameTok; 2566 ReadMacroName(MacroNameTok, MU_Undef); 2567 2568 // Error reading macro name? If so, diagnostic already issued. 2569 if (MacroNameTok.is(tok::eod)) 2570 return; 2571 2572 // Check to see if this is the last token on the #undef line. 2573 CheckEndOfDirective("undef"); 2574 2575 // Okay, we have a valid identifier to undef. 2576 auto *II = MacroNameTok.getIdentifierInfo(); 2577 auto MD = getMacroDefinition(II); 2578 UndefMacroDirective *Undef = nullptr; 2579 2580 // If the macro is not defined, this is a noop undef. 2581 if (const MacroInfo *MI = MD.getMacroInfo()) { 2582 if (!MI->isUsed() && MI->isWarnIfUnused()) 2583 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used); 2584 2585 if (MI->isWarnIfUnused()) 2586 WarnUnusedMacroLocs.erase(MI->getDefinitionLoc()); 2587 2588 Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation()); 2589 } 2590 2591 // If the callbacks want to know, tell them about the macro #undef. 2592 // Note: no matter if the macro was defined or not. 2593 if (Callbacks) 2594 Callbacks->MacroUndefined(MacroNameTok, MD, Undef); 2595 2596 if (Undef) 2597 appendMacroDirective(II, Undef); 2598 } 2599 2600 //===----------------------------------------------------------------------===// 2601 // Preprocessor Conditional Directive Handling. 2602 //===----------------------------------------------------------------------===// 2603 2604 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive. isIfndef 2605 /// is true when this is a \#ifndef directive. ReadAnyTokensBeforeDirective is 2606 /// true if any tokens have been returned or pp-directives activated before this 2607 /// \#ifndef has been lexed. 2608 /// 2609 void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef, 2610 bool ReadAnyTokensBeforeDirective) { 2611 ++NumIf; 2612 Token DirectiveTok = Result; 2613 2614 Token MacroNameTok; 2615 ReadMacroName(MacroNameTok); 2616 2617 // Error reading macro name? If so, diagnostic already issued. 2618 if (MacroNameTok.is(tok::eod)) { 2619 // Skip code until we get to #endif. This helps with recovery by not 2620 // emitting an error when the #endif is reached. 2621 SkipExcludedConditionalBlock(DirectiveTok.getLocation(), 2622 /*Foundnonskip*/false, /*FoundElse*/false); 2623 return; 2624 } 2625 2626 // Check to see if this is the last token on the #if[n]def line. 2627 CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef"); 2628 2629 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo(); 2630 auto MD = getMacroDefinition(MII); 2631 MacroInfo *MI = MD.getMacroInfo(); 2632 2633 if (CurPPLexer->getConditionalStackDepth() == 0) { 2634 // If the start of a top-level #ifdef and if the macro is not defined, 2635 // inform MIOpt that this might be the start of a proper include guard. 2636 // Otherwise it is some other form of unknown conditional which we can't 2637 // handle. 2638 if (!ReadAnyTokensBeforeDirective && !MI) { 2639 assert(isIfndef && "#ifdef shouldn't reach here"); 2640 CurPPLexer->MIOpt.EnterTopLevelIfndef(MII, MacroNameTok.getLocation()); 2641 } else 2642 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2643 } 2644 2645 // If there is a macro, process it. 2646 if (MI) // Mark it used. 2647 markMacroAsUsed(MI); 2648 2649 if (Callbacks) { 2650 if (isIfndef) 2651 Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD); 2652 else 2653 Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD); 2654 } 2655 2656 // Should we include the stuff contained by this directive? 2657 if (PPOpts->SingleFileParseMode && !MI) { 2658 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2659 // the directive blocks. 2660 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2661 /*wasskip*/false, /*foundnonskip*/false, 2662 /*foundelse*/false); 2663 } else if (!MI == isIfndef) { 2664 // Yes, remember that we are inside a conditional, then lex the next token. 2665 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2666 /*wasskip*/false, /*foundnonskip*/true, 2667 /*foundelse*/false); 2668 } else { 2669 // No, skip the contents of this block. 2670 SkipExcludedConditionalBlock(DirectiveTok.getLocation(), 2671 /*Foundnonskip*/false, 2672 /*FoundElse*/false); 2673 } 2674 } 2675 2676 /// HandleIfDirective - Implements the \#if directive. 2677 /// 2678 void Preprocessor::HandleIfDirective(Token &IfToken, 2679 bool ReadAnyTokensBeforeDirective) { 2680 ++NumIf; 2681 2682 // Parse and evaluate the conditional expression. 2683 IdentifierInfo *IfNDefMacro = nullptr; 2684 const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); 2685 const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); 2686 const bool ConditionalTrue = DER.Conditional; 2687 const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); 2688 2689 // If this condition is equivalent to #ifndef X, and if this is the first 2690 // directive seen, handle it for the multiple-include optimization. 2691 if (CurPPLexer->getConditionalStackDepth() == 0) { 2692 if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue) 2693 // FIXME: Pass in the location of the macro name, not the 'if' token. 2694 CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation()); 2695 else 2696 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2697 } 2698 2699 if (Callbacks) 2700 Callbacks->If(IfToken.getLocation(), 2701 SourceRange(ConditionalBegin, ConditionalEnd), 2702 (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); 2703 2704 // Should we include the stuff contained by this directive? 2705 if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { 2706 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2707 // the directive blocks. 2708 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2709 /*foundnonskip*/false, /*foundelse*/false); 2710 } else if (ConditionalTrue) { 2711 // Yes, remember that we are inside a conditional, then lex the next token. 2712 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2713 /*foundnonskip*/true, /*foundelse*/false); 2714 } else { 2715 // No, skip the contents of this block. 2716 SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false, 2717 /*FoundElse*/false); 2718 } 2719 } 2720 2721 /// HandleEndifDirective - Implements the \#endif directive. 2722 /// 2723 void Preprocessor::HandleEndifDirective(Token &EndifToken) { 2724 ++NumEndif; 2725 2726 // Check that this is the whole directive. 2727 CheckEndOfDirective("endif"); 2728 2729 PPConditionalInfo CondInfo; 2730 if (CurPPLexer->popConditionalLevel(CondInfo)) { 2731 // No conditionals on the stack: this is an #endif without an #if. 2732 Diag(EndifToken, diag::err_pp_endif_without_if); 2733 return; 2734 } 2735 2736 // If this the end of a top-level #endif, inform MIOpt. 2737 if (CurPPLexer->getConditionalStackDepth() == 0) 2738 CurPPLexer->MIOpt.ExitTopLevelConditional(); 2739 2740 assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode && 2741 "This code should only be reachable in the non-skipping case!"); 2742 2743 if (Callbacks) 2744 Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc); 2745 } 2746 2747 /// HandleElseDirective - Implements the \#else directive. 2748 /// 2749 void Preprocessor::HandleElseDirective(Token &Result) { 2750 ++NumElse; 2751 2752 // #else directive in a non-skipping conditional... start skipping. 2753 CheckEndOfDirective("else"); 2754 2755 PPConditionalInfo CI; 2756 if (CurPPLexer->popConditionalLevel(CI)) { 2757 Diag(Result, diag::pp_err_else_without_if); 2758 return; 2759 } 2760 2761 // If this is a top-level #else, inform the MIOpt. 2762 if (CurPPLexer->getConditionalStackDepth() == 0) 2763 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2764 2765 // If this is a #else with a #else before it, report the error. 2766 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else); 2767 2768 if (Callbacks) 2769 Callbacks->Else(Result.getLocation(), CI.IfLoc); 2770 2771 if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) { 2772 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2773 // the directive blocks. 2774 CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false, 2775 /*foundnonskip*/false, /*foundelse*/true); 2776 return; 2777 } 2778 2779 // Finally, skip the rest of the contents of this block. 2780 SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true, 2781 /*FoundElse*/true, Result.getLocation()); 2782 } 2783 2784 /// HandleElifDirective - Implements the \#elif directive. 2785 /// 2786 void Preprocessor::HandleElifDirective(Token &ElifToken) { 2787 ++NumElse; 2788 2789 // #elif directive in a non-skipping conditional... start skipping. 2790 // We don't care what the condition is, because we will always skip it (since 2791 // the block immediately before it was included). 2792 const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); 2793 DiscardUntilEndOfDirective(); 2794 const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); 2795 2796 PPConditionalInfo CI; 2797 if (CurPPLexer->popConditionalLevel(CI)) { 2798 Diag(ElifToken, diag::pp_err_elif_without_if); 2799 return; 2800 } 2801 2802 // If this is a top-level #elif, inform the MIOpt. 2803 if (CurPPLexer->getConditionalStackDepth() == 0) 2804 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2805 2806 // If this is a #elif with a #else before it, report the error. 2807 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else); 2808 2809 if (Callbacks) 2810 Callbacks->Elif(ElifToken.getLocation(), 2811 SourceRange(ConditionalBegin, ConditionalEnd), 2812 PPCallbacks::CVK_NotEvaluated, CI.IfLoc); 2813 2814 if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) { 2815 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2816 // the directive blocks. 2817 CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false, 2818 /*foundnonskip*/false, /*foundelse*/false); 2819 return; 2820 } 2821 2822 // Finally, skip the rest of the contents of this block. 2823 SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true, 2824 /*FoundElse*/CI.FoundElse, 2825 ElifToken.getLocation()); 2826 } 2827