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::getModuleHeaderToIncludeForDiagnostics(SourceLocation IncLoc, 650 Module *M, 651 SourceLocation Loc) { 652 assert(M && "no module to include"); 653 654 // If the context is the global module fragment of some module, we never 655 // want to return that file; instead, we want the innermost include-guarded 656 // header that it included. 657 bool InGlobalModuleFragment = M->Kind == Module::GlobalModuleFragment; 658 659 // If we have a module import syntax, we shouldn't include a header to 660 // make a particular module visible. 661 if ((getLangOpts().ObjC || getLangOpts().CPlusPlusModules || 662 getLangOpts().ModulesTS) && 663 !InGlobalModuleFragment) 664 return nullptr; 665 666 Module *TopM = M->getTopLevelModule(); 667 Module *IncM = getModuleForLocation(IncLoc); 668 669 // Walk up through the include stack, looking through textual headers of M 670 // until we hit a non-textual header that we can #include. (We assume textual 671 // headers of a module with non-textual headers aren't meant to be used to 672 // import entities from the module.) 673 auto &SM = getSourceManager(); 674 while (!Loc.isInvalid() && !SM.isInMainFile(Loc)) { 675 auto ID = SM.getFileID(SM.getExpansionLoc(Loc)); 676 auto *FE = SM.getFileEntryForID(ID); 677 if (!FE) 678 break; 679 680 if (InGlobalModuleFragment) { 681 if (getHeaderSearchInfo().isFileMultipleIncludeGuarded(FE)) 682 return FE; 683 Loc = SM.getIncludeLoc(ID); 684 continue; 685 } 686 687 bool InTextualHeader = false; 688 for (auto Header : HeaderInfo.getModuleMap().findAllModulesForHeader(FE)) { 689 if (!Header.getModule()->isSubModuleOf(TopM)) 690 continue; 691 692 if (!(Header.getRole() & ModuleMap::TextualHeader)) { 693 // If this is an accessible, non-textual header of M's top-level module 694 // that transitively includes the given location and makes the 695 // corresponding module visible, this is the thing to #include. 696 if (Header.isAccessibleFrom(IncM)) 697 return FE; 698 699 // It's in a private header; we can't #include it. 700 // FIXME: If there's a public header in some module that re-exports it, 701 // then we could suggest including that, but it's not clear that's the 702 // expected way to make this entity visible. 703 continue; 704 } 705 706 InTextualHeader = true; 707 } 708 709 if (!InTextualHeader) 710 break; 711 712 Loc = SM.getIncludeLoc(ID); 713 } 714 715 return nullptr; 716 } 717 718 Optional<FileEntryRef> Preprocessor::LookupFile( 719 SourceLocation FilenameLoc, StringRef Filename, bool isAngled, 720 const DirectoryLookup *FromDir, const FileEntry *FromFile, 721 const DirectoryLookup *&CurDir, SmallVectorImpl<char> *SearchPath, 722 SmallVectorImpl<char> *RelativePath, 723 ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, 724 bool *IsFrameworkFound, bool SkipCache) { 725 Module *RequestingModule = getModuleForLocation(FilenameLoc); 726 bool RequestingModuleIsModuleInterface = !SourceMgr.isInMainFile(FilenameLoc); 727 728 // If the header lookup mechanism may be relative to the current inclusion 729 // stack, record the parent #includes. 730 SmallVector<std::pair<const FileEntry *, const DirectoryEntry *>, 16> 731 Includers; 732 bool BuildSystemModule = false; 733 if (!FromDir && !FromFile) { 734 FileID FID = getCurrentFileLexer()->getFileID(); 735 const FileEntry *FileEnt = SourceMgr.getFileEntryForID(FID); 736 737 // If there is no file entry associated with this file, it must be the 738 // predefines buffer or the module includes buffer. Any other file is not 739 // lexed with a normal lexer, so it won't be scanned for preprocessor 740 // directives. 741 // 742 // If we have the predefines buffer, resolve #include references (which come 743 // from the -include command line argument) from the current working 744 // directory instead of relative to the main file. 745 // 746 // If we have the module includes buffer, resolve #include references (which 747 // come from header declarations in the module map) relative to the module 748 // map file. 749 if (!FileEnt) { 750 if (FID == SourceMgr.getMainFileID() && MainFileDir) { 751 Includers.push_back(std::make_pair(nullptr, MainFileDir)); 752 BuildSystemModule = getCurrentModule()->IsSystem; 753 } else if ((FileEnt = 754 SourceMgr.getFileEntryForID(SourceMgr.getMainFileID()))) 755 Includers.push_back(std::make_pair(FileEnt, *FileMgr.getDirectory("."))); 756 } else { 757 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 758 } 759 760 // MSVC searches the current include stack from top to bottom for 761 // headers included by quoted include directives. 762 // See: http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx 763 if (LangOpts.MSVCCompat && !isAngled) { 764 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 765 if (IsFileLexer(ISEntry)) 766 if ((FileEnt = ISEntry.ThePPLexer->getFileEntry())) 767 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 768 } 769 } 770 } 771 772 CurDir = CurDirLookup; 773 774 if (FromFile) { 775 // We're supposed to start looking from after a particular file. Search 776 // the include path until we find that file or run out of files. 777 const DirectoryLookup *TmpCurDir = CurDir; 778 const DirectoryLookup *TmpFromDir = nullptr; 779 while (Optional<FileEntryRef> FE = HeaderInfo.LookupFile( 780 Filename, FilenameLoc, isAngled, TmpFromDir, TmpCurDir, 781 Includers, SearchPath, RelativePath, RequestingModule, 782 SuggestedModule, /*IsMapped=*/nullptr, 783 /*IsFrameworkFound=*/nullptr, SkipCache)) { 784 // Keep looking as if this file did a #include_next. 785 TmpFromDir = TmpCurDir; 786 ++TmpFromDir; 787 if (&FE->getFileEntry() == FromFile) { 788 // Found it. 789 FromDir = TmpFromDir; 790 CurDir = TmpCurDir; 791 break; 792 } 793 } 794 } 795 796 // Do a standard file entry lookup. 797 Optional<FileEntryRef> FE = HeaderInfo.LookupFile( 798 Filename, FilenameLoc, isAngled, FromDir, CurDir, Includers, SearchPath, 799 RelativePath, RequestingModule, SuggestedModule, IsMapped, 800 IsFrameworkFound, SkipCache, BuildSystemModule); 801 if (FE) { 802 if (SuggestedModule && !LangOpts.AsmPreprocessor) 803 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 804 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 805 Filename, &FE->getFileEntry()); 806 return FE; 807 } 808 809 const FileEntry *CurFileEnt; 810 // Otherwise, see if this is a subframework header. If so, this is relative 811 // to one of the headers on the #include stack. Walk the list of the current 812 // headers on the #include stack and pass them to HeaderInfo. 813 if (IsFileLexer()) { 814 if ((CurFileEnt = CurPPLexer->getFileEntry())) { 815 if (Optional<FileEntryRef> FE = HeaderInfo.LookupSubframeworkHeader( 816 Filename, CurFileEnt, SearchPath, RelativePath, RequestingModule, 817 SuggestedModule)) { 818 if (SuggestedModule && !LangOpts.AsmPreprocessor) 819 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 820 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 821 Filename, &FE->getFileEntry()); 822 return FE; 823 } 824 } 825 } 826 827 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 828 if (IsFileLexer(ISEntry)) { 829 if ((CurFileEnt = ISEntry.ThePPLexer->getFileEntry())) { 830 if (Optional<FileEntryRef> FE = HeaderInfo.LookupSubframeworkHeader( 831 Filename, CurFileEnt, SearchPath, RelativePath, 832 RequestingModule, SuggestedModule)) { 833 if (SuggestedModule && !LangOpts.AsmPreprocessor) 834 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 835 RequestingModule, RequestingModuleIsModuleInterface, 836 FilenameLoc, Filename, &FE->getFileEntry()); 837 return FE; 838 } 839 } 840 } 841 } 842 843 // Otherwise, we really couldn't find the file. 844 return None; 845 } 846 847 //===----------------------------------------------------------------------===// 848 // Preprocessor Directive Handling. 849 //===----------------------------------------------------------------------===// 850 851 class Preprocessor::ResetMacroExpansionHelper { 852 public: 853 ResetMacroExpansionHelper(Preprocessor *pp) 854 : PP(pp), save(pp->DisableMacroExpansion) { 855 if (pp->MacroExpansionInDirectivesOverride) 856 pp->DisableMacroExpansion = false; 857 } 858 859 ~ResetMacroExpansionHelper() { 860 PP->DisableMacroExpansion = save; 861 } 862 863 private: 864 Preprocessor *PP; 865 bool save; 866 }; 867 868 /// Process a directive while looking for the through header or a #pragma 869 /// hdrstop. The following directives are handled: 870 /// #include (to check if it is the through header) 871 /// #define (to warn about macros that don't match the PCH) 872 /// #pragma (to check for pragma hdrstop). 873 /// All other directives are completely discarded. 874 void Preprocessor::HandleSkippedDirectiveWhileUsingPCH(Token &Result, 875 SourceLocation HashLoc) { 876 if (const IdentifierInfo *II = Result.getIdentifierInfo()) { 877 if (II->getPPKeywordID() == tok::pp_define) { 878 return HandleDefineDirective(Result, 879 /*ImmediatelyAfterHeaderGuard=*/false); 880 } 881 if (SkippingUntilPCHThroughHeader && 882 II->getPPKeywordID() == tok::pp_include) { 883 return HandleIncludeDirective(HashLoc, Result); 884 } 885 if (SkippingUntilPragmaHdrStop && II->getPPKeywordID() == tok::pp_pragma) { 886 Lex(Result); 887 auto *II = Result.getIdentifierInfo(); 888 if (II && II->getName() == "hdrstop") 889 return HandlePragmaHdrstop(Result); 890 } 891 } 892 DiscardUntilEndOfDirective(); 893 } 894 895 /// HandleDirective - This callback is invoked when the lexer sees a # token 896 /// at the start of a line. This consumes the directive, modifies the 897 /// lexer/preprocessor state, and advances the lexer(s) so that the next token 898 /// read is the correct one. 899 void Preprocessor::HandleDirective(Token &Result) { 900 // FIXME: Traditional: # with whitespace before it not recognized by K&R? 901 902 // We just parsed a # character at the start of a line, so we're in directive 903 // mode. Tell the lexer this so any newlines we see will be converted into an 904 // EOD token (which terminates the directive). 905 CurPPLexer->ParsingPreprocessorDirective = true; 906 if (CurLexer) CurLexer->SetKeepWhitespaceMode(false); 907 908 bool ImmediatelyAfterTopLevelIfndef = 909 CurPPLexer->MIOpt.getImmediatelyAfterTopLevelIfndef(); 910 CurPPLexer->MIOpt.resetImmediatelyAfterTopLevelIfndef(); 911 912 ++NumDirectives; 913 914 // We are about to read a token. For the multiple-include optimization FA to 915 // work, we have to remember if we had read any tokens *before* this 916 // pp-directive. 917 bool ReadAnyTokensBeforeDirective =CurPPLexer->MIOpt.getHasReadAnyTokensVal(); 918 919 // Save the '#' token in case we need to return it later. 920 Token SavedHash = Result; 921 922 // Read the next token, the directive flavor. This isn't expanded due to 923 // C99 6.10.3p8. 924 LexUnexpandedToken(Result); 925 926 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.: 927 // #define A(x) #x 928 // A(abc 929 // #warning blah 930 // def) 931 // If so, the user is relying on undefined behavior, emit a diagnostic. Do 932 // not support this for #include-like directives, since that can result in 933 // terrible diagnostics, and does not work in GCC. 934 if (InMacroArgs) { 935 if (IdentifierInfo *II = Result.getIdentifierInfo()) { 936 switch (II->getPPKeywordID()) { 937 case tok::pp_include: 938 case tok::pp_import: 939 case tok::pp_include_next: 940 case tok::pp___include_macros: 941 case tok::pp_pragma: 942 Diag(Result, diag::err_embedded_directive) << II->getName(); 943 Diag(*ArgMacro, diag::note_macro_expansion_here) 944 << ArgMacro->getIdentifierInfo(); 945 DiscardUntilEndOfDirective(); 946 return; 947 default: 948 break; 949 } 950 } 951 Diag(Result, diag::ext_embedded_directive); 952 } 953 954 // Temporarily enable macro expansion if set so 955 // and reset to previous state when returning from this function. 956 ResetMacroExpansionHelper helper(this); 957 958 if (SkippingUntilPCHThroughHeader || SkippingUntilPragmaHdrStop) 959 return HandleSkippedDirectiveWhileUsingPCH(Result, SavedHash.getLocation()); 960 961 switch (Result.getKind()) { 962 case tok::eod: 963 return; // null directive. 964 case tok::code_completion: 965 if (CodeComplete) 966 CodeComplete->CodeCompleteDirective( 967 CurPPLexer->getConditionalStackDepth() > 0); 968 setCodeCompletionReached(); 969 return; 970 case tok::numeric_constant: // # 7 GNU line marker directive. 971 if (getLangOpts().AsmPreprocessor) 972 break; // # 4 is not a preprocessor directive in .S files. 973 return HandleDigitDirective(Result); 974 default: 975 IdentifierInfo *II = Result.getIdentifierInfo(); 976 if (!II) break; // Not an identifier. 977 978 // Ask what the preprocessor keyword ID is. 979 switch (II->getPPKeywordID()) { 980 default: break; 981 // C99 6.10.1 - Conditional Inclusion. 982 case tok::pp_if: 983 return HandleIfDirective(Result, SavedHash, ReadAnyTokensBeforeDirective); 984 case tok::pp_ifdef: 985 return HandleIfdefDirective(Result, SavedHash, false, 986 true /*not valid for miopt*/); 987 case tok::pp_ifndef: 988 return HandleIfdefDirective(Result, SavedHash, true, 989 ReadAnyTokensBeforeDirective); 990 case tok::pp_elif: 991 return HandleElifDirective(Result, SavedHash); 992 case tok::pp_else: 993 return HandleElseDirective(Result, SavedHash); 994 case tok::pp_endif: 995 return HandleEndifDirective(Result); 996 997 // C99 6.10.2 - Source File Inclusion. 998 case tok::pp_include: 999 // Handle #include. 1000 return HandleIncludeDirective(SavedHash.getLocation(), Result); 1001 case tok::pp___include_macros: 1002 // Handle -imacros. 1003 return HandleIncludeMacrosDirective(SavedHash.getLocation(), Result); 1004 1005 // C99 6.10.3 - Macro Replacement. 1006 case tok::pp_define: 1007 return HandleDefineDirective(Result, ImmediatelyAfterTopLevelIfndef); 1008 case tok::pp_undef: 1009 return HandleUndefDirective(); 1010 1011 // C99 6.10.4 - Line Control. 1012 case tok::pp_line: 1013 return HandleLineDirective(); 1014 1015 // C99 6.10.5 - Error Directive. 1016 case tok::pp_error: 1017 return HandleUserDiagnosticDirective(Result, false); 1018 1019 // C99 6.10.6 - Pragma Directive. 1020 case tok::pp_pragma: 1021 return HandlePragmaDirective({PIK_HashPragma, SavedHash.getLocation()}); 1022 1023 // GNU Extensions. 1024 case tok::pp_import: 1025 return HandleImportDirective(SavedHash.getLocation(), Result); 1026 case tok::pp_include_next: 1027 return HandleIncludeNextDirective(SavedHash.getLocation(), Result); 1028 1029 case tok::pp_warning: 1030 Diag(Result, diag::ext_pp_warning_directive); 1031 return HandleUserDiagnosticDirective(Result, true); 1032 case tok::pp_ident: 1033 return HandleIdentSCCSDirective(Result); 1034 case tok::pp_sccs: 1035 return HandleIdentSCCSDirective(Result); 1036 case tok::pp_assert: 1037 //isExtension = true; // FIXME: implement #assert 1038 break; 1039 case tok::pp_unassert: 1040 //isExtension = true; // FIXME: implement #unassert 1041 break; 1042 1043 case tok::pp___public_macro: 1044 if (getLangOpts().Modules) 1045 return HandleMacroPublicDirective(Result); 1046 break; 1047 1048 case tok::pp___private_macro: 1049 if (getLangOpts().Modules) 1050 return HandleMacroPrivateDirective(); 1051 break; 1052 } 1053 break; 1054 } 1055 1056 // If this is a .S file, treat unknown # directives as non-preprocessor 1057 // directives. This is important because # may be a comment or introduce 1058 // various pseudo-ops. Just return the # token and push back the following 1059 // token to be lexed next time. 1060 if (getLangOpts().AsmPreprocessor) { 1061 auto Toks = std::make_unique<Token[]>(2); 1062 // Return the # and the token after it. 1063 Toks[0] = SavedHash; 1064 Toks[1] = Result; 1065 1066 // If the second token is a hashhash token, then we need to translate it to 1067 // unknown so the token lexer doesn't try to perform token pasting. 1068 if (Result.is(tok::hashhash)) 1069 Toks[1].setKind(tok::unknown); 1070 1071 // Enter this token stream so that we re-lex the tokens. Make sure to 1072 // enable macro expansion, in case the token after the # is an identifier 1073 // that is expanded. 1074 EnterTokenStream(std::move(Toks), 2, false, /*IsReinject*/false); 1075 return; 1076 } 1077 1078 // If we reached here, the preprocessing token is not valid! 1079 Diag(Result, diag::err_pp_invalid_directive); 1080 1081 // Read the rest of the PP line. 1082 DiscardUntilEndOfDirective(); 1083 1084 // Okay, we're done parsing the directive. 1085 } 1086 1087 /// GetLineValue - Convert a numeric token into an unsigned value, emitting 1088 /// Diagnostic DiagID if it is invalid, and returning the value in Val. 1089 static bool GetLineValue(Token &DigitTok, unsigned &Val, 1090 unsigned DiagID, Preprocessor &PP, 1091 bool IsGNULineDirective=false) { 1092 if (DigitTok.isNot(tok::numeric_constant)) { 1093 PP.Diag(DigitTok, DiagID); 1094 1095 if (DigitTok.isNot(tok::eod)) 1096 PP.DiscardUntilEndOfDirective(); 1097 return true; 1098 } 1099 1100 SmallString<64> IntegerBuffer; 1101 IntegerBuffer.resize(DigitTok.getLength()); 1102 const char *DigitTokBegin = &IntegerBuffer[0]; 1103 bool Invalid = false; 1104 unsigned ActualLength = PP.getSpelling(DigitTok, DigitTokBegin, &Invalid); 1105 if (Invalid) 1106 return true; 1107 1108 // Verify that we have a simple digit-sequence, and compute the value. This 1109 // is always a simple digit string computed in decimal, so we do this manually 1110 // here. 1111 Val = 0; 1112 for (unsigned i = 0; i != ActualLength; ++i) { 1113 // C++1y [lex.fcon]p1: 1114 // Optional separating single quotes in a digit-sequence are ignored 1115 if (DigitTokBegin[i] == '\'') 1116 continue; 1117 1118 if (!isDigit(DigitTokBegin[i])) { 1119 PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), 1120 diag::err_pp_line_digit_sequence) << IsGNULineDirective; 1121 PP.DiscardUntilEndOfDirective(); 1122 return true; 1123 } 1124 1125 unsigned NextVal = Val*10+(DigitTokBegin[i]-'0'); 1126 if (NextVal < Val) { // overflow. 1127 PP.Diag(DigitTok, DiagID); 1128 PP.DiscardUntilEndOfDirective(); 1129 return true; 1130 } 1131 Val = NextVal; 1132 } 1133 1134 if (DigitTokBegin[0] == '0' && Val) 1135 PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal) 1136 << IsGNULineDirective; 1137 1138 return false; 1139 } 1140 1141 /// Handle a \#line directive: C99 6.10.4. 1142 /// 1143 /// The two acceptable forms are: 1144 /// \verbatim 1145 /// # line digit-sequence 1146 /// # line digit-sequence "s-char-sequence" 1147 /// \endverbatim 1148 void Preprocessor::HandleLineDirective() { 1149 // Read the line # and string argument. Per C99 6.10.4p5, these tokens are 1150 // expanded. 1151 Token DigitTok; 1152 Lex(DigitTok); 1153 1154 // Validate the number and convert it to an unsigned. 1155 unsigned LineNo; 1156 if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer,*this)) 1157 return; 1158 1159 if (LineNo == 0) 1160 Diag(DigitTok, diag::ext_pp_line_zero); 1161 1162 // Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a 1163 // number greater than 2147483647". C90 requires that the line # be <= 32767. 1164 unsigned LineLimit = 32768U; 1165 if (LangOpts.C99 || LangOpts.CPlusPlus11) 1166 LineLimit = 2147483648U; 1167 if (LineNo >= LineLimit) 1168 Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit; 1169 else if (LangOpts.CPlusPlus11 && LineNo >= 32768U) 1170 Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big); 1171 1172 int FilenameID = -1; 1173 Token StrTok; 1174 Lex(StrTok); 1175 1176 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1177 // string followed by eod. 1178 if (StrTok.is(tok::eod)) 1179 ; // ok 1180 else if (StrTok.isNot(tok::string_literal)) { 1181 Diag(StrTok, diag::err_pp_line_invalid_filename); 1182 DiscardUntilEndOfDirective(); 1183 return; 1184 } else if (StrTok.hasUDSuffix()) { 1185 Diag(StrTok, diag::err_invalid_string_udl); 1186 DiscardUntilEndOfDirective(); 1187 return; 1188 } else { 1189 // Parse and validate the string, converting it into a unique ID. 1190 StringLiteralParser Literal(StrTok, *this); 1191 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1192 if (Literal.hadError) { 1193 DiscardUntilEndOfDirective(); 1194 return; 1195 } 1196 if (Literal.Pascal) { 1197 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1198 DiscardUntilEndOfDirective(); 1199 return; 1200 } 1201 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1202 1203 // Verify that there is nothing after the string, other than EOD. Because 1204 // of C99 6.10.4p5, macros that expand to empty tokens are ok. 1205 CheckEndOfDirective("line", true); 1206 } 1207 1208 // Take the file kind of the file containing the #line directive. #line 1209 // directives are often used for generated sources from the same codebase, so 1210 // the new file should generally be classified the same way as the current 1211 // file. This is visible in GCC's pre-processed output, which rewrites #line 1212 // to GNU line markers. 1213 SrcMgr::CharacteristicKind FileKind = 1214 SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1215 1216 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, false, 1217 false, FileKind); 1218 1219 if (Callbacks) 1220 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), 1221 PPCallbacks::RenameFile, FileKind); 1222 } 1223 1224 /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line 1225 /// marker directive. 1226 static bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, 1227 SrcMgr::CharacteristicKind &FileKind, 1228 Preprocessor &PP) { 1229 unsigned FlagVal; 1230 Token FlagTok; 1231 PP.Lex(FlagTok); 1232 if (FlagTok.is(tok::eod)) return false; 1233 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1234 return true; 1235 1236 if (FlagVal == 1) { 1237 IsFileEntry = true; 1238 1239 PP.Lex(FlagTok); 1240 if (FlagTok.is(tok::eod)) return false; 1241 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1242 return true; 1243 } else if (FlagVal == 2) { 1244 IsFileExit = true; 1245 1246 SourceManager &SM = PP.getSourceManager(); 1247 // If we are leaving the current presumed file, check to make sure the 1248 // presumed include stack isn't empty! 1249 FileID CurFileID = 1250 SM.getDecomposedExpansionLoc(FlagTok.getLocation()).first; 1251 PresumedLoc PLoc = SM.getPresumedLoc(FlagTok.getLocation()); 1252 if (PLoc.isInvalid()) 1253 return true; 1254 1255 // If there is no include loc (main file) or if the include loc is in a 1256 // different physical file, then we aren't in a "1" line marker flag region. 1257 SourceLocation IncLoc = PLoc.getIncludeLoc(); 1258 if (IncLoc.isInvalid() || 1259 SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) { 1260 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop); 1261 PP.DiscardUntilEndOfDirective(); 1262 return true; 1263 } 1264 1265 PP.Lex(FlagTok); 1266 if (FlagTok.is(tok::eod)) return false; 1267 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1268 return true; 1269 } 1270 1271 // We must have 3 if there are still flags. 1272 if (FlagVal != 3) { 1273 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1274 PP.DiscardUntilEndOfDirective(); 1275 return true; 1276 } 1277 1278 FileKind = SrcMgr::C_System; 1279 1280 PP.Lex(FlagTok); 1281 if (FlagTok.is(tok::eod)) return false; 1282 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1283 return true; 1284 1285 // We must have 4 if there is yet another flag. 1286 if (FlagVal != 4) { 1287 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1288 PP.DiscardUntilEndOfDirective(); 1289 return true; 1290 } 1291 1292 FileKind = SrcMgr::C_ExternCSystem; 1293 1294 PP.Lex(FlagTok); 1295 if (FlagTok.is(tok::eod)) return false; 1296 1297 // There are no more valid flags here. 1298 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1299 PP.DiscardUntilEndOfDirective(); 1300 return true; 1301 } 1302 1303 /// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is 1304 /// one of the following forms: 1305 /// 1306 /// # 42 1307 /// # 42 "file" ('1' | '2')? 1308 /// # 42 "file" ('1' | '2')? '3' '4'? 1309 /// 1310 void Preprocessor::HandleDigitDirective(Token &DigitTok) { 1311 // Validate the number and convert it to an unsigned. GNU does not have a 1312 // line # limit other than it fit in 32-bits. 1313 unsigned LineNo; 1314 if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, 1315 *this, true)) 1316 return; 1317 1318 Token StrTok; 1319 Lex(StrTok); 1320 1321 bool IsFileEntry = false, IsFileExit = false; 1322 int FilenameID = -1; 1323 SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User; 1324 1325 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1326 // string followed by eod. 1327 if (StrTok.is(tok::eod)) { 1328 // Treat this like "#line NN", which doesn't change file characteristics. 1329 FileKind = SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1330 } else if (StrTok.isNot(tok::string_literal)) { 1331 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1332 DiscardUntilEndOfDirective(); 1333 return; 1334 } else if (StrTok.hasUDSuffix()) { 1335 Diag(StrTok, diag::err_invalid_string_udl); 1336 DiscardUntilEndOfDirective(); 1337 return; 1338 } else { 1339 // Parse and validate the string, converting it into a unique ID. 1340 StringLiteralParser Literal(StrTok, *this); 1341 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1342 if (Literal.hadError) { 1343 DiscardUntilEndOfDirective(); 1344 return; 1345 } 1346 if (Literal.Pascal) { 1347 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1348 DiscardUntilEndOfDirective(); 1349 return; 1350 } 1351 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1352 1353 // If a filename was present, read any flags that are present. 1354 if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this)) 1355 return; 1356 } 1357 1358 // Create a line note with this information. 1359 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry, 1360 IsFileExit, FileKind); 1361 1362 // If the preprocessor has callbacks installed, notify them of the #line 1363 // change. This is used so that the line marker comes out in -E mode for 1364 // example. 1365 if (Callbacks) { 1366 PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile; 1367 if (IsFileEntry) 1368 Reason = PPCallbacks::EnterFile; 1369 else if (IsFileExit) 1370 Reason = PPCallbacks::ExitFile; 1371 1372 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind); 1373 } 1374 } 1375 1376 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive. 1377 /// 1378 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok, 1379 bool isWarning) { 1380 // Read the rest of the line raw. We do this because we don't want macros 1381 // to be expanded and we don't require that the tokens be valid preprocessing 1382 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does 1383 // collapse multiple consecutive white space between tokens, but this isn't 1384 // specified by the standard. 1385 SmallString<128> Message; 1386 CurLexer->ReadToEndOfLine(&Message); 1387 1388 // Find the first non-whitespace character, so that we can make the 1389 // diagnostic more succinct. 1390 StringRef Msg = StringRef(Message).ltrim(' '); 1391 1392 if (isWarning) 1393 Diag(Tok, diag::pp_hash_warning) << Msg; 1394 else 1395 Diag(Tok, diag::err_pp_hash_error) << Msg; 1396 } 1397 1398 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive. 1399 /// 1400 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) { 1401 // Yes, this directive is an extension. 1402 Diag(Tok, diag::ext_pp_ident_directive); 1403 1404 // Read the string argument. 1405 Token StrTok; 1406 Lex(StrTok); 1407 1408 // If the token kind isn't a string, it's a malformed directive. 1409 if (StrTok.isNot(tok::string_literal) && 1410 StrTok.isNot(tok::wide_string_literal)) { 1411 Diag(StrTok, diag::err_pp_malformed_ident); 1412 if (StrTok.isNot(tok::eod)) 1413 DiscardUntilEndOfDirective(); 1414 return; 1415 } 1416 1417 if (StrTok.hasUDSuffix()) { 1418 Diag(StrTok, diag::err_invalid_string_udl); 1419 DiscardUntilEndOfDirective(); 1420 return; 1421 } 1422 1423 // Verify that there is nothing after the string, other than EOD. 1424 CheckEndOfDirective("ident"); 1425 1426 if (Callbacks) { 1427 bool Invalid = false; 1428 std::string Str = getSpelling(StrTok, &Invalid); 1429 if (!Invalid) 1430 Callbacks->Ident(Tok.getLocation(), Str); 1431 } 1432 } 1433 1434 /// Handle a #public directive. 1435 void Preprocessor::HandleMacroPublicDirective(Token &Tok) { 1436 Token MacroNameTok; 1437 ReadMacroName(MacroNameTok, MU_Undef); 1438 1439 // Error reading macro name? If so, diagnostic already issued. 1440 if (MacroNameTok.is(tok::eod)) 1441 return; 1442 1443 // Check to see if this is the last token on the #__public_macro line. 1444 CheckEndOfDirective("__public_macro"); 1445 1446 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1447 // Okay, we finally have a valid identifier to undef. 1448 MacroDirective *MD = getLocalMacroDirective(II); 1449 1450 // If the macro is not defined, this is an error. 1451 if (!MD) { 1452 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1453 return; 1454 } 1455 1456 // Note that this macro has now been exported. 1457 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1458 MacroNameTok.getLocation(), /*isPublic=*/true)); 1459 } 1460 1461 /// Handle a #private directive. 1462 void Preprocessor::HandleMacroPrivateDirective() { 1463 Token MacroNameTok; 1464 ReadMacroName(MacroNameTok, MU_Undef); 1465 1466 // Error reading macro name? If so, diagnostic already issued. 1467 if (MacroNameTok.is(tok::eod)) 1468 return; 1469 1470 // Check to see if this is the last token on the #__private_macro line. 1471 CheckEndOfDirective("__private_macro"); 1472 1473 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1474 // Okay, we finally have a valid identifier to undef. 1475 MacroDirective *MD = getLocalMacroDirective(II); 1476 1477 // If the macro is not defined, this is an error. 1478 if (!MD) { 1479 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1480 return; 1481 } 1482 1483 // Note that this macro has now been marked private. 1484 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1485 MacroNameTok.getLocation(), /*isPublic=*/false)); 1486 } 1487 1488 //===----------------------------------------------------------------------===// 1489 // Preprocessor Include Directive Handling. 1490 //===----------------------------------------------------------------------===// 1491 1492 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully 1493 /// checked and spelled filename, e.g. as an operand of \#include. This returns 1494 /// true if the input filename was in <>'s or false if it were in ""'s. The 1495 /// caller is expected to provide a buffer that is large enough to hold the 1496 /// spelling of the filename, but is also expected to handle the case when 1497 /// this method decides to use a different buffer. 1498 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, 1499 StringRef &Buffer) { 1500 // Get the text form of the filename. 1501 assert(!Buffer.empty() && "Can't have tokens with empty spellings!"); 1502 1503 // FIXME: Consider warning on some of the cases described in C11 6.4.7/3 and 1504 // C++20 [lex.header]/2: 1505 // 1506 // If `"`, `'`, `\`, `/*`, or `//` appears in a header-name, then 1507 // in C: behavior is undefined 1508 // in C++: program is conditionally-supported with implementation-defined 1509 // semantics 1510 1511 // Make sure the filename is <x> or "x". 1512 bool isAngled; 1513 if (Buffer[0] == '<') { 1514 if (Buffer.back() != '>') { 1515 Diag(Loc, diag::err_pp_expects_filename); 1516 Buffer = StringRef(); 1517 return true; 1518 } 1519 isAngled = true; 1520 } else if (Buffer[0] == '"') { 1521 if (Buffer.back() != '"') { 1522 Diag(Loc, diag::err_pp_expects_filename); 1523 Buffer = StringRef(); 1524 return true; 1525 } 1526 isAngled = false; 1527 } else { 1528 Diag(Loc, diag::err_pp_expects_filename); 1529 Buffer = StringRef(); 1530 return true; 1531 } 1532 1533 // Diagnose #include "" as invalid. 1534 if (Buffer.size() <= 2) { 1535 Diag(Loc, diag::err_pp_empty_filename); 1536 Buffer = StringRef(); 1537 return true; 1538 } 1539 1540 // Skip the brackets. 1541 Buffer = Buffer.substr(1, Buffer.size()-2); 1542 return isAngled; 1543 } 1544 1545 /// Push a token onto the token stream containing an annotation. 1546 void Preprocessor::EnterAnnotationToken(SourceRange Range, 1547 tok::TokenKind Kind, 1548 void *AnnotationVal) { 1549 // FIXME: Produce this as the current token directly, rather than 1550 // allocating a new token for it. 1551 auto Tok = std::make_unique<Token[]>(1); 1552 Tok[0].startToken(); 1553 Tok[0].setKind(Kind); 1554 Tok[0].setLocation(Range.getBegin()); 1555 Tok[0].setAnnotationEndLoc(Range.getEnd()); 1556 Tok[0].setAnnotationValue(AnnotationVal); 1557 EnterTokenStream(std::move(Tok), 1, true, /*IsReinject*/ false); 1558 } 1559 1560 /// Produce a diagnostic informing the user that a #include or similar 1561 /// was implicitly treated as a module import. 1562 static void diagnoseAutoModuleImport( 1563 Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, 1564 ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, 1565 SourceLocation PathEnd) { 1566 StringRef ImportKeyword; 1567 if (PP.getLangOpts().ObjC) 1568 ImportKeyword = "@import"; 1569 else if (PP.getLangOpts().ModulesTS || PP.getLangOpts().CPlusPlusModules) 1570 ImportKeyword = "import"; 1571 else 1572 return; // no import syntax available 1573 1574 SmallString<128> PathString; 1575 for (size_t I = 0, N = Path.size(); I != N; ++I) { 1576 if (I) 1577 PathString += '.'; 1578 PathString += Path[I].first->getName(); 1579 } 1580 int IncludeKind = 0; 1581 1582 switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) { 1583 case tok::pp_include: 1584 IncludeKind = 0; 1585 break; 1586 1587 case tok::pp_import: 1588 IncludeKind = 1; 1589 break; 1590 1591 case tok::pp_include_next: 1592 IncludeKind = 2; 1593 break; 1594 1595 case tok::pp___include_macros: 1596 IncludeKind = 3; 1597 break; 1598 1599 default: 1600 llvm_unreachable("unknown include directive kind"); 1601 } 1602 1603 CharSourceRange ReplaceRange(SourceRange(HashLoc, PathEnd), 1604 /*IsTokenRange=*/false); 1605 PP.Diag(HashLoc, diag::warn_auto_module_import) 1606 << IncludeKind << PathString 1607 << FixItHint::CreateReplacement( 1608 ReplaceRange, (ImportKeyword + " " + PathString + ";").str()); 1609 } 1610 1611 // Given a vector of path components and a string containing the real 1612 // path to the file, build a properly-cased replacement in the vector, 1613 // and return true if the replacement should be suggested. 1614 static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components, 1615 StringRef RealPathName) { 1616 auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName); 1617 auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName); 1618 int Cnt = 0; 1619 bool SuggestReplacement = false; 1620 // Below is a best-effort to handle ".." in paths. It is admittedly 1621 // not 100% correct in the presence of symlinks. 1622 for (auto &Component : llvm::reverse(Components)) { 1623 if ("." == Component) { 1624 } else if (".." == Component) { 1625 ++Cnt; 1626 } else if (Cnt) { 1627 --Cnt; 1628 } else if (RealPathComponentIter != RealPathComponentEnd) { 1629 if (Component != *RealPathComponentIter) { 1630 // If these path components differ by more than just case, then we 1631 // may be looking at symlinked paths. Bail on this diagnostic to avoid 1632 // noisy false positives. 1633 SuggestReplacement = RealPathComponentIter->equals_lower(Component); 1634 if (!SuggestReplacement) 1635 break; 1636 Component = *RealPathComponentIter; 1637 } 1638 ++RealPathComponentIter; 1639 } 1640 } 1641 return SuggestReplacement; 1642 } 1643 1644 bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, 1645 const TargetInfo &TargetInfo, 1646 DiagnosticsEngine &Diags, Module *M) { 1647 Module::Requirement Requirement; 1648 Module::UnresolvedHeaderDirective MissingHeader; 1649 Module *ShadowingModule = nullptr; 1650 if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader, 1651 ShadowingModule)) 1652 return false; 1653 1654 if (MissingHeader.FileNameLoc.isValid()) { 1655 Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) 1656 << MissingHeader.IsUmbrella << MissingHeader.FileName; 1657 } else if (ShadowingModule) { 1658 Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name; 1659 Diags.Report(ShadowingModule->DefinitionLoc, 1660 diag::note_previous_definition); 1661 } else { 1662 // FIXME: Track the location at which the requirement was specified, and 1663 // use it here. 1664 Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) 1665 << M->getFullModuleName() << Requirement.second << Requirement.first; 1666 } 1667 return true; 1668 } 1669 1670 /// HandleIncludeDirective - The "\#include" tokens have just been read, read 1671 /// the file to be included from the lexer, then include it! This is a common 1672 /// routine with functionality shared between \#include, \#include_next and 1673 /// \#import. LookupFrom is set when this is a \#include_next directive, it 1674 /// specifies the file to start searching from. 1675 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, 1676 Token &IncludeTok, 1677 const DirectoryLookup *LookupFrom, 1678 const FileEntry *LookupFromFile) { 1679 Token FilenameTok; 1680 if (LexHeaderName(FilenameTok)) 1681 return; 1682 1683 if (FilenameTok.isNot(tok::header_name)) { 1684 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename); 1685 if (FilenameTok.isNot(tok::eod)) 1686 DiscardUntilEndOfDirective(); 1687 return; 1688 } 1689 1690 // Verify that there is nothing after the filename, other than EOD. Note 1691 // that we allow macros that expand to nothing after the filename, because 1692 // this falls into the category of "#include pp-tokens new-line" specified 1693 // in C99 6.10.2p4. 1694 SourceLocation EndLoc = 1695 CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true); 1696 1697 auto Action = HandleHeaderIncludeOrImport(HashLoc, IncludeTok, FilenameTok, 1698 EndLoc, LookupFrom, LookupFromFile); 1699 switch (Action.Kind) { 1700 case ImportAction::None: 1701 case ImportAction::SkippedModuleImport: 1702 break; 1703 case ImportAction::ModuleBegin: 1704 EnterAnnotationToken(SourceRange(HashLoc, EndLoc), 1705 tok::annot_module_begin, Action.ModuleForHeader); 1706 break; 1707 case ImportAction::ModuleImport: 1708 EnterAnnotationToken(SourceRange(HashLoc, EndLoc), 1709 tok::annot_module_include, Action.ModuleForHeader); 1710 break; 1711 case ImportAction::Failure: 1712 assert(TheModuleLoader.HadFatalFailure && 1713 "This should be an early exit only to a fatal error"); 1714 TheModuleLoader.HadFatalFailure = true; 1715 IncludeTok.setKind(tok::eof); 1716 CurLexer->cutOffLexing(); 1717 return; 1718 } 1719 } 1720 1721 Optional<FileEntryRef> Preprocessor::LookupHeaderIncludeOrImport( 1722 const DirectoryLookup *&CurDir, StringRef Filename, 1723 SourceLocation FilenameLoc, CharSourceRange FilenameRange, 1724 const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, 1725 bool &IsMapped, const DirectoryLookup *LookupFrom, 1726 const FileEntry *LookupFromFile, StringRef LookupFilename, 1727 SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, 1728 ModuleMap::KnownHeader &SuggestedModule, bool isAngled) { 1729 Optional<FileEntryRef> File = LookupFile( 1730 FilenameLoc, LookupFilename, 1731 isAngled, LookupFrom, LookupFromFile, CurDir, 1732 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1733 &SuggestedModule, &IsMapped, &IsFrameworkFound); 1734 if (File) 1735 return File; 1736 1737 if (Callbacks) { 1738 // Give the clients a chance to recover. 1739 SmallString<128> RecoveryPath; 1740 if (Callbacks->FileNotFound(Filename, RecoveryPath)) { 1741 if (auto DE = FileMgr.getOptionalDirectoryRef(RecoveryPath)) { 1742 // Add the recovery path to the list of search paths. 1743 DirectoryLookup DL(*DE, SrcMgr::C_User, false); 1744 HeaderInfo.AddSearchPath(DL, isAngled); 1745 1746 // Try the lookup again, skipping the cache. 1747 Optional<FileEntryRef> File = LookupFile( 1748 FilenameLoc, 1749 LookupFilename, isAngled, 1750 LookupFrom, LookupFromFile, CurDir, nullptr, nullptr, 1751 &SuggestedModule, &IsMapped, /*IsFrameworkFound=*/nullptr, 1752 /*SkipCache*/ true); 1753 if (File) 1754 return File; 1755 } 1756 } 1757 } 1758 1759 if (SuppressIncludeNotFoundError) 1760 return None; 1761 1762 // If the file could not be located and it was included via angle 1763 // brackets, we can attempt a lookup as though it were a quoted path to 1764 // provide the user with a possible fixit. 1765 if (isAngled) { 1766 Optional<FileEntryRef> File = LookupFile( 1767 FilenameLoc, LookupFilename, 1768 false, LookupFrom, LookupFromFile, CurDir, 1769 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1770 &SuggestedModule, &IsMapped, 1771 /*IsFrameworkFound=*/nullptr); 1772 if (File) { 1773 Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) 1774 << Filename << IsImportDecl 1775 << FixItHint::CreateReplacement(FilenameRange, 1776 "\"" + Filename.str() + "\""); 1777 return File; 1778 } 1779 } 1780 1781 // Check for likely typos due to leading or trailing non-isAlphanumeric 1782 // characters 1783 StringRef OriginalFilename = Filename; 1784 if (LangOpts.SpellChecking) { 1785 // A heuristic to correct a typo file name by removing leading and 1786 // trailing non-isAlphanumeric characters. 1787 auto CorrectTypoFilename = [](llvm::StringRef Filename) { 1788 Filename = Filename.drop_until(isAlphanumeric); 1789 while (!Filename.empty() && !isAlphanumeric(Filename.back())) { 1790 Filename = Filename.drop_back(); 1791 } 1792 return Filename; 1793 }; 1794 StringRef TypoCorrectionName = CorrectTypoFilename(Filename); 1795 1796 #ifndef _WIN32 1797 // Normalize slashes when compiling with -fms-extensions on non-Windows. 1798 // This is unnecessary on Windows since the filesystem there handles 1799 // backslashes. 1800 SmallString<128> NormalizedTypoCorrectionPath; 1801 if (LangOpts.MicrosoftExt) { 1802 NormalizedTypoCorrectionPath = TypoCorrectionName; 1803 llvm::sys::path::native(NormalizedTypoCorrectionPath); 1804 TypoCorrectionName = NormalizedTypoCorrectionPath; 1805 } 1806 #endif 1807 1808 Optional<FileEntryRef> File = LookupFile( 1809 FilenameLoc, TypoCorrectionName, isAngled, LookupFrom, LookupFromFile, 1810 CurDir, Callbacks ? &SearchPath : nullptr, 1811 Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped, 1812 /*IsFrameworkFound=*/nullptr); 1813 if (File) { 1814 auto Hint = 1815 isAngled ? FixItHint::CreateReplacement( 1816 FilenameRange, "<" + TypoCorrectionName.str() + ">") 1817 : FixItHint::CreateReplacement( 1818 FilenameRange, "\"" + TypoCorrectionName.str() + "\""); 1819 Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal) 1820 << OriginalFilename << TypoCorrectionName << Hint; 1821 // We found the file, so set the Filename to the name after typo 1822 // correction. 1823 Filename = TypoCorrectionName; 1824 return File; 1825 } 1826 } 1827 1828 // If the file is still not found, just go with the vanilla diagnostic 1829 assert(!File.hasValue() && "expected missing file"); 1830 Diag(FilenameTok, diag::err_pp_file_not_found) 1831 << OriginalFilename << FilenameRange; 1832 if (IsFrameworkFound) { 1833 size_t SlashPos = OriginalFilename.find('/'); 1834 assert(SlashPos != StringRef::npos && 1835 "Include with framework name should have '/' in the filename"); 1836 StringRef FrameworkName = OriginalFilename.substr(0, SlashPos); 1837 FrameworkCacheEntry &CacheEntry = 1838 HeaderInfo.LookupFrameworkCache(FrameworkName); 1839 assert(CacheEntry.Directory && "Found framework should be in cache"); 1840 Diag(FilenameTok, diag::note_pp_framework_without_header) 1841 << OriginalFilename.substr(SlashPos + 1) << FrameworkName 1842 << CacheEntry.Directory->getName(); 1843 } 1844 1845 return None; 1846 } 1847 1848 /// Handle either a #include-like directive or an import declaration that names 1849 /// a header file. 1850 /// 1851 /// \param HashLoc The location of the '#' token for an include, or 1852 /// SourceLocation() for an import declaration. 1853 /// \param IncludeTok The include / include_next / import token. 1854 /// \param FilenameTok The header-name token. 1855 /// \param EndLoc The location at which any imported macros become visible. 1856 /// \param LookupFrom For #include_next, the starting directory for the 1857 /// directory lookup. 1858 /// \param LookupFromFile For #include_next, the starting file for the directory 1859 /// lookup. 1860 Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport( 1861 SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, 1862 SourceLocation EndLoc, const DirectoryLookup *LookupFrom, 1863 const FileEntry *LookupFromFile) { 1864 SmallString<128> FilenameBuffer; 1865 StringRef Filename = getSpelling(FilenameTok, FilenameBuffer); 1866 SourceLocation CharEnd = FilenameTok.getEndLoc(); 1867 1868 CharSourceRange FilenameRange 1869 = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd); 1870 StringRef OriginalFilename = Filename; 1871 bool isAngled = 1872 GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename); 1873 1874 // If GetIncludeFilenameSpelling set the start ptr to null, there was an 1875 // error. 1876 if (Filename.empty()) 1877 return {ImportAction::None}; 1878 1879 bool IsImportDecl = HashLoc.isInvalid(); 1880 SourceLocation StartLoc = IsImportDecl ? IncludeTok.getLocation() : HashLoc; 1881 1882 // Complain about attempts to #include files in an audit pragma. 1883 if (PragmaARCCFCodeAuditedInfo.second.isValid()) { 1884 Diag(StartLoc, diag::err_pp_include_in_arc_cf_code_audited) << IsImportDecl; 1885 Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here); 1886 1887 // Immediately leave the pragma. 1888 PragmaARCCFCodeAuditedInfo = {nullptr, SourceLocation()}; 1889 } 1890 1891 // Complain about attempts to #include files in an assume-nonnull pragma. 1892 if (PragmaAssumeNonNullLoc.isValid()) { 1893 Diag(StartLoc, diag::err_pp_include_in_assume_nonnull) << IsImportDecl; 1894 Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here); 1895 1896 // Immediately leave the pragma. 1897 PragmaAssumeNonNullLoc = SourceLocation(); 1898 } 1899 1900 if (HeaderInfo.HasIncludeAliasMap()) { 1901 // Map the filename with the brackets still attached. If the name doesn't 1902 // map to anything, fall back on the filename we've already gotten the 1903 // spelling for. 1904 StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename); 1905 if (!NewName.empty()) 1906 Filename = NewName; 1907 } 1908 1909 // Search include directories. 1910 bool IsMapped = false; 1911 bool IsFrameworkFound = false; 1912 const DirectoryLookup *CurDir; 1913 SmallString<1024> SearchPath; 1914 SmallString<1024> RelativePath; 1915 // We get the raw path only if we have 'Callbacks' to which we later pass 1916 // the path. 1917 ModuleMap::KnownHeader SuggestedModule; 1918 SourceLocation FilenameLoc = FilenameTok.getLocation(); 1919 StringRef LookupFilename = Filename; 1920 1921 #ifndef _WIN32 1922 // Normalize slashes when compiling with -fms-extensions on non-Windows. This 1923 // is unnecessary on Windows since the filesystem there handles backslashes. 1924 SmallString<128> NormalizedPath; 1925 if (LangOpts.MicrosoftExt) { 1926 NormalizedPath = Filename.str(); 1927 llvm::sys::path::native(NormalizedPath); 1928 LookupFilename = NormalizedPath; 1929 } 1930 #endif 1931 1932 Optional<FileEntryRef> File = LookupHeaderIncludeOrImport( 1933 CurDir, Filename, FilenameLoc, FilenameRange, FilenameTok, 1934 IsFrameworkFound, IsImportDecl, IsMapped, LookupFrom, LookupFromFile, 1935 LookupFilename, RelativePath, SearchPath, SuggestedModule, isAngled); 1936 1937 if (usingPCHWithThroughHeader() && SkippingUntilPCHThroughHeader) { 1938 if (File && isPCHThroughHeader(&File->getFileEntry())) 1939 SkippingUntilPCHThroughHeader = false; 1940 return {ImportAction::None}; 1941 } 1942 1943 // Check for circular inclusion of the main file. 1944 // We can't generate a consistent preamble with regard to the conditional 1945 // stack if the main file is included again as due to the preamble bounds 1946 // some directives (e.g. #endif of a header guard) will never be seen. 1947 // Since this will lead to confusing errors, avoid the inclusion. 1948 if (File && PreambleConditionalStack.isRecording() && 1949 SourceMgr.translateFile(&File->getFileEntry()) == 1950 SourceMgr.getMainFileID()) { 1951 Diag(FilenameTok.getLocation(), 1952 diag::err_pp_including_mainfile_in_preamble); 1953 return {ImportAction::None}; 1954 } 1955 1956 // Should we enter the source file? Set to Skip if either the source file is 1957 // known to have no effect beyond its effect on module visibility -- that is, 1958 // if it's got an include guard that is already defined, set to Import if it 1959 // is a modular header we've already built and should import. 1960 enum { Enter, Import, Skip, IncludeLimitReached } Action = Enter; 1961 1962 if (PPOpts->SingleFileParseMode) 1963 Action = IncludeLimitReached; 1964 1965 // If we've reached the max allowed include depth, it is usually due to an 1966 // include cycle. Don't enter already processed files again as it can lead to 1967 // reaching the max allowed include depth again. 1968 if (Action == Enter && HasReachedMaxIncludeDepth && File && 1969 HeaderInfo.getFileInfo(&File->getFileEntry()).NumIncludes) 1970 Action = IncludeLimitReached; 1971 1972 // Determine whether we should try to import the module for this #include, if 1973 // there is one. Don't do so if precompiled module support is disabled or we 1974 // are processing this module textually (because we're building the module). 1975 if (Action == Enter && File && SuggestedModule && getLangOpts().Modules && 1976 !isForModuleBuilding(SuggestedModule.getModule(), 1977 getLangOpts().CurrentModule, 1978 getLangOpts().ModuleName)) { 1979 // If this include corresponds to a module but that module is 1980 // unavailable, diagnose the situation and bail out. 1981 // FIXME: Remove this; loadModule does the same check (but produces 1982 // slightly worse diagnostics). 1983 if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(), 1984 SuggestedModule.getModule())) { 1985 Diag(FilenameTok.getLocation(), 1986 diag::note_implicit_top_level_module_import_here) 1987 << SuggestedModule.getModule()->getTopLevelModuleName(); 1988 return {ImportAction::None}; 1989 } 1990 1991 // Compute the module access path corresponding to this module. 1992 // FIXME: Should we have a second loadModule() overload to avoid this 1993 // extra lookup step? 1994 SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path; 1995 for (Module *Mod = SuggestedModule.getModule(); Mod; Mod = Mod->Parent) 1996 Path.push_back(std::make_pair(getIdentifierInfo(Mod->Name), 1997 FilenameTok.getLocation())); 1998 std::reverse(Path.begin(), Path.end()); 1999 2000 // Warn that we're replacing the include/import with a module import. 2001 if (!IsImportDecl) 2002 diagnoseAutoModuleImport(*this, StartLoc, IncludeTok, Path, CharEnd); 2003 2004 // Load the module to import its macros. We'll make the declarations 2005 // visible when the parser gets here. 2006 // FIXME: Pass SuggestedModule in here rather than converting it to a path 2007 // and making the module loader convert it back again. 2008 ModuleLoadResult Imported = TheModuleLoader.loadModule( 2009 IncludeTok.getLocation(), Path, Module::Hidden, 2010 /*IsInclusionDirective=*/true); 2011 assert((Imported == nullptr || Imported == SuggestedModule.getModule()) && 2012 "the imported module is different than the suggested one"); 2013 2014 if (Imported) { 2015 Action = Import; 2016 } else if (Imported.isMissingExpected()) { 2017 // We failed to find a submodule that we assumed would exist (because it 2018 // was in the directory of an umbrella header, for instance), but no 2019 // actual module containing it exists (because the umbrella header is 2020 // incomplete). Treat this as a textual inclusion. 2021 SuggestedModule = ModuleMap::KnownHeader(); 2022 } else if (Imported.isConfigMismatch()) { 2023 // On a configuration mismatch, enter the header textually. We still know 2024 // that it's part of the corresponding module. 2025 } else { 2026 // We hit an error processing the import. Bail out. 2027 if (hadModuleLoaderFatalFailure()) { 2028 // With a fatal failure in the module loader, we abort parsing. 2029 Token &Result = IncludeTok; 2030 assert(CurLexer && "#include but no current lexer set!"); 2031 Result.startToken(); 2032 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd, tok::eof); 2033 CurLexer->cutOffLexing(); 2034 } 2035 return {ImportAction::None}; 2036 } 2037 } 2038 2039 // The #included file will be considered to be a system header if either it is 2040 // in a system include directory, or if the #includer is a system include 2041 // header. 2042 SrcMgr::CharacteristicKind FileCharacter = 2043 SourceMgr.getFileCharacteristic(FilenameTok.getLocation()); 2044 if (File) 2045 FileCharacter = std::max(HeaderInfo.getFileDirFlavor(&File->getFileEntry()), 2046 FileCharacter); 2047 2048 // If this is a '#import' or an import-declaration, don't re-enter the file. 2049 // 2050 // FIXME: If we have a suggested module for a '#include', and we've already 2051 // visited this file, don't bother entering it again. We know it has no 2052 // further effect. 2053 bool EnterOnce = 2054 IsImportDecl || 2055 IncludeTok.getIdentifierInfo()->getPPKeywordID() == tok::pp_import; 2056 2057 // Ask HeaderInfo if we should enter this #include file. If not, #including 2058 // this file will have no effect. 2059 if (Action == Enter && File && 2060 !HeaderInfo.ShouldEnterIncludeFile(*this, &File->getFileEntry(), 2061 EnterOnce, getLangOpts().Modules, 2062 SuggestedModule.getModule())) { 2063 // Even if we've already preprocessed this header once and know that we 2064 // don't need to see its contents again, we still need to import it if it's 2065 // modular because we might not have imported it from this submodule before. 2066 // 2067 // FIXME: We don't do this when compiling a PCH because the AST 2068 // serialization layer can't cope with it. This means we get local 2069 // submodule visibility semantics wrong in that case. 2070 Action = (SuggestedModule && !getLangOpts().CompilingPCH) ? Import : Skip; 2071 } 2072 2073 if (Callbacks && !IsImportDecl) { 2074 // Notify the callback object that we've seen an inclusion directive. 2075 // FIXME: Use a different callback for a pp-import? 2076 Callbacks->InclusionDirective( 2077 HashLoc, IncludeTok, LookupFilename, isAngled, FilenameRange, 2078 File ? &File->getFileEntry() : nullptr, SearchPath, RelativePath, 2079 Action == Import ? SuggestedModule.getModule() : nullptr, 2080 FileCharacter); 2081 if (Action == Skip && File) 2082 Callbacks->FileSkipped(*File, FilenameTok, FileCharacter); 2083 } 2084 2085 if (!File) 2086 return {ImportAction::None}; 2087 2088 // If this is a C++20 pp-import declaration, diagnose if we didn't find any 2089 // module corresponding to the named header. 2090 if (IsImportDecl && !SuggestedModule) { 2091 Diag(FilenameTok, diag::err_header_import_not_header_unit) 2092 << OriginalFilename << File->getName(); 2093 return {ImportAction::None}; 2094 } 2095 2096 // Issue a diagnostic if the name of the file on disk has a different case 2097 // than the one we're about to open. 2098 const bool CheckIncludePathPortability = 2099 !IsMapped && !File->getFileEntry().tryGetRealPathName().empty(); 2100 2101 if (CheckIncludePathPortability) { 2102 StringRef Name = LookupFilename; 2103 StringRef RealPathName = File->getFileEntry().tryGetRealPathName(); 2104 SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name), 2105 llvm::sys::path::end(Name)); 2106 2107 if (trySimplifyPath(Components, RealPathName)) { 2108 SmallString<128> Path; 2109 Path.reserve(Name.size()+2); 2110 Path.push_back(isAngled ? '<' : '"'); 2111 bool isLeadingSeparator = llvm::sys::path::is_absolute(Name); 2112 for (auto Component : Components) { 2113 if (isLeadingSeparator) 2114 isLeadingSeparator = false; 2115 else 2116 Path.append(Component); 2117 // Append the separator the user used, or the close quote 2118 Path.push_back( 2119 Path.size() <= Filename.size() ? Filename[Path.size()-1] : 2120 (isAngled ? '>' : '"')); 2121 } 2122 // For user files and known standard headers, by default we issue a diagnostic. 2123 // For other system headers, we don't. They can be controlled separately. 2124 auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? 2125 diag::pp_nonportable_path : diag::pp_nonportable_system_path; 2126 Diag(FilenameTok, DiagId) << Path << 2127 FixItHint::CreateReplacement(FilenameRange, Path); 2128 } 2129 } 2130 2131 switch (Action) { 2132 case Skip: 2133 // If we don't need to enter the file, stop now. 2134 if (Module *M = SuggestedModule.getModule()) 2135 return {ImportAction::SkippedModuleImport, M}; 2136 return {ImportAction::None}; 2137 2138 case IncludeLimitReached: 2139 // If we reached our include limit and don't want to enter any more files, 2140 // don't go any further. 2141 return {ImportAction::None}; 2142 2143 case Import: { 2144 // If this is a module import, make it visible if needed. 2145 Module *M = SuggestedModule.getModule(); 2146 assert(M && "no module to import"); 2147 2148 makeModuleVisible(M, EndLoc); 2149 2150 if (IncludeTok.getIdentifierInfo()->getPPKeywordID() == 2151 tok::pp___include_macros) 2152 return {ImportAction::None}; 2153 2154 return {ImportAction::ModuleImport, M}; 2155 } 2156 2157 case Enter: 2158 break; 2159 } 2160 2161 // Check that we don't have infinite #include recursion. 2162 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) { 2163 Diag(FilenameTok, diag::err_pp_include_too_deep); 2164 HasReachedMaxIncludeDepth = true; 2165 return {ImportAction::None}; 2166 } 2167 2168 // Look up the file, create a File ID for it. 2169 SourceLocation IncludePos = FilenameTok.getLocation(); 2170 // If the filename string was the result of macro expansions, set the include 2171 // position on the file where it will be included and after the expansions. 2172 if (IncludePos.isMacroID()) 2173 IncludePos = SourceMgr.getExpansionRange(IncludePos).getEnd(); 2174 FileID FID = SourceMgr.createFileID(*File, IncludePos, FileCharacter); 2175 if (!FID.isValid()) { 2176 TheModuleLoader.HadFatalFailure = true; 2177 return ImportAction::Failure; 2178 } 2179 2180 // If all is good, enter the new file! 2181 if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation())) 2182 return {ImportAction::None}; 2183 2184 // Determine if we're switching to building a new submodule, and which one. 2185 if (auto *M = SuggestedModule.getModule()) { 2186 if (M->getTopLevelModule()->ShadowingModule) { 2187 // We are building a submodule that belongs to a shadowed module. This 2188 // means we find header files in the shadowed module. 2189 Diag(M->DefinitionLoc, diag::err_module_build_shadowed_submodule) 2190 << M->getFullModuleName(); 2191 Diag(M->getTopLevelModule()->ShadowingModule->DefinitionLoc, 2192 diag::note_previous_definition); 2193 return {ImportAction::None}; 2194 } 2195 // When building a pch, -fmodule-name tells the compiler to textually 2196 // include headers in the specified module. We are not building the 2197 // specified module. 2198 // 2199 // FIXME: This is the wrong way to handle this. We should produce a PCH 2200 // that behaves the same as the header would behave in a compilation using 2201 // that PCH, which means we should enter the submodule. We need to teach 2202 // the AST serialization layer to deal with the resulting AST. 2203 if (getLangOpts().CompilingPCH && 2204 isForModuleBuilding(M, getLangOpts().CurrentModule, 2205 getLangOpts().ModuleName)) 2206 return {ImportAction::None}; 2207 2208 assert(!CurLexerSubmodule && "should not have marked this as a module yet"); 2209 CurLexerSubmodule = M; 2210 2211 // Let the macro handling code know that any future macros are within 2212 // the new submodule. 2213 EnterSubmodule(M, EndLoc, /*ForPragma*/false); 2214 2215 // Let the parser know that any future declarations are within the new 2216 // submodule. 2217 // FIXME: There's no point doing this if we're handling a #__include_macros 2218 // directive. 2219 return {ImportAction::ModuleBegin, M}; 2220 } 2221 2222 assert(!IsImportDecl && "failed to diagnose missing module for import decl"); 2223 return {ImportAction::None}; 2224 } 2225 2226 /// HandleIncludeNextDirective - Implements \#include_next. 2227 /// 2228 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, 2229 Token &IncludeNextTok) { 2230 Diag(IncludeNextTok, diag::ext_pp_include_next_directive); 2231 2232 // #include_next is like #include, except that we start searching after 2233 // the current found directory. If we can't do this, issue a 2234 // diagnostic. 2235 const DirectoryLookup *Lookup = CurDirLookup; 2236 const FileEntry *LookupFromFile = nullptr; 2237 if (isInPrimaryFile() && LangOpts.IsHeaderFile) { 2238 // If the main file is a header, then it's either for PCH/AST generation, 2239 // or libclang opened it. Either way, handle it as a normal include below 2240 // and do not complain about include_next. 2241 } else if (isInPrimaryFile()) { 2242 Lookup = nullptr; 2243 Diag(IncludeNextTok, diag::pp_include_next_in_primary); 2244 } else if (CurLexerSubmodule) { 2245 // Start looking up in the directory *after* the one in which the current 2246 // file would be found, if any. 2247 assert(CurPPLexer && "#include_next directive in macro?"); 2248 LookupFromFile = CurPPLexer->getFileEntry(); 2249 Lookup = nullptr; 2250 } else if (!Lookup) { 2251 // The current file was not found by walking the include path. Either it 2252 // is the primary file (handled above), or it was found by absolute path, 2253 // or it was found relative to such a file. 2254 // FIXME: Track enough information so we know which case we're in. 2255 Diag(IncludeNextTok, diag::pp_include_next_absolute_path); 2256 } else { 2257 // Start looking up in the next directory. 2258 ++Lookup; 2259 } 2260 2261 return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup, 2262 LookupFromFile); 2263 } 2264 2265 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode 2266 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) { 2267 // The Microsoft #import directive takes a type library and generates header 2268 // files from it, and includes those. This is beyond the scope of what clang 2269 // does, so we ignore it and error out. However, #import can optionally have 2270 // trailing attributes that span multiple lines. We're going to eat those 2271 // so we can continue processing from there. 2272 Diag(Tok, diag::err_pp_import_directive_ms ); 2273 2274 // Read tokens until we get to the end of the directive. Note that the 2275 // directive can be split over multiple lines using the backslash character. 2276 DiscardUntilEndOfDirective(); 2277 } 2278 2279 /// HandleImportDirective - Implements \#import. 2280 /// 2281 void Preprocessor::HandleImportDirective(SourceLocation HashLoc, 2282 Token &ImportTok) { 2283 if (!LangOpts.ObjC) { // #import is standard for ObjC. 2284 if (LangOpts.MSVCCompat) 2285 return HandleMicrosoftImportDirective(ImportTok); 2286 Diag(ImportTok, diag::ext_pp_import_directive); 2287 } 2288 return HandleIncludeDirective(HashLoc, ImportTok); 2289 } 2290 2291 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a 2292 /// pseudo directive in the predefines buffer. This handles it by sucking all 2293 /// tokens through the preprocessor and discarding them (only keeping the side 2294 /// effects on the preprocessor). 2295 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, 2296 Token &IncludeMacrosTok) { 2297 // This directive should only occur in the predefines buffer. If not, emit an 2298 // error and reject it. 2299 SourceLocation Loc = IncludeMacrosTok.getLocation(); 2300 if (SourceMgr.getBufferName(Loc) != "<built-in>") { 2301 Diag(IncludeMacrosTok.getLocation(), 2302 diag::pp_include_macros_out_of_predefines); 2303 DiscardUntilEndOfDirective(); 2304 return; 2305 } 2306 2307 // Treat this as a normal #include for checking purposes. If this is 2308 // successful, it will push a new lexer onto the include stack. 2309 HandleIncludeDirective(HashLoc, IncludeMacrosTok); 2310 2311 Token TmpTok; 2312 do { 2313 Lex(TmpTok); 2314 assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!"); 2315 } while (TmpTok.isNot(tok::hashhash)); 2316 } 2317 2318 //===----------------------------------------------------------------------===// 2319 // Preprocessor Macro Directive Handling. 2320 //===----------------------------------------------------------------------===// 2321 2322 /// ReadMacroParameterList - The ( starting a parameter list of a macro 2323 /// definition has just been read. Lex the rest of the parameters and the 2324 /// closing ), updating MI with what we learn. Return true if an error occurs 2325 /// parsing the param list. 2326 bool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) { 2327 SmallVector<IdentifierInfo*, 32> Parameters; 2328 2329 while (true) { 2330 LexUnexpandedToken(Tok); 2331 switch (Tok.getKind()) { 2332 case tok::r_paren: 2333 // Found the end of the parameter list. 2334 if (Parameters.empty()) // #define FOO() 2335 return false; 2336 // Otherwise we have #define FOO(A,) 2337 Diag(Tok, diag::err_pp_expected_ident_in_arg_list); 2338 return true; 2339 case tok::ellipsis: // #define X(... -> C99 varargs 2340 if (!LangOpts.C99) 2341 Diag(Tok, LangOpts.CPlusPlus11 ? 2342 diag::warn_cxx98_compat_variadic_macro : 2343 diag::ext_variadic_macro); 2344 2345 // OpenCL v1.2 s6.9.e: variadic macros are not supported. 2346 if (LangOpts.OpenCL) { 2347 Diag(Tok, diag::ext_pp_opencl_variadic_macros); 2348 } 2349 2350 // Lex the token after the identifier. 2351 LexUnexpandedToken(Tok); 2352 if (Tok.isNot(tok::r_paren)) { 2353 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2354 return true; 2355 } 2356 // Add the __VA_ARGS__ identifier as a parameter. 2357 Parameters.push_back(Ident__VA_ARGS__); 2358 MI->setIsC99Varargs(); 2359 MI->setParameterList(Parameters, BP); 2360 return false; 2361 case tok::eod: // #define X( 2362 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2363 return true; 2364 default: 2365 // Handle keywords and identifiers here to accept things like 2366 // #define Foo(for) for. 2367 IdentifierInfo *II = Tok.getIdentifierInfo(); 2368 if (!II) { 2369 // #define X(1 2370 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list); 2371 return true; 2372 } 2373 2374 // If this is already used as a parameter, it is used multiple times (e.g. 2375 // #define X(A,A. 2376 if (llvm::find(Parameters, II) != Parameters.end()) { // C99 6.10.3p6 2377 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II; 2378 return true; 2379 } 2380 2381 // Add the parameter to the macro info. 2382 Parameters.push_back(II); 2383 2384 // Lex the token after the identifier. 2385 LexUnexpandedToken(Tok); 2386 2387 switch (Tok.getKind()) { 2388 default: // #define X(A B 2389 Diag(Tok, diag::err_pp_expected_comma_in_arg_list); 2390 return true; 2391 case tok::r_paren: // #define X(A) 2392 MI->setParameterList(Parameters, BP); 2393 return false; 2394 case tok::comma: // #define X(A, 2395 break; 2396 case tok::ellipsis: // #define X(A... -> GCC extension 2397 // Diagnose extension. 2398 Diag(Tok, diag::ext_named_variadic_macro); 2399 2400 // Lex the token after the identifier. 2401 LexUnexpandedToken(Tok); 2402 if (Tok.isNot(tok::r_paren)) { 2403 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2404 return true; 2405 } 2406 2407 MI->setIsGNUVarargs(); 2408 MI->setParameterList(Parameters, BP); 2409 return false; 2410 } 2411 } 2412 } 2413 } 2414 2415 static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI, 2416 const LangOptions &LOptions) { 2417 if (MI->getNumTokens() == 1) { 2418 const Token &Value = MI->getReplacementToken(0); 2419 2420 // Macro that is identity, like '#define inline inline' is a valid pattern. 2421 if (MacroName.getKind() == Value.getKind()) 2422 return true; 2423 2424 // Macro that maps a keyword to the same keyword decorated with leading/ 2425 // trailing underscores is a valid pattern: 2426 // #define inline __inline 2427 // #define inline __inline__ 2428 // #define inline _inline (in MS compatibility mode) 2429 StringRef MacroText = MacroName.getIdentifierInfo()->getName(); 2430 if (IdentifierInfo *II = Value.getIdentifierInfo()) { 2431 if (!II->isKeyword(LOptions)) 2432 return false; 2433 StringRef ValueText = II->getName(); 2434 StringRef TrimmedValue = ValueText; 2435 if (!ValueText.startswith("__")) { 2436 if (ValueText.startswith("_")) 2437 TrimmedValue = TrimmedValue.drop_front(1); 2438 else 2439 return false; 2440 } else { 2441 TrimmedValue = TrimmedValue.drop_front(2); 2442 if (TrimmedValue.endswith("__")) 2443 TrimmedValue = TrimmedValue.drop_back(2); 2444 } 2445 return TrimmedValue.equals(MacroText); 2446 } else { 2447 return false; 2448 } 2449 } 2450 2451 // #define inline 2452 return MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static, 2453 tok::kw_const) && 2454 MI->getNumTokens() == 0; 2455 } 2456 2457 // ReadOptionalMacroParameterListAndBody - This consumes all (i.e. the 2458 // entire line) of the macro's tokens and adds them to MacroInfo, and while 2459 // doing so performs certain validity checks including (but not limited to): 2460 // - # (stringization) is followed by a macro parameter 2461 // 2462 // Returns a nullptr if an invalid sequence of tokens is encountered or returns 2463 // a pointer to a MacroInfo object. 2464 2465 MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody( 2466 const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) { 2467 2468 Token LastTok = MacroNameTok; 2469 // Create the new macro. 2470 MacroInfo *const MI = AllocateMacroInfo(MacroNameTok.getLocation()); 2471 2472 Token Tok; 2473 LexUnexpandedToken(Tok); 2474 2475 // Ensure we consume the rest of the macro body if errors occur. 2476 auto _ = llvm::make_scope_exit([&]() { 2477 // The flag indicates if we are still waiting for 'eod'. 2478 if (CurLexer->ParsingPreprocessorDirective) 2479 DiscardUntilEndOfDirective(); 2480 }); 2481 2482 // Used to un-poison and then re-poison identifiers of the __VA_ARGS__ ilk 2483 // within their appropriate context. 2484 VariadicMacroScopeGuard VariadicMacroScopeGuard(*this); 2485 2486 // If this is a function-like macro definition, parse the argument list, 2487 // marking each of the identifiers as being used as macro arguments. Also, 2488 // check other constraints on the first token of the macro body. 2489 if (Tok.is(tok::eod)) { 2490 if (ImmediatelyAfterHeaderGuard) { 2491 // Save this macro information since it may part of a header guard. 2492 CurPPLexer->MIOpt.SetDefinedMacro(MacroNameTok.getIdentifierInfo(), 2493 MacroNameTok.getLocation()); 2494 } 2495 // If there is no body to this macro, we have no special handling here. 2496 } else if (Tok.hasLeadingSpace()) { 2497 // This is a normal token with leading space. Clear the leading space 2498 // marker on the first token to get proper expansion. 2499 Tok.clearFlag(Token::LeadingSpace); 2500 } else if (Tok.is(tok::l_paren)) { 2501 // This is a function-like macro definition. Read the argument list. 2502 MI->setIsFunctionLike(); 2503 if (ReadMacroParameterList(MI, LastTok)) 2504 return nullptr; 2505 2506 // If this is a definition of an ISO C/C++ variadic function-like macro (not 2507 // using the GNU named varargs extension) inform our variadic scope guard 2508 // which un-poisons and re-poisons certain identifiers (e.g. __VA_ARGS__) 2509 // allowed only within the definition of a variadic macro. 2510 2511 if (MI->isC99Varargs()) { 2512 VariadicMacroScopeGuard.enterScope(); 2513 } 2514 2515 // Read the first token after the arg list for down below. 2516 LexUnexpandedToken(Tok); 2517 } else if (LangOpts.C99 || LangOpts.CPlusPlus11) { 2518 // C99 requires whitespace between the macro definition and the body. Emit 2519 // a diagnostic for something like "#define X+". 2520 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name); 2521 } else { 2522 // C90 6.8 TC1 says: "In the definition of an object-like macro, if the 2523 // first character of a replacement list is not a character required by 2524 // subclause 5.2.1, then there shall be white-space separation between the 2525 // identifier and the replacement list.". 5.2.1 lists this set: 2526 // "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which 2527 // is irrelevant here. 2528 bool isInvalid = false; 2529 if (Tok.is(tok::at)) // @ is not in the list above. 2530 isInvalid = true; 2531 else if (Tok.is(tok::unknown)) { 2532 // If we have an unknown token, it is something strange like "`". Since 2533 // all of valid characters would have lexed into a single character 2534 // token of some sort, we know this is not a valid case. 2535 isInvalid = true; 2536 } 2537 if (isInvalid) 2538 Diag(Tok, diag::ext_missing_whitespace_after_macro_name); 2539 else 2540 Diag(Tok, diag::warn_missing_whitespace_after_macro_name); 2541 } 2542 2543 if (!Tok.is(tok::eod)) 2544 LastTok = Tok; 2545 2546 // Read the rest of the macro body. 2547 if (MI->isObjectLike()) { 2548 // Object-like macros are very simple, just read their body. 2549 while (Tok.isNot(tok::eod)) { 2550 LastTok = Tok; 2551 MI->AddTokenToBody(Tok); 2552 // Get the next token of the macro. 2553 LexUnexpandedToken(Tok); 2554 } 2555 } else { 2556 // Otherwise, read the body of a function-like macro. While we are at it, 2557 // check C99 6.10.3.2p1: ensure that # operators are followed by macro 2558 // parameters in function-like macro expansions. 2559 2560 VAOptDefinitionContext VAOCtx(*this); 2561 2562 while (Tok.isNot(tok::eod)) { 2563 LastTok = Tok; 2564 2565 if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) { 2566 MI->AddTokenToBody(Tok); 2567 2568 if (VAOCtx.isVAOptToken(Tok)) { 2569 // If we're already within a VAOPT, emit an error. 2570 if (VAOCtx.isInVAOpt()) { 2571 Diag(Tok, diag::err_pp_vaopt_nested_use); 2572 return nullptr; 2573 } 2574 // Ensure VAOPT is followed by a '(' . 2575 LexUnexpandedToken(Tok); 2576 if (Tok.isNot(tok::l_paren)) { 2577 Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use); 2578 return nullptr; 2579 } 2580 MI->AddTokenToBody(Tok); 2581 VAOCtx.sawVAOptFollowedByOpeningParens(Tok.getLocation()); 2582 LexUnexpandedToken(Tok); 2583 if (Tok.is(tok::hashhash)) { 2584 Diag(Tok, diag::err_vaopt_paste_at_start); 2585 return nullptr; 2586 } 2587 continue; 2588 } else if (VAOCtx.isInVAOpt()) { 2589 if (Tok.is(tok::r_paren)) { 2590 if (VAOCtx.sawClosingParen()) { 2591 const unsigned NumTokens = MI->getNumTokens(); 2592 assert(NumTokens >= 3 && "Must have seen at least __VA_OPT__( " 2593 "and a subsequent tok::r_paren"); 2594 if (MI->getReplacementToken(NumTokens - 2).is(tok::hashhash)) { 2595 Diag(Tok, diag::err_vaopt_paste_at_end); 2596 return nullptr; 2597 } 2598 } 2599 } else if (Tok.is(tok::l_paren)) { 2600 VAOCtx.sawOpeningParen(Tok.getLocation()); 2601 } 2602 } 2603 // Get the next token of the macro. 2604 LexUnexpandedToken(Tok); 2605 continue; 2606 } 2607 2608 // If we're in -traditional mode, then we should ignore stringification 2609 // and token pasting. Mark the tokens as unknown so as not to confuse 2610 // things. 2611 if (getLangOpts().TraditionalCPP) { 2612 Tok.setKind(tok::unknown); 2613 MI->AddTokenToBody(Tok); 2614 2615 // Get the next token of the macro. 2616 LexUnexpandedToken(Tok); 2617 continue; 2618 } 2619 2620 if (Tok.is(tok::hashhash)) { 2621 // If we see token pasting, check if it looks like the gcc comma 2622 // pasting extension. We'll use this information to suppress 2623 // diagnostics later on. 2624 2625 // Get the next token of the macro. 2626 LexUnexpandedToken(Tok); 2627 2628 if (Tok.is(tok::eod)) { 2629 MI->AddTokenToBody(LastTok); 2630 break; 2631 } 2632 2633 unsigned NumTokens = MI->getNumTokens(); 2634 if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ && 2635 MI->getReplacementToken(NumTokens-1).is(tok::comma)) 2636 MI->setHasCommaPasting(); 2637 2638 // Things look ok, add the '##' token to the macro. 2639 MI->AddTokenToBody(LastTok); 2640 continue; 2641 } 2642 2643 // Our Token is a stringization operator. 2644 // Get the next token of the macro. 2645 LexUnexpandedToken(Tok); 2646 2647 // Check for a valid macro arg identifier or __VA_OPT__. 2648 if (!VAOCtx.isVAOptToken(Tok) && 2649 (Tok.getIdentifierInfo() == nullptr || 2650 MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) { 2651 2652 // If this is assembler-with-cpp mode, we accept random gibberish after 2653 // the '#' because '#' is often a comment character. However, change 2654 // the kind of the token to tok::unknown so that the preprocessor isn't 2655 // confused. 2656 if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) { 2657 LastTok.setKind(tok::unknown); 2658 MI->AddTokenToBody(LastTok); 2659 continue; 2660 } else { 2661 Diag(Tok, diag::err_pp_stringize_not_parameter) 2662 << LastTok.is(tok::hashat); 2663 return nullptr; 2664 } 2665 } 2666 2667 // Things look ok, add the '#' and param name tokens to the macro. 2668 MI->AddTokenToBody(LastTok); 2669 2670 // If the token following '#' is VAOPT, let the next iteration handle it 2671 // and check it for correctness, otherwise add the token and prime the 2672 // loop with the next one. 2673 if (!VAOCtx.isVAOptToken(Tok)) { 2674 MI->AddTokenToBody(Tok); 2675 LastTok = Tok; 2676 2677 // Get the next token of the macro. 2678 LexUnexpandedToken(Tok); 2679 } 2680 } 2681 if (VAOCtx.isInVAOpt()) { 2682 assert(Tok.is(tok::eod) && "Must be at End Of preprocessing Directive"); 2683 Diag(Tok, diag::err_pp_expected_after) 2684 << LastTok.getKind() << tok::r_paren; 2685 Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren; 2686 return nullptr; 2687 } 2688 } 2689 MI->setDefinitionEndLoc(LastTok.getLocation()); 2690 return MI; 2691 } 2692 /// HandleDefineDirective - Implements \#define. This consumes the entire macro 2693 /// line then lets the caller lex the next real token. 2694 void Preprocessor::HandleDefineDirective( 2695 Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) { 2696 ++NumDefined; 2697 2698 Token MacroNameTok; 2699 bool MacroShadowsKeyword; 2700 ReadMacroName(MacroNameTok, MU_Define, &MacroShadowsKeyword); 2701 2702 // Error reading macro name? If so, diagnostic already issued. 2703 if (MacroNameTok.is(tok::eod)) 2704 return; 2705 2706 // If we are supposed to keep comments in #defines, reenable comment saving 2707 // mode. 2708 if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments); 2709 2710 MacroInfo *const MI = ReadOptionalMacroParameterListAndBody( 2711 MacroNameTok, ImmediatelyAfterHeaderGuard); 2712 2713 if (!MI) return; 2714 2715 if (MacroShadowsKeyword && 2716 !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) { 2717 Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword); 2718 } 2719 // Check that there is no paste (##) operator at the beginning or end of the 2720 // replacement list. 2721 unsigned NumTokens = MI->getNumTokens(); 2722 if (NumTokens != 0) { 2723 if (MI->getReplacementToken(0).is(tok::hashhash)) { 2724 Diag(MI->getReplacementToken(0), diag::err_paste_at_start); 2725 return; 2726 } 2727 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) { 2728 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end); 2729 return; 2730 } 2731 } 2732 2733 // When skipping just warn about macros that do not match. 2734 if (SkippingUntilPCHThroughHeader) { 2735 const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo()); 2736 if (!OtherMI || !MI->isIdenticalTo(*OtherMI, *this, 2737 /*Syntactic=*/LangOpts.MicrosoftExt)) 2738 Diag(MI->getDefinitionLoc(), diag::warn_pp_macro_def_mismatch_with_pch) 2739 << MacroNameTok.getIdentifierInfo(); 2740 // Issue the diagnostic but allow the change if msvc extensions are enabled 2741 if (!LangOpts.MicrosoftExt) 2742 return; 2743 } 2744 2745 // Finally, if this identifier already had a macro defined for it, verify that 2746 // the macro bodies are identical, and issue diagnostics if they are not. 2747 if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) { 2748 // In Objective-C, ignore attempts to directly redefine the builtin 2749 // definitions of the ownership qualifiers. It's still possible to 2750 // #undef them. 2751 auto isObjCProtectedMacro = [](const IdentifierInfo *II) -> bool { 2752 return II->isStr("__strong") || 2753 II->isStr("__weak") || 2754 II->isStr("__unsafe_unretained") || 2755 II->isStr("__autoreleasing"); 2756 }; 2757 if (getLangOpts().ObjC && 2758 SourceMgr.getFileID(OtherMI->getDefinitionLoc()) 2759 == getPredefinesFileID() && 2760 isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) { 2761 // Warn if it changes the tokens. 2762 if ((!getDiagnostics().getSuppressSystemWarnings() || 2763 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) && 2764 !MI->isIdenticalTo(*OtherMI, *this, 2765 /*Syntactic=*/LangOpts.MicrosoftExt)) { 2766 Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored); 2767 } 2768 assert(!OtherMI->isWarnIfUnused()); 2769 return; 2770 } 2771 2772 // It is very common for system headers to have tons of macro redefinitions 2773 // and for warnings to be disabled in system headers. If this is the case, 2774 // then don't bother calling MacroInfo::isIdenticalTo. 2775 if (!getDiagnostics().getSuppressSystemWarnings() || 2776 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) { 2777 if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused()) 2778 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used); 2779 2780 // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and 2781 // C++ [cpp.predefined]p4, but allow it as an extension. 2782 if (OtherMI->isBuiltinMacro()) 2783 Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro); 2784 // Macros must be identical. This means all tokens and whitespace 2785 // separation must be the same. C99 6.10.3p2. 2786 else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && 2787 !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) { 2788 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) 2789 << MacroNameTok.getIdentifierInfo(); 2790 Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition); 2791 } 2792 } 2793 if (OtherMI->isWarnIfUnused()) 2794 WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc()); 2795 } 2796 2797 DefMacroDirective *MD = 2798 appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI); 2799 2800 assert(!MI->isUsed()); 2801 // If we need warning for not using the macro, add its location in the 2802 // warn-because-unused-macro set. If it gets used it will be removed from set. 2803 if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && 2804 !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && 2805 !MacroExpansionInDirectivesOverride) { 2806 MI->setIsWarnIfUnused(true); 2807 WarnUnusedMacroLocs.insert(MI->getDefinitionLoc()); 2808 } 2809 2810 // If the callbacks want to know, tell them about the macro definition. 2811 if (Callbacks) 2812 Callbacks->MacroDefined(MacroNameTok, MD); 2813 } 2814 2815 /// HandleUndefDirective - Implements \#undef. 2816 /// 2817 void Preprocessor::HandleUndefDirective() { 2818 ++NumUndefined; 2819 2820 Token MacroNameTok; 2821 ReadMacroName(MacroNameTok, MU_Undef); 2822 2823 // Error reading macro name? If so, diagnostic already issued. 2824 if (MacroNameTok.is(tok::eod)) 2825 return; 2826 2827 // Check to see if this is the last token on the #undef line. 2828 CheckEndOfDirective("undef"); 2829 2830 // Okay, we have a valid identifier to undef. 2831 auto *II = MacroNameTok.getIdentifierInfo(); 2832 auto MD = getMacroDefinition(II); 2833 UndefMacroDirective *Undef = nullptr; 2834 2835 // If the macro is not defined, this is a noop undef. 2836 if (const MacroInfo *MI = MD.getMacroInfo()) { 2837 if (!MI->isUsed() && MI->isWarnIfUnused()) 2838 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used); 2839 2840 if (MI->isWarnIfUnused()) 2841 WarnUnusedMacroLocs.erase(MI->getDefinitionLoc()); 2842 2843 Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation()); 2844 } 2845 2846 // If the callbacks want to know, tell them about the macro #undef. 2847 // Note: no matter if the macro was defined or not. 2848 if (Callbacks) 2849 Callbacks->MacroUndefined(MacroNameTok, MD, Undef); 2850 2851 if (Undef) 2852 appendMacroDirective(II, Undef); 2853 } 2854 2855 //===----------------------------------------------------------------------===// 2856 // Preprocessor Conditional Directive Handling. 2857 //===----------------------------------------------------------------------===// 2858 2859 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive. isIfndef 2860 /// is true when this is a \#ifndef directive. ReadAnyTokensBeforeDirective is 2861 /// true if any tokens have been returned or pp-directives activated before this 2862 /// \#ifndef has been lexed. 2863 /// 2864 void Preprocessor::HandleIfdefDirective(Token &Result, 2865 const Token &HashToken, 2866 bool isIfndef, 2867 bool ReadAnyTokensBeforeDirective) { 2868 ++NumIf; 2869 Token DirectiveTok = Result; 2870 2871 Token MacroNameTok; 2872 ReadMacroName(MacroNameTok); 2873 2874 // Error reading macro name? If so, diagnostic already issued. 2875 if (MacroNameTok.is(tok::eod)) { 2876 // Skip code until we get to #endif. This helps with recovery by not 2877 // emitting an error when the #endif is reached. 2878 SkipExcludedConditionalBlock(HashToken.getLocation(), 2879 DirectiveTok.getLocation(), 2880 /*Foundnonskip*/ false, /*FoundElse*/ false); 2881 return; 2882 } 2883 2884 // Check to see if this is the last token on the #if[n]def line. 2885 CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef"); 2886 2887 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo(); 2888 auto MD = getMacroDefinition(MII); 2889 MacroInfo *MI = MD.getMacroInfo(); 2890 2891 if (CurPPLexer->getConditionalStackDepth() == 0) { 2892 // If the start of a top-level #ifdef and if the macro is not defined, 2893 // inform MIOpt that this might be the start of a proper include guard. 2894 // Otherwise it is some other form of unknown conditional which we can't 2895 // handle. 2896 if (!ReadAnyTokensBeforeDirective && !MI) { 2897 assert(isIfndef && "#ifdef shouldn't reach here"); 2898 CurPPLexer->MIOpt.EnterTopLevelIfndef(MII, MacroNameTok.getLocation()); 2899 } else 2900 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2901 } 2902 2903 // If there is a macro, process it. 2904 if (MI) // Mark it used. 2905 markMacroAsUsed(MI); 2906 2907 if (Callbacks) { 2908 if (isIfndef) 2909 Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD); 2910 else 2911 Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD); 2912 } 2913 2914 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 2915 getSourceManager().isInMainFile(DirectiveTok.getLocation()); 2916 2917 // Should we include the stuff contained by this directive? 2918 if (PPOpts->SingleFileParseMode && !MI) { 2919 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2920 // the directive blocks. 2921 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2922 /*wasskip*/false, /*foundnonskip*/false, 2923 /*foundelse*/false); 2924 } else if (!MI == isIfndef || RetainExcludedCB) { 2925 // Yes, remember that we are inside a conditional, then lex the next token. 2926 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2927 /*wasskip*/false, /*foundnonskip*/true, 2928 /*foundelse*/false); 2929 } else { 2930 // No, skip the contents of this block. 2931 SkipExcludedConditionalBlock(HashToken.getLocation(), 2932 DirectiveTok.getLocation(), 2933 /*Foundnonskip*/ false, 2934 /*FoundElse*/ false); 2935 } 2936 } 2937 2938 /// HandleIfDirective - Implements the \#if directive. 2939 /// 2940 void Preprocessor::HandleIfDirective(Token &IfToken, 2941 const Token &HashToken, 2942 bool ReadAnyTokensBeforeDirective) { 2943 ++NumIf; 2944 2945 // Parse and evaluate the conditional expression. 2946 IdentifierInfo *IfNDefMacro = nullptr; 2947 const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); 2948 const bool ConditionalTrue = DER.Conditional; 2949 2950 // If this condition is equivalent to #ifndef X, and if this is the first 2951 // directive seen, handle it for the multiple-include optimization. 2952 if (CurPPLexer->getConditionalStackDepth() == 0) { 2953 if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue) 2954 // FIXME: Pass in the location of the macro name, not the 'if' token. 2955 CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation()); 2956 else 2957 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2958 } 2959 2960 if (Callbacks) 2961 Callbacks->If( 2962 IfToken.getLocation(), DER.ExprRange, 2963 (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); 2964 2965 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 2966 getSourceManager().isInMainFile(IfToken.getLocation()); 2967 2968 // Should we include the stuff contained by this directive? 2969 if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { 2970 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2971 // the directive blocks. 2972 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2973 /*foundnonskip*/false, /*foundelse*/false); 2974 } else if (ConditionalTrue || RetainExcludedCB) { 2975 // Yes, remember that we are inside a conditional, then lex the next token. 2976 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2977 /*foundnonskip*/true, /*foundelse*/false); 2978 } else { 2979 // No, skip the contents of this block. 2980 SkipExcludedConditionalBlock(HashToken.getLocation(), IfToken.getLocation(), 2981 /*Foundnonskip*/ false, 2982 /*FoundElse*/ false); 2983 } 2984 } 2985 2986 /// HandleEndifDirective - Implements the \#endif directive. 2987 /// 2988 void Preprocessor::HandleEndifDirective(Token &EndifToken) { 2989 ++NumEndif; 2990 2991 // Check that this is the whole directive. 2992 CheckEndOfDirective("endif"); 2993 2994 PPConditionalInfo CondInfo; 2995 if (CurPPLexer->popConditionalLevel(CondInfo)) { 2996 // No conditionals on the stack: this is an #endif without an #if. 2997 Diag(EndifToken, diag::err_pp_endif_without_if); 2998 return; 2999 } 3000 3001 // If this the end of a top-level #endif, inform MIOpt. 3002 if (CurPPLexer->getConditionalStackDepth() == 0) 3003 CurPPLexer->MIOpt.ExitTopLevelConditional(); 3004 3005 assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode && 3006 "This code should only be reachable in the non-skipping case!"); 3007 3008 if (Callbacks) 3009 Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc); 3010 } 3011 3012 /// HandleElseDirective - Implements the \#else directive. 3013 /// 3014 void Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) { 3015 ++NumElse; 3016 3017 // #else directive in a non-skipping conditional... start skipping. 3018 CheckEndOfDirective("else"); 3019 3020 PPConditionalInfo CI; 3021 if (CurPPLexer->popConditionalLevel(CI)) { 3022 Diag(Result, diag::pp_err_else_without_if); 3023 return; 3024 } 3025 3026 // If this is a top-level #else, inform the MIOpt. 3027 if (CurPPLexer->getConditionalStackDepth() == 0) 3028 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3029 3030 // If this is a #else with a #else before it, report the error. 3031 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else); 3032 3033 if (Callbacks) 3034 Callbacks->Else(Result.getLocation(), CI.IfLoc); 3035 3036 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3037 getSourceManager().isInMainFile(Result.getLocation()); 3038 3039 if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { 3040 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3041 // the directive blocks. 3042 CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false, 3043 /*foundnonskip*/false, /*foundelse*/true); 3044 return; 3045 } 3046 3047 // Finally, skip the rest of the contents of this block. 3048 SkipExcludedConditionalBlock(HashToken.getLocation(), CI.IfLoc, 3049 /*Foundnonskip*/ true, 3050 /*FoundElse*/ true, Result.getLocation()); 3051 } 3052 3053 /// HandleElifDirective - Implements the \#elif directive. 3054 /// 3055 void Preprocessor::HandleElifDirective(Token &ElifToken, 3056 const Token &HashToken) { 3057 ++NumElse; 3058 3059 // #elif directive in a non-skipping conditional... start skipping. 3060 // We don't care what the condition is, because we will always skip it (since 3061 // the block immediately before it was included). 3062 SourceRange ConditionRange = DiscardUntilEndOfDirective(); 3063 3064 PPConditionalInfo CI; 3065 if (CurPPLexer->popConditionalLevel(CI)) { 3066 Diag(ElifToken, diag::pp_err_elif_without_if); 3067 return; 3068 } 3069 3070 // If this is a top-level #elif, inform the MIOpt. 3071 if (CurPPLexer->getConditionalStackDepth() == 0) 3072 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3073 3074 // If this is a #elif with a #else before it, report the error. 3075 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else); 3076 3077 if (Callbacks) 3078 Callbacks->Elif(ElifToken.getLocation(), ConditionRange, 3079 PPCallbacks::CVK_NotEvaluated, CI.IfLoc); 3080 3081 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3082 getSourceManager().isInMainFile(ElifToken.getLocation()); 3083 3084 if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { 3085 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3086 // the directive blocks. 3087 CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false, 3088 /*foundnonskip*/false, /*foundelse*/false); 3089 return; 3090 } 3091 3092 // Finally, skip the rest of the contents of this block. 3093 SkipExcludedConditionalBlock( 3094 HashToken.getLocation(), CI.IfLoc, /*Foundnonskip*/ true, 3095 /*FoundElse*/ CI.FoundElse, ElifToken.getLocation()); 3096 } 3097