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