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