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 1455 // If a filename was present, read any flags that are present. 1456 if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this)) 1457 return; 1458 1459 // Exiting to an empty string means pop to the including file, so leave 1460 // FilenameID as -1 in that case. 1461 if (!(IsFileExit && Literal.GetString().empty())) 1462 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1463 } 1464 1465 // Create a line note with this information. 1466 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry, 1467 IsFileExit, FileKind); 1468 1469 // If the preprocessor has callbacks installed, notify them of the #line 1470 // change. This is used so that the line marker comes out in -E mode for 1471 // example. 1472 if (Callbacks) { 1473 PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile; 1474 if (IsFileEntry) 1475 Reason = PPCallbacks::EnterFile; 1476 else if (IsFileExit) 1477 Reason = PPCallbacks::ExitFile; 1478 1479 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind); 1480 } 1481 } 1482 1483 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive. 1484 /// 1485 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok, 1486 bool isWarning) { 1487 // Read the rest of the line raw. We do this because we don't want macros 1488 // to be expanded and we don't require that the tokens be valid preprocessing 1489 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does 1490 // collapse multiple consecutive white space between tokens, but this isn't 1491 // specified by the standard. 1492 SmallString<128> Message; 1493 CurLexer->ReadToEndOfLine(&Message); 1494 1495 // Find the first non-whitespace character, so that we can make the 1496 // diagnostic more succinct. 1497 StringRef Msg = Message.str().ltrim(' '); 1498 1499 if (isWarning) 1500 Diag(Tok, diag::pp_hash_warning) << Msg; 1501 else 1502 Diag(Tok, diag::err_pp_hash_error) << Msg; 1503 } 1504 1505 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive. 1506 /// 1507 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) { 1508 // Yes, this directive is an extension. 1509 Diag(Tok, diag::ext_pp_ident_directive); 1510 1511 // Read the string argument. 1512 Token StrTok; 1513 Lex(StrTok); 1514 1515 // If the token kind isn't a string, it's a malformed directive. 1516 if (StrTok.isNot(tok::string_literal) && 1517 StrTok.isNot(tok::wide_string_literal)) { 1518 Diag(StrTok, diag::err_pp_malformed_ident); 1519 if (StrTok.isNot(tok::eod)) 1520 DiscardUntilEndOfDirective(); 1521 return; 1522 } 1523 1524 if (StrTok.hasUDSuffix()) { 1525 Diag(StrTok, diag::err_invalid_string_udl); 1526 DiscardUntilEndOfDirective(); 1527 return; 1528 } 1529 1530 // Verify that there is nothing after the string, other than EOD. 1531 CheckEndOfDirective("ident"); 1532 1533 if (Callbacks) { 1534 bool Invalid = false; 1535 std::string Str = getSpelling(StrTok, &Invalid); 1536 if (!Invalid) 1537 Callbacks->Ident(Tok.getLocation(), Str); 1538 } 1539 } 1540 1541 /// Handle a #public directive. 1542 void Preprocessor::HandleMacroPublicDirective(Token &Tok) { 1543 Token MacroNameTok; 1544 ReadMacroName(MacroNameTok, MU_Undef); 1545 1546 // Error reading macro name? If so, diagnostic already issued. 1547 if (MacroNameTok.is(tok::eod)) 1548 return; 1549 1550 // Check to see if this is the last token on the #__public_macro line. 1551 CheckEndOfDirective("__public_macro"); 1552 1553 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1554 // Okay, we finally have a valid identifier to undef. 1555 MacroDirective *MD = getLocalMacroDirective(II); 1556 1557 // If the macro is not defined, this is an error. 1558 if (!MD) { 1559 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1560 return; 1561 } 1562 1563 // Note that this macro has now been exported. 1564 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1565 MacroNameTok.getLocation(), /*isPublic=*/true)); 1566 } 1567 1568 /// Handle a #private directive. 1569 void Preprocessor::HandleMacroPrivateDirective() { 1570 Token MacroNameTok; 1571 ReadMacroName(MacroNameTok, MU_Undef); 1572 1573 // Error reading macro name? If so, diagnostic already issued. 1574 if (MacroNameTok.is(tok::eod)) 1575 return; 1576 1577 // Check to see if this is the last token on the #__private_macro line. 1578 CheckEndOfDirective("__private_macro"); 1579 1580 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1581 // Okay, we finally have a valid identifier to undef. 1582 MacroDirective *MD = getLocalMacroDirective(II); 1583 1584 // If the macro is not defined, this is an error. 1585 if (!MD) { 1586 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1587 return; 1588 } 1589 1590 // Note that this macro has now been marked private. 1591 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1592 MacroNameTok.getLocation(), /*isPublic=*/false)); 1593 } 1594 1595 //===----------------------------------------------------------------------===// 1596 // Preprocessor Include Directive Handling. 1597 //===----------------------------------------------------------------------===// 1598 1599 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully 1600 /// checked and spelled filename, e.g. as an operand of \#include. This returns 1601 /// true if the input filename was in <>'s or false if it were in ""'s. The 1602 /// caller is expected to provide a buffer that is large enough to hold the 1603 /// spelling of the filename, but is also expected to handle the case when 1604 /// this method decides to use a different buffer. 1605 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, 1606 StringRef &Buffer) { 1607 // Get the text form of the filename. 1608 assert(!Buffer.empty() && "Can't have tokens with empty spellings!"); 1609 1610 // FIXME: Consider warning on some of the cases described in C11 6.4.7/3 and 1611 // C++20 [lex.header]/2: 1612 // 1613 // If `"`, `'`, `\`, `/*`, or `//` appears in a header-name, then 1614 // in C: behavior is undefined 1615 // in C++: program is conditionally-supported with implementation-defined 1616 // semantics 1617 1618 // Make sure the filename is <x> or "x". 1619 bool isAngled; 1620 if (Buffer[0] == '<') { 1621 if (Buffer.back() != '>') { 1622 Diag(Loc, diag::err_pp_expects_filename); 1623 Buffer = StringRef(); 1624 return true; 1625 } 1626 isAngled = true; 1627 } else if (Buffer[0] == '"') { 1628 if (Buffer.back() != '"') { 1629 Diag(Loc, diag::err_pp_expects_filename); 1630 Buffer = StringRef(); 1631 return true; 1632 } 1633 isAngled = false; 1634 } else { 1635 Diag(Loc, diag::err_pp_expects_filename); 1636 Buffer = StringRef(); 1637 return true; 1638 } 1639 1640 // Diagnose #include "" as invalid. 1641 if (Buffer.size() <= 2) { 1642 Diag(Loc, diag::err_pp_empty_filename); 1643 Buffer = StringRef(); 1644 return true; 1645 } 1646 1647 // Skip the brackets. 1648 Buffer = Buffer.substr(1, Buffer.size()-2); 1649 return isAngled; 1650 } 1651 1652 /// Push a token onto the token stream containing an annotation. 1653 void Preprocessor::EnterAnnotationToken(SourceRange Range, 1654 tok::TokenKind Kind, 1655 void *AnnotationVal) { 1656 // FIXME: Produce this as the current token directly, rather than 1657 // allocating a new token for it. 1658 auto Tok = std::make_unique<Token[]>(1); 1659 Tok[0].startToken(); 1660 Tok[0].setKind(Kind); 1661 Tok[0].setLocation(Range.getBegin()); 1662 Tok[0].setAnnotationEndLoc(Range.getEnd()); 1663 Tok[0].setAnnotationValue(AnnotationVal); 1664 EnterTokenStream(std::move(Tok), 1, true, /*IsReinject*/ false); 1665 } 1666 1667 /// Produce a diagnostic informing the user that a #include or similar 1668 /// was implicitly treated as a module import. 1669 static void diagnoseAutoModuleImport( 1670 Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, 1671 ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, 1672 SourceLocation PathEnd) { 1673 StringRef ImportKeyword; 1674 if (PP.getLangOpts().ObjC) 1675 ImportKeyword = "@import"; 1676 else if (PP.getLangOpts().ModulesTS || PP.getLangOpts().CPlusPlusModules) 1677 ImportKeyword = "import"; 1678 else 1679 return; // no import syntax available 1680 1681 SmallString<128> PathString; 1682 for (size_t I = 0, N = Path.size(); I != N; ++I) { 1683 if (I) 1684 PathString += '.'; 1685 PathString += Path[I].first->getName(); 1686 } 1687 int IncludeKind = 0; 1688 1689 switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) { 1690 case tok::pp_include: 1691 IncludeKind = 0; 1692 break; 1693 1694 case tok::pp_import: 1695 IncludeKind = 1; 1696 break; 1697 1698 case tok::pp_include_next: 1699 IncludeKind = 2; 1700 break; 1701 1702 case tok::pp___include_macros: 1703 IncludeKind = 3; 1704 break; 1705 1706 default: 1707 llvm_unreachable("unknown include directive kind"); 1708 } 1709 1710 CharSourceRange ReplaceRange(SourceRange(HashLoc, PathEnd), 1711 /*IsTokenRange=*/false); 1712 PP.Diag(HashLoc, diag::warn_auto_module_import) 1713 << IncludeKind << PathString 1714 << FixItHint::CreateReplacement( 1715 ReplaceRange, (ImportKeyword + " " + PathString + ";").str()); 1716 } 1717 1718 // Given a vector of path components and a string containing the real 1719 // path to the file, build a properly-cased replacement in the vector, 1720 // and return true if the replacement should be suggested. 1721 static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components, 1722 StringRef RealPathName) { 1723 auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName); 1724 auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName); 1725 int Cnt = 0; 1726 bool SuggestReplacement = false; 1727 // Below is a best-effort to handle ".." in paths. It is admittedly 1728 // not 100% correct in the presence of symlinks. 1729 for (auto &Component : llvm::reverse(Components)) { 1730 if ("." == Component) { 1731 } else if (".." == Component) { 1732 ++Cnt; 1733 } else if (Cnt) { 1734 --Cnt; 1735 } else if (RealPathComponentIter != RealPathComponentEnd) { 1736 if (Component != *RealPathComponentIter) { 1737 // If these path components differ by more than just case, then we 1738 // may be looking at symlinked paths. Bail on this diagnostic to avoid 1739 // noisy false positives. 1740 SuggestReplacement = 1741 RealPathComponentIter->equals_insensitive(Component); 1742 if (!SuggestReplacement) 1743 break; 1744 Component = *RealPathComponentIter; 1745 } 1746 ++RealPathComponentIter; 1747 } 1748 } 1749 return SuggestReplacement; 1750 } 1751 1752 bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, 1753 const TargetInfo &TargetInfo, 1754 DiagnosticsEngine &Diags, Module *M) { 1755 Module::Requirement Requirement; 1756 Module::UnresolvedHeaderDirective MissingHeader; 1757 Module *ShadowingModule = nullptr; 1758 if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader, 1759 ShadowingModule)) 1760 return false; 1761 1762 if (MissingHeader.FileNameLoc.isValid()) { 1763 Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) 1764 << MissingHeader.IsUmbrella << MissingHeader.FileName; 1765 } else if (ShadowingModule) { 1766 Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name; 1767 Diags.Report(ShadowingModule->DefinitionLoc, 1768 diag::note_previous_definition); 1769 } else { 1770 // FIXME: Track the location at which the requirement was specified, and 1771 // use it here. 1772 Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) 1773 << M->getFullModuleName() << Requirement.second << Requirement.first; 1774 } 1775 return true; 1776 } 1777 1778 /// HandleIncludeDirective - The "\#include" tokens have just been read, read 1779 /// the file to be included from the lexer, then include it! This is a common 1780 /// routine with functionality shared between \#include, \#include_next and 1781 /// \#import. LookupFrom is set when this is a \#include_next directive, it 1782 /// specifies the file to start searching from. 1783 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, 1784 Token &IncludeTok, 1785 const DirectoryLookup *LookupFrom, 1786 const FileEntry *LookupFromFile) { 1787 Token FilenameTok; 1788 if (LexHeaderName(FilenameTok)) 1789 return; 1790 1791 if (FilenameTok.isNot(tok::header_name)) { 1792 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename); 1793 if (FilenameTok.isNot(tok::eod)) 1794 DiscardUntilEndOfDirective(); 1795 return; 1796 } 1797 1798 // Verify that there is nothing after the filename, other than EOD. Note 1799 // that we allow macros that expand to nothing after the filename, because 1800 // this falls into the category of "#include pp-tokens new-line" specified 1801 // in C99 6.10.2p4. 1802 SourceLocation EndLoc = 1803 CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true); 1804 1805 auto Action = HandleHeaderIncludeOrImport(HashLoc, IncludeTok, FilenameTok, 1806 EndLoc, LookupFrom, LookupFromFile); 1807 switch (Action.Kind) { 1808 case ImportAction::None: 1809 case ImportAction::SkippedModuleImport: 1810 break; 1811 case ImportAction::ModuleBegin: 1812 EnterAnnotationToken(SourceRange(HashLoc, EndLoc), 1813 tok::annot_module_begin, Action.ModuleForHeader); 1814 break; 1815 case ImportAction::ModuleImport: 1816 EnterAnnotationToken(SourceRange(HashLoc, EndLoc), 1817 tok::annot_module_include, Action.ModuleForHeader); 1818 break; 1819 case ImportAction::Failure: 1820 assert(TheModuleLoader.HadFatalFailure && 1821 "This should be an early exit only to a fatal error"); 1822 TheModuleLoader.HadFatalFailure = true; 1823 IncludeTok.setKind(tok::eof); 1824 CurLexer->cutOffLexing(); 1825 return; 1826 } 1827 } 1828 1829 Optional<FileEntryRef> Preprocessor::LookupHeaderIncludeOrImport( 1830 const DirectoryLookup *&CurDir, StringRef& Filename, 1831 SourceLocation FilenameLoc, CharSourceRange FilenameRange, 1832 const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, 1833 bool &IsMapped, const DirectoryLookup *LookupFrom, 1834 const FileEntry *LookupFromFile, StringRef& LookupFilename, 1835 SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, 1836 ModuleMap::KnownHeader &SuggestedModule, bool isAngled) { 1837 Optional<FileEntryRef> File = LookupFile( 1838 FilenameLoc, LookupFilename, 1839 isAngled, LookupFrom, LookupFromFile, CurDir, 1840 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1841 &SuggestedModule, &IsMapped, &IsFrameworkFound); 1842 if (File) 1843 return File; 1844 1845 if (Callbacks) { 1846 // Give the clients a chance to recover. 1847 SmallString<128> RecoveryPath; 1848 if (Callbacks->FileNotFound(Filename, RecoveryPath)) { 1849 if (auto DE = FileMgr.getOptionalDirectoryRef(RecoveryPath)) { 1850 // Add the recovery path to the list of search paths. 1851 DirectoryLookup DL(*DE, SrcMgr::C_User, false); 1852 HeaderInfo.AddSearchPath(DL, isAngled); 1853 1854 // Try the lookup again, skipping the cache. 1855 Optional<FileEntryRef> File = LookupFile( 1856 FilenameLoc, 1857 LookupFilename, isAngled, 1858 LookupFrom, LookupFromFile, CurDir, nullptr, nullptr, 1859 &SuggestedModule, &IsMapped, /*IsFrameworkFound=*/nullptr, 1860 /*SkipCache*/ true); 1861 if (File) 1862 return File; 1863 } 1864 } 1865 } 1866 1867 if (SuppressIncludeNotFoundError) 1868 return None; 1869 1870 // If the file could not be located and it was included via angle 1871 // brackets, we can attempt a lookup as though it were a quoted path to 1872 // provide the user with a possible fixit. 1873 if (isAngled) { 1874 Optional<FileEntryRef> File = LookupFile( 1875 FilenameLoc, LookupFilename, 1876 false, LookupFrom, LookupFromFile, CurDir, 1877 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1878 &SuggestedModule, &IsMapped, 1879 /*IsFrameworkFound=*/nullptr); 1880 if (File) { 1881 Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) 1882 << Filename << IsImportDecl 1883 << FixItHint::CreateReplacement(FilenameRange, 1884 "\"" + Filename.str() + "\""); 1885 return File; 1886 } 1887 } 1888 1889 // Check for likely typos due to leading or trailing non-isAlphanumeric 1890 // characters 1891 StringRef OriginalFilename = Filename; 1892 if (LangOpts.SpellChecking) { 1893 // A heuristic to correct a typo file name by removing leading and 1894 // trailing non-isAlphanumeric characters. 1895 auto CorrectTypoFilename = [](llvm::StringRef Filename) { 1896 Filename = Filename.drop_until(isAlphanumeric); 1897 while (!Filename.empty() && !isAlphanumeric(Filename.back())) { 1898 Filename = Filename.drop_back(); 1899 } 1900 return Filename; 1901 }; 1902 StringRef TypoCorrectionName = CorrectTypoFilename(Filename); 1903 StringRef TypoCorrectionLookupName = CorrectTypoFilename(LookupFilename); 1904 1905 Optional<FileEntryRef> File = LookupFile( 1906 FilenameLoc, TypoCorrectionLookupName, isAngled, LookupFrom, LookupFromFile, 1907 CurDir, Callbacks ? &SearchPath : nullptr, 1908 Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped, 1909 /*IsFrameworkFound=*/nullptr); 1910 if (File) { 1911 auto Hint = 1912 isAngled ? FixItHint::CreateReplacement( 1913 FilenameRange, "<" + TypoCorrectionName.str() + ">") 1914 : FixItHint::CreateReplacement( 1915 FilenameRange, "\"" + TypoCorrectionName.str() + "\""); 1916 Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal) 1917 << OriginalFilename << TypoCorrectionName << Hint; 1918 // We found the file, so set the Filename to the name after typo 1919 // correction. 1920 Filename = TypoCorrectionName; 1921 LookupFilename = TypoCorrectionLookupName; 1922 return File; 1923 } 1924 } 1925 1926 // If the file is still not found, just go with the vanilla diagnostic 1927 assert(!File.hasValue() && "expected missing file"); 1928 Diag(FilenameTok, diag::err_pp_file_not_found) 1929 << OriginalFilename << FilenameRange; 1930 if (IsFrameworkFound) { 1931 size_t SlashPos = OriginalFilename.find('/'); 1932 assert(SlashPos != StringRef::npos && 1933 "Include with framework name should have '/' in the filename"); 1934 StringRef FrameworkName = OriginalFilename.substr(0, SlashPos); 1935 FrameworkCacheEntry &CacheEntry = 1936 HeaderInfo.LookupFrameworkCache(FrameworkName); 1937 assert(CacheEntry.Directory && "Found framework should be in cache"); 1938 Diag(FilenameTok, diag::note_pp_framework_without_header) 1939 << OriginalFilename.substr(SlashPos + 1) << FrameworkName 1940 << CacheEntry.Directory->getName(); 1941 } 1942 1943 return None; 1944 } 1945 1946 /// Handle either a #include-like directive or an import declaration that names 1947 /// a header file. 1948 /// 1949 /// \param HashLoc The location of the '#' token for an include, or 1950 /// SourceLocation() for an import declaration. 1951 /// \param IncludeTok The include / include_next / import token. 1952 /// \param FilenameTok The header-name token. 1953 /// \param EndLoc The location at which any imported macros become visible. 1954 /// \param LookupFrom For #include_next, the starting directory for the 1955 /// directory lookup. 1956 /// \param LookupFromFile For #include_next, the starting file for the directory 1957 /// lookup. 1958 Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport( 1959 SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, 1960 SourceLocation EndLoc, const DirectoryLookup *LookupFrom, 1961 const FileEntry *LookupFromFile) { 1962 SmallString<128> FilenameBuffer; 1963 StringRef Filename = getSpelling(FilenameTok, FilenameBuffer); 1964 SourceLocation CharEnd = FilenameTok.getEndLoc(); 1965 1966 CharSourceRange FilenameRange 1967 = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd); 1968 StringRef OriginalFilename = Filename; 1969 bool isAngled = 1970 GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename); 1971 1972 // If GetIncludeFilenameSpelling set the start ptr to null, there was an 1973 // error. 1974 if (Filename.empty()) 1975 return {ImportAction::None}; 1976 1977 bool IsImportDecl = HashLoc.isInvalid(); 1978 SourceLocation StartLoc = IsImportDecl ? IncludeTok.getLocation() : HashLoc; 1979 1980 // Complain about attempts to #include files in an audit pragma. 1981 if (PragmaARCCFCodeAuditedInfo.second.isValid()) { 1982 Diag(StartLoc, diag::err_pp_include_in_arc_cf_code_audited) << IsImportDecl; 1983 Diag(PragmaARCCFCodeAuditedInfo.second, diag::note_pragma_entered_here); 1984 1985 // Immediately leave the pragma. 1986 PragmaARCCFCodeAuditedInfo = {nullptr, SourceLocation()}; 1987 } 1988 1989 // Complain about attempts to #include files in an assume-nonnull pragma. 1990 if (PragmaAssumeNonNullLoc.isValid()) { 1991 Diag(StartLoc, diag::err_pp_include_in_assume_nonnull) << IsImportDecl; 1992 Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here); 1993 1994 // Immediately leave the pragma. 1995 PragmaAssumeNonNullLoc = SourceLocation(); 1996 } 1997 1998 if (HeaderInfo.HasIncludeAliasMap()) { 1999 // Map the filename with the brackets still attached. If the name doesn't 2000 // map to anything, fall back on the filename we've already gotten the 2001 // spelling for. 2002 StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename); 2003 if (!NewName.empty()) 2004 Filename = NewName; 2005 } 2006 2007 // Search include directories. 2008 bool IsMapped = false; 2009 bool IsFrameworkFound = false; 2010 const DirectoryLookup *CurDir; 2011 SmallString<1024> SearchPath; 2012 SmallString<1024> RelativePath; 2013 // We get the raw path only if we have 'Callbacks' to which we later pass 2014 // the path. 2015 ModuleMap::KnownHeader SuggestedModule; 2016 SourceLocation FilenameLoc = FilenameTok.getLocation(); 2017 StringRef LookupFilename = Filename; 2018 2019 // Normalize slashes when compiling with -fms-extensions on non-Windows. This 2020 // is unnecessary on Windows since the filesystem there handles backslashes. 2021 SmallString<128> NormalizedPath; 2022 llvm::sys::path::Style BackslashStyle = llvm::sys::path::Style::native; 2023 if (is_style_posix(BackslashStyle) && LangOpts.MicrosoftExt) { 2024 NormalizedPath = Filename.str(); 2025 llvm::sys::path::native(NormalizedPath); 2026 LookupFilename = NormalizedPath; 2027 BackslashStyle = llvm::sys::path::Style::windows; 2028 } 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 bool IsFirstIncludeOfFile = false; 2147 2148 // Ask HeaderInfo if we should enter this #include file. If not, #including 2149 // this file will have no effect. 2150 if (Action == Enter && File && 2151 !HeaderInfo.ShouldEnterIncludeFile( 2152 *this, &File->getFileEntry(), EnterOnce, getLangOpts().Modules, 2153 SuggestedModule.getModule(), IsFirstIncludeOfFile)) { 2154 // Even if we've already preprocessed this header once and know that we 2155 // don't need to see its contents again, we still need to import it if it's 2156 // modular because we might not have imported it from this submodule before. 2157 // 2158 // FIXME: We don't do this when compiling a PCH because the AST 2159 // serialization layer can't cope with it. This means we get local 2160 // submodule visibility semantics wrong in that case. 2161 Action = (SuggestedModule && !getLangOpts().CompilingPCH) ? Import : Skip; 2162 } 2163 2164 // Check for circular inclusion of the main file. 2165 // We can't generate a consistent preamble with regard to the conditional 2166 // stack if the main file is included again as due to the preamble bounds 2167 // some directives (e.g. #endif of a header guard) will never be seen. 2168 // Since this will lead to confusing errors, avoid the inclusion. 2169 if (Action == Enter && File && PreambleConditionalStack.isRecording() && 2170 SourceMgr.isMainFile(File->getFileEntry())) { 2171 Diag(FilenameTok.getLocation(), 2172 diag::err_pp_including_mainfile_in_preamble); 2173 return {ImportAction::None}; 2174 } 2175 2176 if (Callbacks && !IsImportDecl) { 2177 // Notify the callback object that we've seen an inclusion directive. 2178 // FIXME: Use a different callback for a pp-import? 2179 Callbacks->InclusionDirective( 2180 HashLoc, IncludeTok, LookupFilename, isAngled, FilenameRange, 2181 File ? &File->getFileEntry() : nullptr, SearchPath, RelativePath, 2182 Action == Import ? SuggestedModule.getModule() : nullptr, 2183 FileCharacter); 2184 if (Action == Skip && File) 2185 Callbacks->FileSkipped(*File, FilenameTok, FileCharacter); 2186 } 2187 2188 if (!File) 2189 return {ImportAction::None}; 2190 2191 // If this is a C++20 pp-import declaration, diagnose if we didn't find any 2192 // module corresponding to the named header. 2193 if (IsImportDecl && !SuggestedModule) { 2194 Diag(FilenameTok, diag::err_header_import_not_header_unit) 2195 << OriginalFilename << File->getName(); 2196 return {ImportAction::None}; 2197 } 2198 2199 // Issue a diagnostic if the name of the file on disk has a different case 2200 // than the one we're about to open. 2201 const bool CheckIncludePathPortability = 2202 !IsMapped && !File->getFileEntry().tryGetRealPathName().empty(); 2203 2204 if (CheckIncludePathPortability) { 2205 StringRef Name = LookupFilename; 2206 StringRef NameWithoriginalSlashes = Filename; 2207 #if defined(_WIN32) 2208 // Skip UNC prefix if present. (tryGetRealPathName() always 2209 // returns a path with the prefix skipped.) 2210 bool NameWasUNC = Name.consume_front("\\\\?\\"); 2211 NameWithoriginalSlashes.consume_front("\\\\?\\"); 2212 #endif 2213 StringRef RealPathName = File->getFileEntry().tryGetRealPathName(); 2214 SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name), 2215 llvm::sys::path::end(Name)); 2216 #if defined(_WIN32) 2217 // -Wnonportable-include-path is designed to diagnose includes using 2218 // case even on systems with a case-insensitive file system. 2219 // On Windows, RealPathName always starts with an upper-case drive 2220 // letter for absolute paths, but Name might start with either 2221 // case depending on if `cd c:\foo` or `cd C:\foo` was used in the shell. 2222 // ("foo" will always have on-disk case, no matter which case was 2223 // used in the cd command). To not emit this warning solely for 2224 // the drive letter, whose case is dependent on if `cd` is used 2225 // with upper- or lower-case drive letters, always consider the 2226 // given drive letter case as correct for the purpose of this warning. 2227 SmallString<128> FixedDriveRealPath; 2228 if (llvm::sys::path::is_absolute(Name) && 2229 llvm::sys::path::is_absolute(RealPathName) && 2230 toLowercase(Name[0]) == toLowercase(RealPathName[0]) && 2231 isLowercase(Name[0]) != isLowercase(RealPathName[0])) { 2232 assert(Components.size() >= 3 && "should have drive, backslash, name"); 2233 assert(Components[0].size() == 2 && "should start with drive"); 2234 assert(Components[0][1] == ':' && "should have colon"); 2235 FixedDriveRealPath = (Name.substr(0, 1) + RealPathName.substr(1)).str(); 2236 RealPathName = FixedDriveRealPath; 2237 } 2238 #endif 2239 2240 if (trySimplifyPath(Components, RealPathName)) { 2241 SmallString<128> Path; 2242 Path.reserve(Name.size()+2); 2243 Path.push_back(isAngled ? '<' : '"'); 2244 2245 const auto IsSep = [BackslashStyle](char c) { 2246 return llvm::sys::path::is_separator(c, BackslashStyle); 2247 }; 2248 2249 for (auto Component : Components) { 2250 // On POSIX, Components will contain a single '/' as first element 2251 // exactly if Name is an absolute path. 2252 // On Windows, it will contain "C:" followed by '\' for absolute paths. 2253 // The drive letter is optional for absolute paths on Windows, but 2254 // clang currently cannot process absolute paths in #include lines that 2255 // don't have a drive. 2256 // If the first entry in Components is a directory separator, 2257 // then the code at the bottom of this loop that keeps the original 2258 // directory separator style copies it. If the second entry is 2259 // a directory separator (the C:\ case), then that separator already 2260 // got copied when the C: was processed and we want to skip that entry. 2261 if (!(Component.size() == 1 && IsSep(Component[0]))) 2262 Path.append(Component); 2263 else if (!Path.empty()) 2264 continue; 2265 2266 // Append the separator(s) the user used, or the close quote 2267 if (Path.size() > NameWithoriginalSlashes.size()) { 2268 Path.push_back(isAngled ? '>' : '"'); 2269 continue; 2270 } 2271 assert(IsSep(NameWithoriginalSlashes[Path.size()-1])); 2272 do 2273 Path.push_back(NameWithoriginalSlashes[Path.size()-1]); 2274 while (Path.size() <= NameWithoriginalSlashes.size() && 2275 IsSep(NameWithoriginalSlashes[Path.size()-1])); 2276 } 2277 2278 #if defined(_WIN32) 2279 // Restore UNC prefix if it was there. 2280 if (NameWasUNC) 2281 Path = (Path.substr(0, 1) + "\\\\?\\" + Path.substr(1)).str(); 2282 #endif 2283 2284 // For user files and known standard headers, issue a diagnostic. 2285 // For other system headers, don't. They can be controlled separately. 2286 auto DiagId = 2287 (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) 2288 ? diag::pp_nonportable_path 2289 : diag::pp_nonportable_system_path; 2290 Diag(FilenameTok, DiagId) << Path << 2291 FixItHint::CreateReplacement(FilenameRange, Path); 2292 } 2293 } 2294 2295 switch (Action) { 2296 case Skip: 2297 // If we don't need to enter the file, stop now. 2298 if (Module *M = SuggestedModule.getModule()) 2299 return {ImportAction::SkippedModuleImport, M}; 2300 return {ImportAction::None}; 2301 2302 case IncludeLimitReached: 2303 // If we reached our include limit and don't want to enter any more files, 2304 // don't go any further. 2305 return {ImportAction::None}; 2306 2307 case Import: { 2308 // If this is a module import, make it visible if needed. 2309 Module *M = SuggestedModule.getModule(); 2310 assert(M && "no module to import"); 2311 2312 makeModuleVisible(M, EndLoc); 2313 2314 if (IncludeTok.getIdentifierInfo()->getPPKeywordID() == 2315 tok::pp___include_macros) 2316 return {ImportAction::None}; 2317 2318 return {ImportAction::ModuleImport, M}; 2319 } 2320 2321 case Enter: 2322 break; 2323 } 2324 2325 // Check that we don't have infinite #include recursion. 2326 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) { 2327 Diag(FilenameTok, diag::err_pp_include_too_deep); 2328 HasReachedMaxIncludeDepth = true; 2329 return {ImportAction::None}; 2330 } 2331 2332 // Look up the file, create a File ID for it. 2333 SourceLocation IncludePos = FilenameTok.getLocation(); 2334 // If the filename string was the result of macro expansions, set the include 2335 // position on the file where it will be included and after the expansions. 2336 if (IncludePos.isMacroID()) 2337 IncludePos = SourceMgr.getExpansionRange(IncludePos).getEnd(); 2338 FileID FID = SourceMgr.createFileID(*File, IncludePos, FileCharacter); 2339 if (!FID.isValid()) { 2340 TheModuleLoader.HadFatalFailure = true; 2341 return ImportAction::Failure; 2342 } 2343 2344 // If all is good, enter the new file! 2345 if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation(), 2346 IsFirstIncludeOfFile)) 2347 return {ImportAction::None}; 2348 2349 // Determine if we're switching to building a new submodule, and which one. 2350 if (auto *M = SuggestedModule.getModule()) { 2351 if (M->getTopLevelModule()->ShadowingModule) { 2352 // We are building a submodule that belongs to a shadowed module. This 2353 // means we find header files in the shadowed module. 2354 Diag(M->DefinitionLoc, diag::err_module_build_shadowed_submodule) 2355 << M->getFullModuleName(); 2356 Diag(M->getTopLevelModule()->ShadowingModule->DefinitionLoc, 2357 diag::note_previous_definition); 2358 return {ImportAction::None}; 2359 } 2360 // When building a pch, -fmodule-name tells the compiler to textually 2361 // include headers in the specified module. We are not building the 2362 // specified module. 2363 // 2364 // FIXME: This is the wrong way to handle this. We should produce a PCH 2365 // that behaves the same as the header would behave in a compilation using 2366 // that PCH, which means we should enter the submodule. We need to teach 2367 // the AST serialization layer to deal with the resulting AST. 2368 if (getLangOpts().CompilingPCH && 2369 isForModuleBuilding(M, getLangOpts().CurrentModule, 2370 getLangOpts().ModuleName)) 2371 return {ImportAction::None}; 2372 2373 assert(!CurLexerSubmodule && "should not have marked this as a module yet"); 2374 CurLexerSubmodule = M; 2375 2376 // Let the macro handling code know that any future macros are within 2377 // the new submodule. 2378 EnterSubmodule(M, EndLoc, /*ForPragma*/false); 2379 2380 // Let the parser know that any future declarations are within the new 2381 // submodule. 2382 // FIXME: There's no point doing this if we're handling a #__include_macros 2383 // directive. 2384 return {ImportAction::ModuleBegin, M}; 2385 } 2386 2387 assert(!IsImportDecl && "failed to diagnose missing module for import decl"); 2388 return {ImportAction::None}; 2389 } 2390 2391 /// HandleIncludeNextDirective - Implements \#include_next. 2392 /// 2393 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, 2394 Token &IncludeNextTok) { 2395 Diag(IncludeNextTok, diag::ext_pp_include_next_directive); 2396 2397 // #include_next is like #include, except that we start searching after 2398 // the current found directory. If we can't do this, issue a 2399 // diagnostic. 2400 const DirectoryLookup *Lookup = CurDirLookup; 2401 const FileEntry *LookupFromFile = nullptr; 2402 if (isInPrimaryFile() && LangOpts.IsHeaderFile) { 2403 // If the main file is a header, then it's either for PCH/AST generation, 2404 // or libclang opened it. Either way, handle it as a normal include below 2405 // and do not complain about include_next. 2406 } else if (isInPrimaryFile()) { 2407 Lookup = nullptr; 2408 Diag(IncludeNextTok, diag::pp_include_next_in_primary); 2409 } else if (CurLexerSubmodule) { 2410 // Start looking up in the directory *after* the one in which the current 2411 // file would be found, if any. 2412 assert(CurPPLexer && "#include_next directive in macro?"); 2413 LookupFromFile = CurPPLexer->getFileEntry(); 2414 Lookup = nullptr; 2415 } else if (!Lookup) { 2416 // The current file was not found by walking the include path. Either it 2417 // is the primary file (handled above), or it was found by absolute path, 2418 // or it was found relative to such a file. 2419 // FIXME: Track enough information so we know which case we're in. 2420 Diag(IncludeNextTok, diag::pp_include_next_absolute_path); 2421 } else { 2422 // Start looking up in the next directory. 2423 ++Lookup; 2424 } 2425 2426 return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup, 2427 LookupFromFile); 2428 } 2429 2430 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode 2431 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) { 2432 // The Microsoft #import directive takes a type library and generates header 2433 // files from it, and includes those. This is beyond the scope of what clang 2434 // does, so we ignore it and error out. However, #import can optionally have 2435 // trailing attributes that span multiple lines. We're going to eat those 2436 // so we can continue processing from there. 2437 Diag(Tok, diag::err_pp_import_directive_ms ); 2438 2439 // Read tokens until we get to the end of the directive. Note that the 2440 // directive can be split over multiple lines using the backslash character. 2441 DiscardUntilEndOfDirective(); 2442 } 2443 2444 /// HandleImportDirective - Implements \#import. 2445 /// 2446 void Preprocessor::HandleImportDirective(SourceLocation HashLoc, 2447 Token &ImportTok) { 2448 if (!LangOpts.ObjC) { // #import is standard for ObjC. 2449 if (LangOpts.MSVCCompat) 2450 return HandleMicrosoftImportDirective(ImportTok); 2451 Diag(ImportTok, diag::ext_pp_import_directive); 2452 } 2453 return HandleIncludeDirective(HashLoc, ImportTok); 2454 } 2455 2456 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a 2457 /// pseudo directive in the predefines buffer. This handles it by sucking all 2458 /// tokens through the preprocessor and discarding them (only keeping the side 2459 /// effects on the preprocessor). 2460 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, 2461 Token &IncludeMacrosTok) { 2462 // This directive should only occur in the predefines buffer. If not, emit an 2463 // error and reject it. 2464 SourceLocation Loc = IncludeMacrosTok.getLocation(); 2465 if (SourceMgr.getBufferName(Loc) != "<built-in>") { 2466 Diag(IncludeMacrosTok.getLocation(), 2467 diag::pp_include_macros_out_of_predefines); 2468 DiscardUntilEndOfDirective(); 2469 return; 2470 } 2471 2472 // Treat this as a normal #include for checking purposes. If this is 2473 // successful, it will push a new lexer onto the include stack. 2474 HandleIncludeDirective(HashLoc, IncludeMacrosTok); 2475 2476 Token TmpTok; 2477 do { 2478 Lex(TmpTok); 2479 assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!"); 2480 } while (TmpTok.isNot(tok::hashhash)); 2481 } 2482 2483 //===----------------------------------------------------------------------===// 2484 // Preprocessor Macro Directive Handling. 2485 //===----------------------------------------------------------------------===// 2486 2487 /// ReadMacroParameterList - The ( starting a parameter list of a macro 2488 /// definition has just been read. Lex the rest of the parameters and the 2489 /// closing ), updating MI with what we learn. Return true if an error occurs 2490 /// parsing the param list. 2491 bool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) { 2492 SmallVector<IdentifierInfo*, 32> Parameters; 2493 2494 while (true) { 2495 LexUnexpandedToken(Tok); 2496 switch (Tok.getKind()) { 2497 case tok::r_paren: 2498 // Found the end of the parameter list. 2499 if (Parameters.empty()) // #define FOO() 2500 return false; 2501 // Otherwise we have #define FOO(A,) 2502 Diag(Tok, diag::err_pp_expected_ident_in_arg_list); 2503 return true; 2504 case tok::ellipsis: // #define X(... -> C99 varargs 2505 if (!LangOpts.C99) 2506 Diag(Tok, LangOpts.CPlusPlus11 ? 2507 diag::warn_cxx98_compat_variadic_macro : 2508 diag::ext_variadic_macro); 2509 2510 // OpenCL v1.2 s6.9.e: variadic macros are not supported. 2511 if (LangOpts.OpenCL && !LangOpts.OpenCLCPlusPlus) { 2512 Diag(Tok, diag::ext_pp_opencl_variadic_macros); 2513 } 2514 2515 // Lex the token after the identifier. 2516 LexUnexpandedToken(Tok); 2517 if (Tok.isNot(tok::r_paren)) { 2518 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2519 return true; 2520 } 2521 // Add the __VA_ARGS__ identifier as a parameter. 2522 Parameters.push_back(Ident__VA_ARGS__); 2523 MI->setIsC99Varargs(); 2524 MI->setParameterList(Parameters, BP); 2525 return false; 2526 case tok::eod: // #define X( 2527 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2528 return true; 2529 default: 2530 // Handle keywords and identifiers here to accept things like 2531 // #define Foo(for) for. 2532 IdentifierInfo *II = Tok.getIdentifierInfo(); 2533 if (!II) { 2534 // #define X(1 2535 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list); 2536 return true; 2537 } 2538 2539 // If this is already used as a parameter, it is used multiple times (e.g. 2540 // #define X(A,A. 2541 if (llvm::is_contained(Parameters, II)) { // C99 6.10.3p6 2542 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II; 2543 return true; 2544 } 2545 2546 // Add the parameter to the macro info. 2547 Parameters.push_back(II); 2548 2549 // Lex the token after the identifier. 2550 LexUnexpandedToken(Tok); 2551 2552 switch (Tok.getKind()) { 2553 default: // #define X(A B 2554 Diag(Tok, diag::err_pp_expected_comma_in_arg_list); 2555 return true; 2556 case tok::r_paren: // #define X(A) 2557 MI->setParameterList(Parameters, BP); 2558 return false; 2559 case tok::comma: // #define X(A, 2560 break; 2561 case tok::ellipsis: // #define X(A... -> GCC extension 2562 // Diagnose extension. 2563 Diag(Tok, diag::ext_named_variadic_macro); 2564 2565 // Lex the token after the identifier. 2566 LexUnexpandedToken(Tok); 2567 if (Tok.isNot(tok::r_paren)) { 2568 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2569 return true; 2570 } 2571 2572 MI->setIsGNUVarargs(); 2573 MI->setParameterList(Parameters, BP); 2574 return false; 2575 } 2576 } 2577 } 2578 } 2579 2580 static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI, 2581 const LangOptions &LOptions) { 2582 if (MI->getNumTokens() == 1) { 2583 const Token &Value = MI->getReplacementToken(0); 2584 2585 // Macro that is identity, like '#define inline inline' is a valid pattern. 2586 if (MacroName.getKind() == Value.getKind()) 2587 return true; 2588 2589 // Macro that maps a keyword to the same keyword decorated with leading/ 2590 // trailing underscores is a valid pattern: 2591 // #define inline __inline 2592 // #define inline __inline__ 2593 // #define inline _inline (in MS compatibility mode) 2594 StringRef MacroText = MacroName.getIdentifierInfo()->getName(); 2595 if (IdentifierInfo *II = Value.getIdentifierInfo()) { 2596 if (!II->isKeyword(LOptions)) 2597 return false; 2598 StringRef ValueText = II->getName(); 2599 StringRef TrimmedValue = ValueText; 2600 if (!ValueText.startswith("__")) { 2601 if (ValueText.startswith("_")) 2602 TrimmedValue = TrimmedValue.drop_front(1); 2603 else 2604 return false; 2605 } else { 2606 TrimmedValue = TrimmedValue.drop_front(2); 2607 if (TrimmedValue.endswith("__")) 2608 TrimmedValue = TrimmedValue.drop_back(2); 2609 } 2610 return TrimmedValue.equals(MacroText); 2611 } else { 2612 return false; 2613 } 2614 } 2615 2616 // #define inline 2617 return MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static, 2618 tok::kw_const) && 2619 MI->getNumTokens() == 0; 2620 } 2621 2622 // ReadOptionalMacroParameterListAndBody - This consumes all (i.e. the 2623 // entire line) of the macro's tokens and adds them to MacroInfo, and while 2624 // doing so performs certain validity checks including (but not limited to): 2625 // - # (stringization) is followed by a macro parameter 2626 // 2627 // Returns a nullptr if an invalid sequence of tokens is encountered or returns 2628 // a pointer to a MacroInfo object. 2629 2630 MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody( 2631 const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) { 2632 2633 Token LastTok = MacroNameTok; 2634 // Create the new macro. 2635 MacroInfo *const MI = AllocateMacroInfo(MacroNameTok.getLocation()); 2636 2637 Token Tok; 2638 LexUnexpandedToken(Tok); 2639 2640 // Ensure we consume the rest of the macro body if errors occur. 2641 auto _ = llvm::make_scope_exit([&]() { 2642 // The flag indicates if we are still waiting for 'eod'. 2643 if (CurLexer->ParsingPreprocessorDirective) 2644 DiscardUntilEndOfDirective(); 2645 }); 2646 2647 // Used to un-poison and then re-poison identifiers of the __VA_ARGS__ ilk 2648 // within their appropriate context. 2649 VariadicMacroScopeGuard VariadicMacroScopeGuard(*this); 2650 2651 // If this is a function-like macro definition, parse the argument list, 2652 // marking each of the identifiers as being used as macro arguments. Also, 2653 // check other constraints on the first token of the macro body. 2654 if (Tok.is(tok::eod)) { 2655 if (ImmediatelyAfterHeaderGuard) { 2656 // Save this macro information since it may part of a header guard. 2657 CurPPLexer->MIOpt.SetDefinedMacro(MacroNameTok.getIdentifierInfo(), 2658 MacroNameTok.getLocation()); 2659 } 2660 // If there is no body to this macro, we have no special handling here. 2661 } else if (Tok.hasLeadingSpace()) { 2662 // This is a normal token with leading space. Clear the leading space 2663 // marker on the first token to get proper expansion. 2664 Tok.clearFlag(Token::LeadingSpace); 2665 } else if (Tok.is(tok::l_paren)) { 2666 // This is a function-like macro definition. Read the argument list. 2667 MI->setIsFunctionLike(); 2668 if (ReadMacroParameterList(MI, LastTok)) 2669 return nullptr; 2670 2671 // If this is a definition of an ISO C/C++ variadic function-like macro (not 2672 // using the GNU named varargs extension) inform our variadic scope guard 2673 // which un-poisons and re-poisons certain identifiers (e.g. __VA_ARGS__) 2674 // allowed only within the definition of a variadic macro. 2675 2676 if (MI->isC99Varargs()) { 2677 VariadicMacroScopeGuard.enterScope(); 2678 } 2679 2680 // Read the first token after the arg list for down below. 2681 LexUnexpandedToken(Tok); 2682 } else if (LangOpts.C99 || LangOpts.CPlusPlus11) { 2683 // C99 requires whitespace between the macro definition and the body. Emit 2684 // a diagnostic for something like "#define X+". 2685 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name); 2686 } else { 2687 // C90 6.8 TC1 says: "In the definition of an object-like macro, if the 2688 // first character of a replacement list is not a character required by 2689 // subclause 5.2.1, then there shall be white-space separation between the 2690 // identifier and the replacement list.". 5.2.1 lists this set: 2691 // "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which 2692 // is irrelevant here. 2693 bool isInvalid = false; 2694 if (Tok.is(tok::at)) // @ is not in the list above. 2695 isInvalid = true; 2696 else if (Tok.is(tok::unknown)) { 2697 // If we have an unknown token, it is something strange like "`". Since 2698 // all of valid characters would have lexed into a single character 2699 // token of some sort, we know this is not a valid case. 2700 isInvalid = true; 2701 } 2702 if (isInvalid) 2703 Diag(Tok, diag::ext_missing_whitespace_after_macro_name); 2704 else 2705 Diag(Tok, diag::warn_missing_whitespace_after_macro_name); 2706 } 2707 2708 if (!Tok.is(tok::eod)) 2709 LastTok = Tok; 2710 2711 // Read the rest of the macro body. 2712 if (MI->isObjectLike()) { 2713 // Object-like macros are very simple, just read their body. 2714 while (Tok.isNot(tok::eod)) { 2715 LastTok = Tok; 2716 MI->AddTokenToBody(Tok); 2717 // Get the next token of the macro. 2718 LexUnexpandedToken(Tok); 2719 } 2720 } else { 2721 // Otherwise, read the body of a function-like macro. While we are at it, 2722 // check C99 6.10.3.2p1: ensure that # operators are followed by macro 2723 // parameters in function-like macro expansions. 2724 2725 VAOptDefinitionContext VAOCtx(*this); 2726 2727 while (Tok.isNot(tok::eod)) { 2728 LastTok = Tok; 2729 2730 if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) { 2731 MI->AddTokenToBody(Tok); 2732 2733 if (VAOCtx.isVAOptToken(Tok)) { 2734 // If we're already within a VAOPT, emit an error. 2735 if (VAOCtx.isInVAOpt()) { 2736 Diag(Tok, diag::err_pp_vaopt_nested_use); 2737 return nullptr; 2738 } 2739 // Ensure VAOPT is followed by a '(' . 2740 LexUnexpandedToken(Tok); 2741 if (Tok.isNot(tok::l_paren)) { 2742 Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use); 2743 return nullptr; 2744 } 2745 MI->AddTokenToBody(Tok); 2746 VAOCtx.sawVAOptFollowedByOpeningParens(Tok.getLocation()); 2747 LexUnexpandedToken(Tok); 2748 if (Tok.is(tok::hashhash)) { 2749 Diag(Tok, diag::err_vaopt_paste_at_start); 2750 return nullptr; 2751 } 2752 continue; 2753 } else if (VAOCtx.isInVAOpt()) { 2754 if (Tok.is(tok::r_paren)) { 2755 if (VAOCtx.sawClosingParen()) { 2756 const unsigned NumTokens = MI->getNumTokens(); 2757 assert(NumTokens >= 3 && "Must have seen at least __VA_OPT__( " 2758 "and a subsequent tok::r_paren"); 2759 if (MI->getReplacementToken(NumTokens - 2).is(tok::hashhash)) { 2760 Diag(Tok, diag::err_vaopt_paste_at_end); 2761 return nullptr; 2762 } 2763 } 2764 } else if (Tok.is(tok::l_paren)) { 2765 VAOCtx.sawOpeningParen(Tok.getLocation()); 2766 } 2767 } 2768 // Get the next token of the macro. 2769 LexUnexpandedToken(Tok); 2770 continue; 2771 } 2772 2773 // If we're in -traditional mode, then we should ignore stringification 2774 // and token pasting. Mark the tokens as unknown so as not to confuse 2775 // things. 2776 if (getLangOpts().TraditionalCPP) { 2777 Tok.setKind(tok::unknown); 2778 MI->AddTokenToBody(Tok); 2779 2780 // Get the next token of the macro. 2781 LexUnexpandedToken(Tok); 2782 continue; 2783 } 2784 2785 if (Tok.is(tok::hashhash)) { 2786 // If we see token pasting, check if it looks like the gcc comma 2787 // pasting extension. We'll use this information to suppress 2788 // diagnostics later on. 2789 2790 // Get the next token of the macro. 2791 LexUnexpandedToken(Tok); 2792 2793 if (Tok.is(tok::eod)) { 2794 MI->AddTokenToBody(LastTok); 2795 break; 2796 } 2797 2798 unsigned NumTokens = MI->getNumTokens(); 2799 if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ && 2800 MI->getReplacementToken(NumTokens-1).is(tok::comma)) 2801 MI->setHasCommaPasting(); 2802 2803 // Things look ok, add the '##' token to the macro. 2804 MI->AddTokenToBody(LastTok); 2805 continue; 2806 } 2807 2808 // Our Token is a stringization operator. 2809 // Get the next token of the macro. 2810 LexUnexpandedToken(Tok); 2811 2812 // Check for a valid macro arg identifier or __VA_OPT__. 2813 if (!VAOCtx.isVAOptToken(Tok) && 2814 (Tok.getIdentifierInfo() == nullptr || 2815 MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) { 2816 2817 // If this is assembler-with-cpp mode, we accept random gibberish after 2818 // the '#' because '#' is often a comment character. However, change 2819 // the kind of the token to tok::unknown so that the preprocessor isn't 2820 // confused. 2821 if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) { 2822 LastTok.setKind(tok::unknown); 2823 MI->AddTokenToBody(LastTok); 2824 continue; 2825 } else { 2826 Diag(Tok, diag::err_pp_stringize_not_parameter) 2827 << LastTok.is(tok::hashat); 2828 return nullptr; 2829 } 2830 } 2831 2832 // Things look ok, add the '#' and param name tokens to the macro. 2833 MI->AddTokenToBody(LastTok); 2834 2835 // If the token following '#' is VAOPT, let the next iteration handle it 2836 // and check it for correctness, otherwise add the token and prime the 2837 // loop with the next one. 2838 if (!VAOCtx.isVAOptToken(Tok)) { 2839 MI->AddTokenToBody(Tok); 2840 LastTok = Tok; 2841 2842 // Get the next token of the macro. 2843 LexUnexpandedToken(Tok); 2844 } 2845 } 2846 if (VAOCtx.isInVAOpt()) { 2847 assert(Tok.is(tok::eod) && "Must be at End Of preprocessing Directive"); 2848 Diag(Tok, diag::err_pp_expected_after) 2849 << LastTok.getKind() << tok::r_paren; 2850 Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren; 2851 return nullptr; 2852 } 2853 } 2854 MI->setDefinitionEndLoc(LastTok.getLocation()); 2855 return MI; 2856 } 2857 /// HandleDefineDirective - Implements \#define. This consumes the entire macro 2858 /// line then lets the caller lex the next real token. 2859 void Preprocessor::HandleDefineDirective( 2860 Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) { 2861 ++NumDefined; 2862 2863 Token MacroNameTok; 2864 bool MacroShadowsKeyword; 2865 ReadMacroName(MacroNameTok, MU_Define, &MacroShadowsKeyword); 2866 2867 // Error reading macro name? If so, diagnostic already issued. 2868 if (MacroNameTok.is(tok::eod)) 2869 return; 2870 2871 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 2872 // Issue a final pragma warning if we're defining a macro that was has been 2873 // undefined and is being redefined. 2874 if (!II->hasMacroDefinition() && II->hadMacroDefinition() && II->isFinal()) 2875 emitFinalMacroWarning(MacroNameTok, /*IsUndef=*/false); 2876 2877 // If we are supposed to keep comments in #defines, reenable comment saving 2878 // mode. 2879 if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments); 2880 2881 MacroInfo *const MI = ReadOptionalMacroParameterListAndBody( 2882 MacroNameTok, ImmediatelyAfterHeaderGuard); 2883 2884 if (!MI) return; 2885 2886 if (MacroShadowsKeyword && 2887 !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) { 2888 Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword); 2889 } 2890 // Check that there is no paste (##) operator at the beginning or end of the 2891 // replacement list. 2892 unsigned NumTokens = MI->getNumTokens(); 2893 if (NumTokens != 0) { 2894 if (MI->getReplacementToken(0).is(tok::hashhash)) { 2895 Diag(MI->getReplacementToken(0), diag::err_paste_at_start); 2896 return; 2897 } 2898 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) { 2899 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end); 2900 return; 2901 } 2902 } 2903 2904 // When skipping just warn about macros that do not match. 2905 if (SkippingUntilPCHThroughHeader) { 2906 const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo()); 2907 if (!OtherMI || !MI->isIdenticalTo(*OtherMI, *this, 2908 /*Syntactic=*/LangOpts.MicrosoftExt)) 2909 Diag(MI->getDefinitionLoc(), diag::warn_pp_macro_def_mismatch_with_pch) 2910 << MacroNameTok.getIdentifierInfo(); 2911 // Issue the diagnostic but allow the change if msvc extensions are enabled 2912 if (!LangOpts.MicrosoftExt) 2913 return; 2914 } 2915 2916 // Finally, if this identifier already had a macro defined for it, verify that 2917 // the macro bodies are identical, and issue diagnostics if they are not. 2918 if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) { 2919 // Final macros are hard-mode: they always warn. Even if the bodies are 2920 // identical. Even if they are in system headers. Even if they are things we 2921 // would silently allow in the past. 2922 if (MacroNameTok.getIdentifierInfo()->isFinal()) 2923 emitFinalMacroWarning(MacroNameTok, /*IsUndef=*/false); 2924 2925 // In Objective-C, ignore attempts to directly redefine the builtin 2926 // definitions of the ownership qualifiers. It's still possible to 2927 // #undef them. 2928 auto isObjCProtectedMacro = [](const IdentifierInfo *II) -> bool { 2929 return II->isStr("__strong") || 2930 II->isStr("__weak") || 2931 II->isStr("__unsafe_unretained") || 2932 II->isStr("__autoreleasing"); 2933 }; 2934 if (getLangOpts().ObjC && 2935 SourceMgr.getFileID(OtherMI->getDefinitionLoc()) 2936 == getPredefinesFileID() && 2937 isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) { 2938 // Warn if it changes the tokens. 2939 if ((!getDiagnostics().getSuppressSystemWarnings() || 2940 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) && 2941 !MI->isIdenticalTo(*OtherMI, *this, 2942 /*Syntactic=*/LangOpts.MicrosoftExt)) { 2943 Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored); 2944 } 2945 assert(!OtherMI->isWarnIfUnused()); 2946 return; 2947 } 2948 2949 // It is very common for system headers to have tons of macro redefinitions 2950 // and for warnings to be disabled in system headers. If this is the case, 2951 // then don't bother calling MacroInfo::isIdenticalTo. 2952 if (!getDiagnostics().getSuppressSystemWarnings() || 2953 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) { 2954 2955 if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused()) 2956 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used); 2957 2958 // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and 2959 // C++ [cpp.predefined]p4, but allow it as an extension. 2960 if (OtherMI->isBuiltinMacro()) 2961 Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro); 2962 // Macros must be identical. This means all tokens and whitespace 2963 // separation must be the same. C99 6.10.3p2. 2964 else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && 2965 !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) { 2966 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) 2967 << MacroNameTok.getIdentifierInfo(); 2968 Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition); 2969 } 2970 } 2971 if (OtherMI->isWarnIfUnused()) 2972 WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc()); 2973 } 2974 2975 DefMacroDirective *MD = 2976 appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI); 2977 2978 assert(!MI->isUsed()); 2979 // If we need warning for not using the macro, add its location in the 2980 // warn-because-unused-macro set. If it gets used it will be removed from set. 2981 if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && 2982 !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc()) && 2983 !MacroExpansionInDirectivesOverride && 2984 getSourceManager().getFileID(MI->getDefinitionLoc()) != 2985 getPredefinesFileID()) { 2986 MI->setIsWarnIfUnused(true); 2987 WarnUnusedMacroLocs.insert(MI->getDefinitionLoc()); 2988 } 2989 2990 // If the callbacks want to know, tell them about the macro definition. 2991 if (Callbacks) 2992 Callbacks->MacroDefined(MacroNameTok, MD); 2993 2994 // If we're in MS compatibility mode and the macro being defined is the 2995 // assert macro, implicitly add a macro definition for static_assert to work 2996 // around their broken assert.h header file in C. Only do so if there isn't 2997 // already a static_assert macro defined. 2998 if (!getLangOpts().CPlusPlus && getLangOpts().MSVCCompat && 2999 MacroNameTok.getIdentifierInfo()->isStr("assert") && 3000 !isMacroDefined("static_assert")) { 3001 MacroInfo *MI = AllocateMacroInfo(SourceLocation()); 3002 3003 Token Tok; 3004 Tok.startToken(); 3005 Tok.setKind(tok::kw__Static_assert); 3006 Tok.setIdentifierInfo(getIdentifierInfo("_Static_assert")); 3007 MI->AddTokenToBody(Tok); 3008 (void)appendDefMacroDirective(getIdentifierInfo("static_assert"), MI); 3009 } 3010 } 3011 3012 /// HandleUndefDirective - Implements \#undef. 3013 /// 3014 void Preprocessor::HandleUndefDirective() { 3015 ++NumUndefined; 3016 3017 Token MacroNameTok; 3018 ReadMacroName(MacroNameTok, MU_Undef); 3019 3020 // Error reading macro name? If so, diagnostic already issued. 3021 if (MacroNameTok.is(tok::eod)) 3022 return; 3023 3024 // Check to see if this is the last token on the #undef line. 3025 CheckEndOfDirective("undef"); 3026 3027 // Okay, we have a valid identifier to undef. 3028 auto *II = MacroNameTok.getIdentifierInfo(); 3029 auto MD = getMacroDefinition(II); 3030 UndefMacroDirective *Undef = nullptr; 3031 3032 if (II->isFinal()) 3033 emitFinalMacroWarning(MacroNameTok, /*IsUndef=*/true); 3034 3035 // If the macro is not defined, this is a noop undef. 3036 if (const MacroInfo *MI = MD.getMacroInfo()) { 3037 if (!MI->isUsed() && MI->isWarnIfUnused()) 3038 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used); 3039 3040 if (MI->isWarnIfUnused()) 3041 WarnUnusedMacroLocs.erase(MI->getDefinitionLoc()); 3042 3043 Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation()); 3044 } 3045 3046 // If the callbacks want to know, tell them about the macro #undef. 3047 // Note: no matter if the macro was defined or not. 3048 if (Callbacks) 3049 Callbacks->MacroUndefined(MacroNameTok, MD, Undef); 3050 3051 if (Undef) 3052 appendMacroDirective(II, Undef); 3053 } 3054 3055 //===----------------------------------------------------------------------===// 3056 // Preprocessor Conditional Directive Handling. 3057 //===----------------------------------------------------------------------===// 3058 3059 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive. isIfndef 3060 /// is true when this is a \#ifndef directive. ReadAnyTokensBeforeDirective is 3061 /// true if any tokens have been returned or pp-directives activated before this 3062 /// \#ifndef has been lexed. 3063 /// 3064 void Preprocessor::HandleIfdefDirective(Token &Result, 3065 const Token &HashToken, 3066 bool isIfndef, 3067 bool ReadAnyTokensBeforeDirective) { 3068 ++NumIf; 3069 Token DirectiveTok = Result; 3070 3071 Token MacroNameTok; 3072 ReadMacroName(MacroNameTok); 3073 3074 // Error reading macro name? If so, diagnostic already issued. 3075 if (MacroNameTok.is(tok::eod)) { 3076 // Skip code until we get to #endif. This helps with recovery by not 3077 // emitting an error when the #endif is reached. 3078 SkipExcludedConditionalBlock(HashToken.getLocation(), 3079 DirectiveTok.getLocation(), 3080 /*Foundnonskip*/ false, /*FoundElse*/ false); 3081 return; 3082 } 3083 3084 emitMacroExpansionWarnings(MacroNameTok); 3085 3086 // Check to see if this is the last token on the #if[n]def line. 3087 CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef"); 3088 3089 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo(); 3090 auto MD = getMacroDefinition(MII); 3091 MacroInfo *MI = MD.getMacroInfo(); 3092 3093 if (CurPPLexer->getConditionalStackDepth() == 0) { 3094 // If the start of a top-level #ifdef and if the macro is not defined, 3095 // inform MIOpt that this might be the start of a proper include guard. 3096 // Otherwise it is some other form of unknown conditional which we can't 3097 // handle. 3098 if (!ReadAnyTokensBeforeDirective && !MI) { 3099 assert(isIfndef && "#ifdef shouldn't reach here"); 3100 CurPPLexer->MIOpt.EnterTopLevelIfndef(MII, MacroNameTok.getLocation()); 3101 } else 3102 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3103 } 3104 3105 // If there is a macro, process it. 3106 if (MI) // Mark it used. 3107 markMacroAsUsed(MI); 3108 3109 if (Callbacks) { 3110 if (isIfndef) 3111 Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD); 3112 else 3113 Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD); 3114 } 3115 3116 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3117 getSourceManager().isInMainFile(DirectiveTok.getLocation()); 3118 3119 // Should we include the stuff contained by this directive? 3120 if (PPOpts->SingleFileParseMode && !MI) { 3121 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3122 // the directive blocks. 3123 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 3124 /*wasskip*/false, /*foundnonskip*/false, 3125 /*foundelse*/false); 3126 } else if (!MI == isIfndef || RetainExcludedCB) { 3127 // Yes, remember that we are inside a conditional, then lex the next token. 3128 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 3129 /*wasskip*/false, /*foundnonskip*/true, 3130 /*foundelse*/false); 3131 } else { 3132 // No, skip the contents of this block. 3133 SkipExcludedConditionalBlock(HashToken.getLocation(), 3134 DirectiveTok.getLocation(), 3135 /*Foundnonskip*/ false, 3136 /*FoundElse*/ false); 3137 } 3138 } 3139 3140 /// HandleIfDirective - Implements the \#if directive. 3141 /// 3142 void Preprocessor::HandleIfDirective(Token &IfToken, 3143 const Token &HashToken, 3144 bool ReadAnyTokensBeforeDirective) { 3145 ++NumIf; 3146 3147 // Parse and evaluate the conditional expression. 3148 IdentifierInfo *IfNDefMacro = nullptr; 3149 const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); 3150 const bool ConditionalTrue = DER.Conditional; 3151 // Lexer might become invalid if we hit code completion point while evaluating 3152 // expression. 3153 if (!CurPPLexer) 3154 return; 3155 3156 // If this condition is equivalent to #ifndef X, and if this is the first 3157 // directive seen, handle it for the multiple-include optimization. 3158 if (CurPPLexer->getConditionalStackDepth() == 0) { 3159 if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue) 3160 // FIXME: Pass in the location of the macro name, not the 'if' token. 3161 CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation()); 3162 else 3163 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3164 } 3165 3166 if (Callbacks) 3167 Callbacks->If( 3168 IfToken.getLocation(), DER.ExprRange, 3169 (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); 3170 3171 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3172 getSourceManager().isInMainFile(IfToken.getLocation()); 3173 3174 // Should we include the stuff contained by this directive? 3175 if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { 3176 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3177 // the directive blocks. 3178 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 3179 /*foundnonskip*/false, /*foundelse*/false); 3180 } else if (ConditionalTrue || RetainExcludedCB) { 3181 // Yes, remember that we are inside a conditional, then lex the next token. 3182 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 3183 /*foundnonskip*/true, /*foundelse*/false); 3184 } else { 3185 // No, skip the contents of this block. 3186 SkipExcludedConditionalBlock(HashToken.getLocation(), IfToken.getLocation(), 3187 /*Foundnonskip*/ false, 3188 /*FoundElse*/ false); 3189 } 3190 } 3191 3192 /// HandleEndifDirective - Implements the \#endif directive. 3193 /// 3194 void Preprocessor::HandleEndifDirective(Token &EndifToken) { 3195 ++NumEndif; 3196 3197 // Check that this is the whole directive. 3198 CheckEndOfDirective("endif"); 3199 3200 PPConditionalInfo CondInfo; 3201 if (CurPPLexer->popConditionalLevel(CondInfo)) { 3202 // No conditionals on the stack: this is an #endif without an #if. 3203 Diag(EndifToken, diag::err_pp_endif_without_if); 3204 return; 3205 } 3206 3207 // If this the end of a top-level #endif, inform MIOpt. 3208 if (CurPPLexer->getConditionalStackDepth() == 0) 3209 CurPPLexer->MIOpt.ExitTopLevelConditional(); 3210 3211 assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode && 3212 "This code should only be reachable in the non-skipping case!"); 3213 3214 if (Callbacks) 3215 Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc); 3216 } 3217 3218 /// HandleElseDirective - Implements the \#else directive. 3219 /// 3220 void Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) { 3221 ++NumElse; 3222 3223 // #else directive in a non-skipping conditional... start skipping. 3224 CheckEndOfDirective("else"); 3225 3226 PPConditionalInfo CI; 3227 if (CurPPLexer->popConditionalLevel(CI)) { 3228 Diag(Result, diag::pp_err_else_without_if); 3229 return; 3230 } 3231 3232 // If this is a top-level #else, inform the MIOpt. 3233 if (CurPPLexer->getConditionalStackDepth() == 0) 3234 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3235 3236 // If this is a #else with a #else before it, report the error. 3237 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else); 3238 3239 if (Callbacks) 3240 Callbacks->Else(Result.getLocation(), CI.IfLoc); 3241 3242 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3243 getSourceManager().isInMainFile(Result.getLocation()); 3244 3245 if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { 3246 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3247 // the directive blocks. 3248 CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false, 3249 /*foundnonskip*/false, /*foundelse*/true); 3250 return; 3251 } 3252 3253 // Finally, skip the rest of the contents of this block. 3254 SkipExcludedConditionalBlock(HashToken.getLocation(), CI.IfLoc, 3255 /*Foundnonskip*/ true, 3256 /*FoundElse*/ true, Result.getLocation()); 3257 } 3258 3259 /// Implements the \#elif, \#elifdef, and \#elifndef directives. 3260 void Preprocessor::HandleElifFamilyDirective(Token &ElifToken, 3261 const Token &HashToken, 3262 tok::PPKeywordKind Kind) { 3263 PPElifDiag DirKind = Kind == tok::pp_elif ? PED_Elif 3264 : Kind == tok::pp_elifdef ? PED_Elifdef 3265 : PED_Elifndef; 3266 ++NumElse; 3267 3268 // #elif directive in a non-skipping conditional... start skipping. 3269 // We don't care what the condition is, because we will always skip it (since 3270 // the block immediately before it was included). 3271 SourceRange ConditionRange = DiscardUntilEndOfDirective(); 3272 3273 PPConditionalInfo CI; 3274 if (CurPPLexer->popConditionalLevel(CI)) { 3275 Diag(ElifToken, diag::pp_err_elif_without_if) << DirKind; 3276 return; 3277 } 3278 3279 // If this is a top-level #elif, inform the MIOpt. 3280 if (CurPPLexer->getConditionalStackDepth() == 0) 3281 CurPPLexer->MIOpt.EnterTopLevelConditional(); 3282 3283 // If this is a #elif with a #else before it, report the error. 3284 if (CI.FoundElse) 3285 Diag(ElifToken, diag::pp_err_elif_after_else) << DirKind; 3286 3287 if (Callbacks) { 3288 switch (Kind) { 3289 case tok::pp_elif: 3290 Callbacks->Elif(ElifToken.getLocation(), ConditionRange, 3291 PPCallbacks::CVK_NotEvaluated, CI.IfLoc); 3292 break; 3293 case tok::pp_elifdef: 3294 Callbacks->Elifdef(ElifToken.getLocation(), ConditionRange, CI.IfLoc); 3295 break; 3296 case tok::pp_elifndef: 3297 Callbacks->Elifndef(ElifToken.getLocation(), ConditionRange, CI.IfLoc); 3298 break; 3299 default: 3300 assert(false && "unexpected directive kind"); 3301 break; 3302 } 3303 } 3304 3305 bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && 3306 getSourceManager().isInMainFile(ElifToken.getLocation()); 3307 3308 if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { 3309 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 3310 // the directive blocks. 3311 CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false, 3312 /*foundnonskip*/false, /*foundelse*/false); 3313 return; 3314 } 3315 3316 // Finally, skip the rest of the contents of this block. 3317 SkipExcludedConditionalBlock( 3318 HashToken.getLocation(), CI.IfLoc, /*Foundnonskip*/ true, 3319 /*FoundElse*/ CI.FoundElse, ElifToken.getLocation()); 3320 } 3321