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