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