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