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