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