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