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