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