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