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