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