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