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 /// Process a directive while looking for the through header or a #pragma
891 /// hdrstop. The following directives are handled:
892 /// #include (to check if it is the through header)
893 /// #define (to warn about macros that don't match the PCH)
894 /// #pragma (to check for pragma hdrstop).
895 /// All other directives are completely discarded.
896 void Preprocessor::HandleSkippedDirectiveWhileUsingPCH(Token &Result,
897                                                        SourceLocation HashLoc) {
898   if (const IdentifierInfo *II = Result.getIdentifierInfo()) {
899     if (II->getPPKeywordID() == tok::pp_define) {
900       return HandleDefineDirective(Result,
901                                    /*ImmediatelyAfterHeaderGuard=*/false);
902     }
903     if (SkippingUntilPCHThroughHeader &&
904         II->getPPKeywordID() == tok::pp_include) {
905       return HandleIncludeDirective(HashLoc, Result);
906     }
907     if (SkippingUntilPragmaHdrStop && II->getPPKeywordID() == tok::pp_pragma) {
908       Token P = LookAhead(0);
909       auto *II = P.getIdentifierInfo();
910       if (II && II->getName() == "hdrstop")
911         return HandlePragmaDirective(HashLoc, PIK_HashPragma);
912     }
913   }
914   DiscardUntilEndOfDirective();
915 }
916 
917 /// HandleDirective - This callback is invoked when the lexer sees a # token
918 /// at the start of a line.  This consumes the directive, modifies the
919 /// lexer/preprocessor state, and advances the lexer(s) so that the next token
920 /// read is the correct one.
921 void Preprocessor::HandleDirective(Token &Result) {
922   // FIXME: Traditional: # with whitespace before it not recognized by K&R?
923 
924   // We just parsed a # character at the start of a line, so we're in directive
925   // mode.  Tell the lexer this so any newlines we see will be converted into an
926   // EOD token (which terminates the directive).
927   CurPPLexer->ParsingPreprocessorDirective = true;
928   if (CurLexer) CurLexer->SetKeepWhitespaceMode(false);
929 
930   bool ImmediatelyAfterTopLevelIfndef =
931       CurPPLexer->MIOpt.getImmediatelyAfterTopLevelIfndef();
932   CurPPLexer->MIOpt.resetImmediatelyAfterTopLevelIfndef();
933 
934   ++NumDirectives;
935 
936   // We are about to read a token.  For the multiple-include optimization FA to
937   // work, we have to remember if we had read any tokens *before* this
938   // pp-directive.
939   bool ReadAnyTokensBeforeDirective =CurPPLexer->MIOpt.getHasReadAnyTokensVal();
940 
941   // Save the '#' token in case we need to return it later.
942   Token SavedHash = Result;
943 
944   // Read the next token, the directive flavor.  This isn't expanded due to
945   // C99 6.10.3p8.
946   LexUnexpandedToken(Result);
947 
948   // C99 6.10.3p11: Is this preprocessor directive in macro invocation?  e.g.:
949   //   #define A(x) #x
950   //   A(abc
951   //     #warning blah
952   //   def)
953   // If so, the user is relying on undefined behavior, emit a diagnostic. Do
954   // not support this for #include-like directives, since that can result in
955   // terrible diagnostics, and does not work in GCC.
956   if (InMacroArgs) {
957     if (IdentifierInfo *II = Result.getIdentifierInfo()) {
958       switch (II->getPPKeywordID()) {
959       case tok::pp_include:
960       case tok::pp_import:
961       case tok::pp_include_next:
962       case tok::pp___include_macros:
963       case tok::pp_pragma:
964         Diag(Result, diag::err_embedded_directive) << II->getName();
965         DiscardUntilEndOfDirective();
966         return;
967       default:
968         break;
969       }
970     }
971     Diag(Result, diag::ext_embedded_directive);
972   }
973 
974   // Temporarily enable macro expansion if set so
975   // and reset to previous state when returning from this function.
976   ResetMacroExpansionHelper helper(this);
977 
978   if (SkippingUntilPCHThroughHeader || SkippingUntilPragmaHdrStop)
979     return HandleSkippedDirectiveWhileUsingPCH(Result, SavedHash.getLocation());
980 
981   switch (Result.getKind()) {
982   case tok::eod:
983     return;   // null directive.
984   case tok::code_completion:
985     if (CodeComplete)
986       CodeComplete->CodeCompleteDirective(
987                                     CurPPLexer->getConditionalStackDepth() > 0);
988     setCodeCompletionReached();
989     return;
990   case tok::numeric_constant:  // # 7  GNU line marker directive.
991     if (getLangOpts().AsmPreprocessor)
992       break;  // # 4 is not a preprocessor directive in .S files.
993     return HandleDigitDirective(Result);
994   default:
995     IdentifierInfo *II = Result.getIdentifierInfo();
996     if (!II) break; // Not an identifier.
997 
998     // Ask what the preprocessor keyword ID is.
999     switch (II->getPPKeywordID()) {
1000     default: break;
1001     // C99 6.10.1 - Conditional Inclusion.
1002     case tok::pp_if:
1003       return HandleIfDirective(Result, SavedHash, ReadAnyTokensBeforeDirective);
1004     case tok::pp_ifdef:
1005       return HandleIfdefDirective(Result, SavedHash, false,
1006                                   true /*not valid for miopt*/);
1007     case tok::pp_ifndef:
1008       return HandleIfdefDirective(Result, SavedHash, true,
1009                                   ReadAnyTokensBeforeDirective);
1010     case tok::pp_elif:
1011       return HandleElifDirective(Result, SavedHash);
1012     case tok::pp_else:
1013       return HandleElseDirective(Result, SavedHash);
1014     case tok::pp_endif:
1015       return HandleEndifDirective(Result);
1016 
1017     // C99 6.10.2 - Source File Inclusion.
1018     case tok::pp_include:
1019       // Handle #include.
1020       return HandleIncludeDirective(SavedHash.getLocation(), Result);
1021     case tok::pp___include_macros:
1022       // Handle -imacros.
1023       return HandleIncludeMacrosDirective(SavedHash.getLocation(), Result);
1024 
1025     // C99 6.10.3 - Macro Replacement.
1026     case tok::pp_define:
1027       return HandleDefineDirective(Result, ImmediatelyAfterTopLevelIfndef);
1028     case tok::pp_undef:
1029       return HandleUndefDirective();
1030 
1031     // C99 6.10.4 - Line Control.
1032     case tok::pp_line:
1033       return HandleLineDirective();
1034 
1035     // C99 6.10.5 - Error Directive.
1036     case tok::pp_error:
1037       return HandleUserDiagnosticDirective(Result, false);
1038 
1039     // C99 6.10.6 - Pragma Directive.
1040     case tok::pp_pragma:
1041       return HandlePragmaDirective(SavedHash.getLocation(), PIK_HashPragma);
1042 
1043     // GNU Extensions.
1044     case tok::pp_import:
1045       return HandleImportDirective(SavedHash.getLocation(), Result);
1046     case tok::pp_include_next:
1047       return HandleIncludeNextDirective(SavedHash.getLocation(), Result);
1048 
1049     case tok::pp_warning:
1050       Diag(Result, diag::ext_pp_warning_directive);
1051       return HandleUserDiagnosticDirective(Result, true);
1052     case tok::pp_ident:
1053       return HandleIdentSCCSDirective(Result);
1054     case tok::pp_sccs:
1055       return HandleIdentSCCSDirective(Result);
1056     case tok::pp_assert:
1057       //isExtension = true;  // FIXME: implement #assert
1058       break;
1059     case tok::pp_unassert:
1060       //isExtension = true;  // FIXME: implement #unassert
1061       break;
1062 
1063     case tok::pp___public_macro:
1064       if (getLangOpts().Modules)
1065         return HandleMacroPublicDirective(Result);
1066       break;
1067 
1068     case tok::pp___private_macro:
1069       if (getLangOpts().Modules)
1070         return HandleMacroPrivateDirective();
1071       break;
1072     }
1073     break;
1074   }
1075 
1076   // If this is a .S file, treat unknown # directives as non-preprocessor
1077   // directives.  This is important because # may be a comment or introduce
1078   // various pseudo-ops.  Just return the # token and push back the following
1079   // token to be lexed next time.
1080   if (getLangOpts().AsmPreprocessor) {
1081     auto Toks = llvm::make_unique<Token[]>(2);
1082     // Return the # and the token after it.
1083     Toks[0] = SavedHash;
1084     Toks[1] = Result;
1085 
1086     // If the second token is a hashhash token, then we need to translate it to
1087     // unknown so the token lexer doesn't try to perform token pasting.
1088     if (Result.is(tok::hashhash))
1089       Toks[1].setKind(tok::unknown);
1090 
1091     // Enter this token stream so that we re-lex the tokens.  Make sure to
1092     // enable macro expansion, in case the token after the # is an identifier
1093     // that is expanded.
1094     EnterTokenStream(std::move(Toks), 2, false);
1095     return;
1096   }
1097 
1098   // If we reached here, the preprocessing token is not valid!
1099   Diag(Result, diag::err_pp_invalid_directive);
1100 
1101   // Read the rest of the PP line.
1102   DiscardUntilEndOfDirective();
1103 
1104   // Okay, we're done parsing the directive.
1105 }
1106 
1107 /// GetLineValue - Convert a numeric token into an unsigned value, emitting
1108 /// Diagnostic DiagID if it is invalid, and returning the value in Val.
1109 static bool GetLineValue(Token &DigitTok, unsigned &Val,
1110                          unsigned DiagID, Preprocessor &PP,
1111                          bool IsGNULineDirective=false) {
1112   if (DigitTok.isNot(tok::numeric_constant)) {
1113     PP.Diag(DigitTok, DiagID);
1114 
1115     if (DigitTok.isNot(tok::eod))
1116       PP.DiscardUntilEndOfDirective();
1117     return true;
1118   }
1119 
1120   SmallString<64> IntegerBuffer;
1121   IntegerBuffer.resize(DigitTok.getLength());
1122   const char *DigitTokBegin = &IntegerBuffer[0];
1123   bool Invalid = false;
1124   unsigned ActualLength = PP.getSpelling(DigitTok, DigitTokBegin, &Invalid);
1125   if (Invalid)
1126     return true;
1127 
1128   // Verify that we have a simple digit-sequence, and compute the value.  This
1129   // is always a simple digit string computed in decimal, so we do this manually
1130   // here.
1131   Val = 0;
1132   for (unsigned i = 0; i != ActualLength; ++i) {
1133     // C++1y [lex.fcon]p1:
1134     //   Optional separating single quotes in a digit-sequence are ignored
1135     if (DigitTokBegin[i] == '\'')
1136       continue;
1137 
1138     if (!isDigit(DigitTokBegin[i])) {
1139       PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i),
1140               diag::err_pp_line_digit_sequence) << IsGNULineDirective;
1141       PP.DiscardUntilEndOfDirective();
1142       return true;
1143     }
1144 
1145     unsigned NextVal = Val*10+(DigitTokBegin[i]-'0');
1146     if (NextVal < Val) { // overflow.
1147       PP.Diag(DigitTok, DiagID);
1148       PP.DiscardUntilEndOfDirective();
1149       return true;
1150     }
1151     Val = NextVal;
1152   }
1153 
1154   if (DigitTokBegin[0] == '0' && Val)
1155     PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal)
1156       << IsGNULineDirective;
1157 
1158   return false;
1159 }
1160 
1161 /// Handle a \#line directive: C99 6.10.4.
1162 ///
1163 /// The two acceptable forms are:
1164 /// \verbatim
1165 ///   # line digit-sequence
1166 ///   # line digit-sequence "s-char-sequence"
1167 /// \endverbatim
1168 void Preprocessor::HandleLineDirective() {
1169   // Read the line # and string argument.  Per C99 6.10.4p5, these tokens are
1170   // expanded.
1171   Token DigitTok;
1172   Lex(DigitTok);
1173 
1174   // Validate the number and convert it to an unsigned.
1175   unsigned LineNo;
1176   if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer,*this))
1177     return;
1178 
1179   if (LineNo == 0)
1180     Diag(DigitTok, diag::ext_pp_line_zero);
1181 
1182   // Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a
1183   // number greater than 2147483647".  C90 requires that the line # be <= 32767.
1184   unsigned LineLimit = 32768U;
1185   if (LangOpts.C99 || LangOpts.CPlusPlus11)
1186     LineLimit = 2147483648U;
1187   if (LineNo >= LineLimit)
1188     Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;
1189   else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)
1190     Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);
1191 
1192   int FilenameID = -1;
1193   Token StrTok;
1194   Lex(StrTok);
1195 
1196   // If the StrTok is "eod", then it wasn't present.  Otherwise, it must be a
1197   // string followed by eod.
1198   if (StrTok.is(tok::eod))
1199     ; // ok
1200   else if (StrTok.isNot(tok::string_literal)) {
1201     Diag(StrTok, diag::err_pp_line_invalid_filename);
1202     return DiscardUntilEndOfDirective();
1203   } else if (StrTok.hasUDSuffix()) {
1204     Diag(StrTok, diag::err_invalid_string_udl);
1205     return DiscardUntilEndOfDirective();
1206   } else {
1207     // Parse and validate the string, converting it into a unique ID.
1208     StringLiteralParser Literal(StrTok, *this);
1209     assert(Literal.isAscii() && "Didn't allow wide strings in");
1210     if (Literal.hadError)
1211       return DiscardUntilEndOfDirective();
1212     if (Literal.Pascal) {
1213       Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
1214       return DiscardUntilEndOfDirective();
1215     }
1216     FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString());
1217 
1218     // Verify that there is nothing after the string, other than EOD.  Because
1219     // of C99 6.10.4p5, macros that expand to empty tokens are ok.
1220     CheckEndOfDirective("line", true);
1221   }
1222 
1223   // Take the file kind of the file containing the #line directive. #line
1224   // directives are often used for generated sources from the same codebase, so
1225   // the new file should generally be classified the same way as the current
1226   // file. This is visible in GCC's pre-processed output, which rewrites #line
1227   // to GNU line markers.
1228   SrcMgr::CharacteristicKind FileKind =
1229       SourceMgr.getFileCharacteristic(DigitTok.getLocation());
1230 
1231   SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, false,
1232                         false, FileKind);
1233 
1234   if (Callbacks)
1235     Callbacks->FileChanged(CurPPLexer->getSourceLocation(),
1236                            PPCallbacks::RenameFile, FileKind);
1237 }
1238 
1239 /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line
1240 /// marker directive.
1241 static bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit,
1242                                 SrcMgr::CharacteristicKind &FileKind,
1243                                 Preprocessor &PP) {
1244   unsigned FlagVal;
1245   Token FlagTok;
1246   PP.Lex(FlagTok);
1247   if (FlagTok.is(tok::eod)) return false;
1248   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))
1249     return true;
1250 
1251   if (FlagVal == 1) {
1252     IsFileEntry = true;
1253 
1254     PP.Lex(FlagTok);
1255     if (FlagTok.is(tok::eod)) return false;
1256     if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP))
1257       return true;
1258   } else if (FlagVal == 2) {
1259     IsFileExit = true;
1260 
1261     SourceManager &SM = PP.getSourceManager();
1262     // If we are leaving the current presumed file, check to make sure the
1263     // presumed include stack isn't empty!
1264     FileID CurFileID =
1265       SM.getDecomposedExpansionLoc(FlagTok.getLocation()).first;
1266     PresumedLoc PLoc = SM.getPresumedLoc(FlagTok.getLocation());
1267     if (PLoc.isInvalid())
1268       return true;
1269 
1270     // If there is no include loc (main file) or if the include loc is in a
1271     // different physical file, then we aren't in a "1" line marker flag region.
1272     SourceLocation IncLoc = PLoc.getIncludeLoc();
1273     if (IncLoc.isInvalid() ||
1274         SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {
1275       PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);
1276       PP.DiscardUntilEndOfDirective();
1277       return true;
1278     }
1279 
1280     PP.Lex(FlagTok);
1281     if (FlagTok.is(tok::eod)) return false;
1282     if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP))
1283       return true;
1284   }
1285 
1286   // We must have 3 if there are still flags.
1287   if (FlagVal != 3) {
1288     PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
1289     PP.DiscardUntilEndOfDirective();
1290     return true;
1291   }
1292 
1293   FileKind = SrcMgr::C_System;
1294 
1295   PP.Lex(FlagTok);
1296   if (FlagTok.is(tok::eod)) return false;
1297   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))
1298     return true;
1299 
1300   // We must have 4 if there is yet another flag.
1301   if (FlagVal != 4) {
1302     PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
1303     PP.DiscardUntilEndOfDirective();
1304     return true;
1305   }
1306 
1307   FileKind = SrcMgr::C_ExternCSystem;
1308 
1309   PP.Lex(FlagTok);
1310   if (FlagTok.is(tok::eod)) return false;
1311 
1312   // There are no more valid flags here.
1313   PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
1314   PP.DiscardUntilEndOfDirective();
1315   return true;
1316 }
1317 
1318 /// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is
1319 /// one of the following forms:
1320 ///
1321 ///     # 42
1322 ///     # 42 "file" ('1' | '2')?
1323 ///     # 42 "file" ('1' | '2')? '3' '4'?
1324 ///
1325 void Preprocessor::HandleDigitDirective(Token &DigitTok) {
1326   // Validate the number and convert it to an unsigned.  GNU does not have a
1327   // line # limit other than it fit in 32-bits.
1328   unsigned LineNo;
1329   if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer,
1330                    *this, true))
1331     return;
1332 
1333   Token StrTok;
1334   Lex(StrTok);
1335 
1336   bool IsFileEntry = false, IsFileExit = false;
1337   int FilenameID = -1;
1338   SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User;
1339 
1340   // If the StrTok is "eod", then it wasn't present.  Otherwise, it must be a
1341   // string followed by eod.
1342   if (StrTok.is(tok::eod)) {
1343     // Treat this like "#line NN", which doesn't change file characteristics.
1344     FileKind = SourceMgr.getFileCharacteristic(DigitTok.getLocation());
1345   } else if (StrTok.isNot(tok::string_literal)) {
1346     Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
1347     return DiscardUntilEndOfDirective();
1348   } else if (StrTok.hasUDSuffix()) {
1349     Diag(StrTok, diag::err_invalid_string_udl);
1350     return DiscardUntilEndOfDirective();
1351   } else {
1352     // Parse and validate the string, converting it into a unique ID.
1353     StringLiteralParser Literal(StrTok, *this);
1354     assert(Literal.isAscii() && "Didn't allow wide strings in");
1355     if (Literal.hadError)
1356       return DiscardUntilEndOfDirective();
1357     if (Literal.Pascal) {
1358       Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
1359       return DiscardUntilEndOfDirective();
1360     }
1361     FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString());
1362 
1363     // If a filename was present, read any flags that are present.
1364     if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this))
1365       return;
1366   }
1367 
1368   // Create a line note with this information.
1369   SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry,
1370                         IsFileExit, FileKind);
1371 
1372   // If the preprocessor has callbacks installed, notify them of the #line
1373   // change.  This is used so that the line marker comes out in -E mode for
1374   // example.
1375   if (Callbacks) {
1376     PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile;
1377     if (IsFileEntry)
1378       Reason = PPCallbacks::EnterFile;
1379     else if (IsFileExit)
1380       Reason = PPCallbacks::ExitFile;
1381 
1382     Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind);
1383   }
1384 }
1385 
1386 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive.
1387 ///
1388 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
1389                                                  bool isWarning) {
1390   // PTH doesn't emit #warning or #error directives.
1391   if (CurPTHLexer)
1392     return CurPTHLexer->DiscardToEndOfLine();
1393 
1394   // Read the rest of the line raw.  We do this because we don't want macros
1395   // to be expanded and we don't require that the tokens be valid preprocessing
1396   // tokens.  For example, this is allowed: "#warning `   'foo".  GCC does
1397   // collapse multiple consecutive white space between tokens, but this isn't
1398   // specified by the standard.
1399   SmallString<128> Message;
1400   CurLexer->ReadToEndOfLine(&Message);
1401 
1402   // Find the first non-whitespace character, so that we can make the
1403   // diagnostic more succinct.
1404   StringRef Msg = StringRef(Message).ltrim(' ');
1405 
1406   if (isWarning)
1407     Diag(Tok, diag::pp_hash_warning) << Msg;
1408   else
1409     Diag(Tok, diag::err_pp_hash_error) << Msg;
1410 }
1411 
1412 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1413 ///
1414 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
1415   // Yes, this directive is an extension.
1416   Diag(Tok, diag::ext_pp_ident_directive);
1417 
1418   // Read the string argument.
1419   Token StrTok;
1420   Lex(StrTok);
1421 
1422   // If the token kind isn't a string, it's a malformed directive.
1423   if (StrTok.isNot(tok::string_literal) &&
1424       StrTok.isNot(tok::wide_string_literal)) {
1425     Diag(StrTok, diag::err_pp_malformed_ident);
1426     if (StrTok.isNot(tok::eod))
1427       DiscardUntilEndOfDirective();
1428     return;
1429   }
1430 
1431   if (StrTok.hasUDSuffix()) {
1432     Diag(StrTok, diag::err_invalid_string_udl);
1433     return DiscardUntilEndOfDirective();
1434   }
1435 
1436   // Verify that there is nothing after the string, other than EOD.
1437   CheckEndOfDirective("ident");
1438 
1439   if (Callbacks) {
1440     bool Invalid = false;
1441     std::string Str = getSpelling(StrTok, &Invalid);
1442     if (!Invalid)
1443       Callbacks->Ident(Tok.getLocation(), Str);
1444   }
1445 }
1446 
1447 /// Handle a #public directive.
1448 void Preprocessor::HandleMacroPublicDirective(Token &Tok) {
1449   Token MacroNameTok;
1450   ReadMacroName(MacroNameTok, MU_Undef);
1451 
1452   // Error reading macro name?  If so, diagnostic already issued.
1453   if (MacroNameTok.is(tok::eod))
1454     return;
1455 
1456   // Check to see if this is the last token on the #__public_macro line.
1457   CheckEndOfDirective("__public_macro");
1458 
1459   IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1460   // Okay, we finally have a valid identifier to undef.
1461   MacroDirective *MD = getLocalMacroDirective(II);
1462 
1463   // If the macro is not defined, this is an error.
1464   if (!MD) {
1465     Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;
1466     return;
1467   }
1468 
1469   // Note that this macro has now been exported.
1470   appendMacroDirective(II, AllocateVisibilityMacroDirective(
1471                                 MacroNameTok.getLocation(), /*IsPublic=*/true));
1472 }
1473 
1474 /// Handle a #private directive.
1475 void Preprocessor::HandleMacroPrivateDirective() {
1476   Token MacroNameTok;
1477   ReadMacroName(MacroNameTok, MU_Undef);
1478 
1479   // Error reading macro name?  If so, diagnostic already issued.
1480   if (MacroNameTok.is(tok::eod))
1481     return;
1482 
1483   // Check to see if this is the last token on the #__private_macro line.
1484   CheckEndOfDirective("__private_macro");
1485 
1486   IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1487   // Okay, we finally have a valid identifier to undef.
1488   MacroDirective *MD = getLocalMacroDirective(II);
1489 
1490   // If the macro is not defined, this is an error.
1491   if (!MD) {
1492     Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;
1493     return;
1494   }
1495 
1496   // Note that this macro has now been marked private.
1497   appendMacroDirective(II, AllocateVisibilityMacroDirective(
1498                                MacroNameTok.getLocation(), /*IsPublic=*/false));
1499 }
1500 
1501 //===----------------------------------------------------------------------===//
1502 // Preprocessor Include Directive Handling.
1503 //===----------------------------------------------------------------------===//
1504 
1505 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1506 /// checked and spelled filename, e.g. as an operand of \#include. This returns
1507 /// true if the input filename was in <>'s or false if it were in ""'s.  The
1508 /// caller is expected to provide a buffer that is large enough to hold the
1509 /// spelling of the filename, but is also expected to handle the case when
1510 /// this method decides to use a different buffer.
1511 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
1512                                               StringRef &Buffer) {
1513   // Get the text form of the filename.
1514   assert(!Buffer.empty() && "Can't have tokens with empty spellings!");
1515 
1516   // Make sure the filename is <x> or "x".
1517   bool isAngled;
1518   if (Buffer[0] == '<') {
1519     if (Buffer.back() != '>') {
1520       Diag(Loc, diag::err_pp_expects_filename);
1521       Buffer = StringRef();
1522       return true;
1523     }
1524     isAngled = true;
1525   } else if (Buffer[0] == '"') {
1526     if (Buffer.back() != '"') {
1527       Diag(Loc, diag::err_pp_expects_filename);
1528       Buffer = StringRef();
1529       return true;
1530     }
1531     isAngled = false;
1532   } else {
1533     Diag(Loc, diag::err_pp_expects_filename);
1534     Buffer = StringRef();
1535     return true;
1536   }
1537 
1538   // Diagnose #include "" as invalid.
1539   if (Buffer.size() <= 2) {
1540     Diag(Loc, diag::err_pp_empty_filename);
1541     Buffer = StringRef();
1542     return true;
1543   }
1544 
1545   // Skip the brackets.
1546   Buffer = Buffer.substr(1, Buffer.size()-2);
1547   return isAngled;
1548 }
1549 
1550 // Handle cases where the \#include name is expanded from a macro
1551 // as multiple tokens, which need to be glued together.
1552 //
1553 // This occurs for code like:
1554 // \code
1555 //    \#define FOO <a/b.h>
1556 //    \#include FOO
1557 // \endcode
1558 // because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1559 //
1560 // This code concatenates and consumes tokens up to the '>' token.  It returns
1561 // false if the > was found, otherwise it returns true if it finds and consumes
1562 // the EOD marker.
1563 bool Preprocessor::ConcatenateIncludeName(SmallString<128> &FilenameBuffer,
1564                                           SourceLocation &End) {
1565   Token CurTok;
1566 
1567   Lex(CurTok);
1568   while (CurTok.isNot(tok::eod)) {
1569     End = CurTok.getLocation();
1570 
1571     // FIXME: Provide code completion for #includes.
1572     if (CurTok.is(tok::code_completion)) {
1573       setCodeCompletionReached();
1574       Lex(CurTok);
1575       continue;
1576     }
1577 
1578     // Append the spelling of this token to the buffer. If there was a space
1579     // before it, add it now.
1580     if (CurTok.hasLeadingSpace())
1581       FilenameBuffer.push_back(' ');
1582 
1583     // Get the spelling of the token, directly into FilenameBuffer if possible.
1584     size_t PreAppendSize = FilenameBuffer.size();
1585     FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1586 
1587     const char *BufPtr = &FilenameBuffer[PreAppendSize];
1588     unsigned ActualLen = getSpelling(CurTok, BufPtr);
1589 
1590     // If the token was spelled somewhere else, copy it into FilenameBuffer.
1591     if (BufPtr != &FilenameBuffer[PreAppendSize])
1592       memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1593 
1594     // Resize FilenameBuffer to the correct size.
1595     if (CurTok.getLength() != ActualLen)
1596       FilenameBuffer.resize(PreAppendSize+ActualLen);
1597 
1598     // If we found the '>' marker, return success.
1599     if (CurTok.is(tok::greater))
1600       return false;
1601 
1602     Lex(CurTok);
1603   }
1604 
1605   // If we hit the eod marker, emit an error and return true so that the caller
1606   // knows the EOD has been read.
1607   Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1608   return true;
1609 }
1610 
1611 /// Push a token onto the token stream containing an annotation.
1612 void Preprocessor::EnterAnnotationToken(SourceRange Range,
1613                                         tok::TokenKind Kind,
1614                                         void *AnnotationVal) {
1615   // FIXME: Produce this as the current token directly, rather than
1616   // allocating a new token for it.
1617   auto Tok = llvm::make_unique<Token[]>(1);
1618   Tok[0].startToken();
1619   Tok[0].setKind(Kind);
1620   Tok[0].setLocation(Range.getBegin());
1621   Tok[0].setAnnotationEndLoc(Range.getEnd());
1622   Tok[0].setAnnotationValue(AnnotationVal);
1623   EnterTokenStream(std::move(Tok), 1, true);
1624 }
1625 
1626 /// Produce a diagnostic informing the user that a #include or similar
1627 /// was implicitly treated as a module import.
1628 static void diagnoseAutoModuleImport(
1629     Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok,
1630     ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path,
1631     SourceLocation PathEnd) {
1632   assert(PP.getLangOpts().ObjC2 && "no import syntax available");
1633 
1634   SmallString<128> PathString;
1635   for (size_t I = 0, N = Path.size(); I != N; ++I) {
1636     if (I)
1637       PathString += '.';
1638     PathString += Path[I].first->getName();
1639   }
1640   int IncludeKind = 0;
1641 
1642   switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) {
1643   case tok::pp_include:
1644     IncludeKind = 0;
1645     break;
1646 
1647   case tok::pp_import:
1648     IncludeKind = 1;
1649     break;
1650 
1651   case tok::pp_include_next:
1652     IncludeKind = 2;
1653     break;
1654 
1655   case tok::pp___include_macros:
1656     IncludeKind = 3;
1657     break;
1658 
1659   default:
1660     llvm_unreachable("unknown include directive kind");
1661   }
1662 
1663   CharSourceRange ReplaceRange(SourceRange(HashLoc, PathEnd),
1664                                /*IsTokenRange=*/false);
1665   PP.Diag(HashLoc, diag::warn_auto_module_import)
1666       << IncludeKind << PathString
1667       << FixItHint::CreateReplacement(ReplaceRange,
1668                                       ("@import " + PathString + ";").str());
1669 }
1670 
1671 // Given a vector of path components and a string containing the real
1672 // path to the file, build a properly-cased replacement in the vector,
1673 // and return true if the replacement should be suggested.
1674 static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components,
1675                             StringRef RealPathName) {
1676   auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName);
1677   auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName);
1678   int Cnt = 0;
1679   bool SuggestReplacement = false;
1680   // Below is a best-effort to handle ".." in paths. It is admittedly
1681   // not 100% correct in the presence of symlinks.
1682   for (auto &Component : llvm::reverse(Components)) {
1683     if ("." == Component) {
1684     } else if (".." == Component) {
1685       ++Cnt;
1686     } else if (Cnt) {
1687       --Cnt;
1688     } else if (RealPathComponentIter != RealPathComponentEnd) {
1689       if (Component != *RealPathComponentIter) {
1690         // If these path components differ by more than just case, then we
1691         // may be looking at symlinked paths. Bail on this diagnostic to avoid
1692         // noisy false positives.
1693         SuggestReplacement = RealPathComponentIter->equals_lower(Component);
1694         if (!SuggestReplacement)
1695           break;
1696         Component = *RealPathComponentIter;
1697       }
1698       ++RealPathComponentIter;
1699     }
1700   }
1701   return SuggestReplacement;
1702 }
1703 
1704 bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts,
1705                                           const TargetInfo &TargetInfo,
1706                                           DiagnosticsEngine &Diags, Module *M) {
1707   Module::Requirement Requirement;
1708   Module::UnresolvedHeaderDirective MissingHeader;
1709   Module *ShadowingModule = nullptr;
1710   if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader,
1711                      ShadowingModule))
1712     return false;
1713 
1714   if (MissingHeader.FileNameLoc.isValid()) {
1715     Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing)
1716         << MissingHeader.IsUmbrella << MissingHeader.FileName;
1717   } else if (ShadowingModule) {
1718     Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name;
1719     Diags.Report(ShadowingModule->DefinitionLoc,
1720                  diag::note_previous_definition);
1721   } else {
1722     // FIXME: Track the location at which the requirement was specified, and
1723     // use it here.
1724     Diags.Report(M->DefinitionLoc, diag::err_module_unavailable)
1725         << M->getFullModuleName() << Requirement.second << Requirement.first;
1726   }
1727   return true;
1728 }
1729 
1730 /// HandleIncludeDirective - The "\#include" tokens have just been read, read
1731 /// the file to be included from the lexer, then include it!  This is a common
1732 /// routine with functionality shared between \#include, \#include_next and
1733 /// \#import.  LookupFrom is set when this is a \#include_next directive, it
1734 /// specifies the file to start searching from.
1735 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
1736                                           Token &IncludeTok,
1737                                           const DirectoryLookup *LookupFrom,
1738                                           const FileEntry *LookupFromFile,
1739                                           bool isImport) {
1740   Token FilenameTok;
1741   CurPPLexer->LexIncludeFilename(FilenameTok);
1742 
1743   // Reserve a buffer to get the spelling.
1744   SmallString<128> FilenameBuffer;
1745   StringRef Filename;
1746   SourceLocation End;
1747   SourceLocation CharEnd; // the end of this directive, in characters
1748 
1749   switch (FilenameTok.getKind()) {
1750   case tok::eod:
1751     // If the token kind is EOD, the error has already been diagnosed.
1752     return;
1753 
1754   case tok::angle_string_literal:
1755   case tok::string_literal:
1756     Filename = getSpelling(FilenameTok, FilenameBuffer);
1757     End = FilenameTok.getLocation();
1758     CharEnd = End.getLocWithOffset(FilenameTok.getLength());
1759     break;
1760 
1761   case tok::less:
1762     // This could be a <foo/bar.h> file coming from a macro expansion.  In this
1763     // case, glue the tokens together into FilenameBuffer and interpret those.
1764     FilenameBuffer.push_back('<');
1765     if (ConcatenateIncludeName(FilenameBuffer, End))
1766       return;   // Found <eod> but no ">"?  Diagnostic already emitted.
1767     Filename = FilenameBuffer;
1768     CharEnd = End.getLocWithOffset(1);
1769     break;
1770   default:
1771     Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1772     DiscardUntilEndOfDirective();
1773     return;
1774   }
1775 
1776   CharSourceRange FilenameRange
1777     = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd);
1778   StringRef OriginalFilename = Filename;
1779   bool isAngled =
1780     GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename);
1781   // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1782   // error.
1783   if (Filename.empty()) {
1784     DiscardUntilEndOfDirective();
1785     return;
1786   }
1787 
1788   // Verify that there is nothing after the filename, other than EOD.  Note that
1789   // we allow macros that expand to nothing after the filename, because this
1790   // falls into the category of "#include pp-tokens new-line" specified in
1791   // C99 6.10.2p4.
1792   CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true);
1793 
1794   // Check that we don't have infinite #include recursion.
1795   if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) {
1796     Diag(FilenameTok, diag::err_pp_include_too_deep);
1797     return;
1798   }
1799 
1800   // Complain about attempts to #include files in an audit pragma.
1801   if (PragmaARCCFCodeAuditedLoc.isValid()) {
1802     Diag(HashLoc, diag::err_pp_include_in_arc_cf_code_audited);
1803     Diag(PragmaARCCFCodeAuditedLoc, diag::note_pragma_entered_here);
1804 
1805     // Immediately leave the pragma.
1806     PragmaARCCFCodeAuditedLoc = SourceLocation();
1807   }
1808 
1809   // Complain about attempts to #include files in an assume-nonnull pragma.
1810   if (PragmaAssumeNonNullLoc.isValid()) {
1811     Diag(HashLoc, diag::err_pp_include_in_assume_nonnull);
1812     Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here);
1813 
1814     // Immediately leave the pragma.
1815     PragmaAssumeNonNullLoc = SourceLocation();
1816   }
1817 
1818   if (HeaderInfo.HasIncludeAliasMap()) {
1819     // Map the filename with the brackets still attached.  If the name doesn't
1820     // map to anything, fall back on the filename we've already gotten the
1821     // spelling for.
1822     StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename);
1823     if (!NewName.empty())
1824       Filename = NewName;
1825   }
1826 
1827   // Search include directories.
1828   bool IsMapped = false;
1829   const DirectoryLookup *CurDir;
1830   SmallString<1024> SearchPath;
1831   SmallString<1024> RelativePath;
1832   // We get the raw path only if we have 'Callbacks' to which we later pass
1833   // the path.
1834   ModuleMap::KnownHeader SuggestedModule;
1835   SourceLocation FilenameLoc = FilenameTok.getLocation();
1836   SmallString<128> NormalizedPath;
1837   if (LangOpts.MSVCCompat) {
1838     NormalizedPath = Filename.str();
1839 #ifndef _WIN32
1840     llvm::sys::path::native(NormalizedPath);
1841 #endif
1842   }
1843   const FileEntry *File = LookupFile(
1844       FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename,
1845       isAngled, LookupFrom, LookupFromFile, CurDir,
1846       Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr,
1847       &SuggestedModule, &IsMapped);
1848 
1849   if (!File) {
1850     if (Callbacks) {
1851       // Give the clients a chance to recover.
1852       SmallString<128> RecoveryPath;
1853       if (Callbacks->FileNotFound(Filename, RecoveryPath)) {
1854         if (const DirectoryEntry *DE = FileMgr.getDirectory(RecoveryPath)) {
1855           // Add the recovery path to the list of search paths.
1856           DirectoryLookup DL(DE, SrcMgr::C_User, false);
1857           HeaderInfo.AddSearchPath(DL, isAngled);
1858 
1859           // Try the lookup again, skipping the cache.
1860           File = LookupFile(
1861               FilenameLoc,
1862               LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled,
1863               LookupFrom, LookupFromFile, CurDir, nullptr, nullptr,
1864               &SuggestedModule, &IsMapped, /*SkipCache*/ true);
1865         }
1866       }
1867     }
1868 
1869     if (!SuppressIncludeNotFoundError) {
1870       // If the file could not be located and it was included via angle
1871       // brackets, we can attempt a lookup as though it were a quoted path to
1872       // provide the user with a possible fixit.
1873       if (isAngled) {
1874         File = LookupFile(
1875             FilenameLoc,
1876             LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, false,
1877             LookupFrom, LookupFromFile, CurDir,
1878             Callbacks ? &SearchPath : nullptr,
1879             Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped);
1880         if (File) {
1881           SourceRange Range(FilenameTok.getLocation(), CharEnd);
1882           Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) <<
1883             Filename <<
1884             FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\"");
1885         }
1886       }
1887 
1888       // Check for likely typos due to leading or trailing non-isAlphanumeric
1889       // characters
1890       StringRef OriginalFilename = Filename;
1891       if (LangOpts.SpellChecking && !File) {
1892         // A heuristic to correct a typo file name by removing leading and
1893         // trailing non-isAlphanumeric characters.
1894         auto CorrectTypoFilename = [](llvm::StringRef Filename) {
1895           Filename = Filename.drop_until(isAlphanumeric);
1896           while (!Filename.empty() && !isAlphanumeric(Filename.back())) {
1897             Filename = Filename.drop_back();
1898           }
1899           return Filename;
1900         };
1901         StringRef TypoCorrectionName = CorrectTypoFilename(Filename);
1902         File = LookupFile(
1903             FilenameLoc,
1904             LangOpts.MSVCCompat ? NormalizedPath.c_str() : TypoCorrectionName,
1905             isAngled, LookupFrom, LookupFromFile, CurDir,
1906             Callbacks ? &SearchPath : nullptr,
1907             Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped);
1908         if (File) {
1909           SourceRange Range(FilenameTok.getLocation(), CharEnd);
1910           auto Hint = isAngled
1911                           ? FixItHint::CreateReplacement(
1912                                 Range, "<" + TypoCorrectionName.str() + ">")
1913                           : FixItHint::CreateReplacement(
1914                                 Range, "\"" + TypoCorrectionName.str() + "\"");
1915           Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal)
1916               << OriginalFilename << TypoCorrectionName << Hint;
1917           // We found the file, so set the Filename to the name after typo
1918           // correction.
1919           Filename = TypoCorrectionName;
1920         }
1921       }
1922 
1923       // If the file is still not found, just go with the vanilla diagnostic
1924       if (!File)
1925         Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename
1926                                                        << FilenameRange;
1927     }
1928   }
1929 
1930   if (usingPCHWithThroughHeader() && SkippingUntilPCHThroughHeader) {
1931     if (isPCHThroughHeader(File))
1932       SkippingUntilPCHThroughHeader = false;
1933     return;
1934   }
1935 
1936   // Should we enter the source file? Set to false if either the source file is
1937   // known to have no effect beyond its effect on module visibility -- that is,
1938   // if it's got an include guard that is already defined or is a modular header
1939   // we've imported or already built.
1940   bool ShouldEnter = true;
1941 
1942   if (PPOpts->SingleFileParseMode)
1943     ShouldEnter = false;
1944 
1945   // Any diagnostics after the fatal error will not be visible. As the
1946   // compilation failed already and errors in subsequently included files won't
1947   // be visible, avoid preprocessing those files.
1948   if (ShouldEnter && Diags->hasFatalErrorOccurred())
1949     ShouldEnter = false;
1950 
1951   // Determine whether we should try to import the module for this #include, if
1952   // there is one. Don't do so if precompiled module support is disabled or we
1953   // are processing this module textually (because we're building the module).
1954   if (ShouldEnter && File && SuggestedModule && getLangOpts().Modules &&
1955       !isForModuleBuilding(SuggestedModule.getModule(),
1956                            getLangOpts().CurrentModule,
1957                            getLangOpts().ModuleName)) {
1958     // If this include corresponds to a module but that module is
1959     // unavailable, diagnose the situation and bail out.
1960     // FIXME: Remove this; loadModule does the same check (but produces
1961     // slightly worse diagnostics).
1962     if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(),
1963                                SuggestedModule.getModule())) {
1964       Diag(FilenameTok.getLocation(),
1965            diag::note_implicit_top_level_module_import_here)
1966           << SuggestedModule.getModule()->getTopLevelModuleName();
1967       return;
1968     }
1969 
1970     // Compute the module access path corresponding to this module.
1971     // FIXME: Should we have a second loadModule() overload to avoid this
1972     // extra lookup step?
1973     SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path;
1974     for (Module *Mod = SuggestedModule.getModule(); Mod; Mod = Mod->Parent)
1975       Path.push_back(std::make_pair(getIdentifierInfo(Mod->Name),
1976                                     FilenameTok.getLocation()));
1977     std::reverse(Path.begin(), Path.end());
1978 
1979     // Warn that we're replacing the include/import with a module import.
1980     // We only do this in Objective-C, where we have a module-import syntax.
1981     if (getLangOpts().ObjC2)
1982       diagnoseAutoModuleImport(*this, HashLoc, IncludeTok, Path, CharEnd);
1983 
1984     // Load the module to import its macros. We'll make the declarations
1985     // visible when the parser gets here.
1986     // FIXME: Pass SuggestedModule in here rather than converting it to a path
1987     // and making the module loader convert it back again.
1988     ModuleLoadResult Imported = TheModuleLoader.loadModule(
1989         IncludeTok.getLocation(), Path, Module::Hidden,
1990         /*IsIncludeDirective=*/true);
1991     assert((Imported == nullptr || Imported == SuggestedModule.getModule()) &&
1992            "the imported module is different than the suggested one");
1993 
1994     if (Imported)
1995       ShouldEnter = false;
1996     else if (Imported.isMissingExpected()) {
1997       // We failed to find a submodule that we assumed would exist (because it
1998       // was in the directory of an umbrella header, for instance), but no
1999       // actual module containing it exists (because the umbrella header is
2000       // incomplete).  Treat this as a textual inclusion.
2001       SuggestedModule = ModuleMap::KnownHeader();
2002     } else if (Imported.isConfigMismatch()) {
2003       // On a configuration mismatch, enter the header textually. We still know
2004       // that it's part of the corresponding module.
2005     } else {
2006       // We hit an error processing the import. Bail out.
2007       if (hadModuleLoaderFatalFailure()) {
2008         // With a fatal failure in the module loader, we abort parsing.
2009         Token &Result = IncludeTok;
2010         if (CurLexer) {
2011           Result.startToken();
2012           CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd, tok::eof);
2013           CurLexer->cutOffLexing();
2014         } else {
2015           assert(CurPTHLexer && "#include but no current lexer set!");
2016           CurPTHLexer->getEOF(Result);
2017         }
2018       }
2019       return;
2020     }
2021   }
2022 
2023   // The #included file will be considered to be a system header if either it is
2024   // in a system include directory, or if the #includer is a system include
2025   // header.
2026   SrcMgr::CharacteristicKind FileCharacter =
2027       SourceMgr.getFileCharacteristic(FilenameTok.getLocation());
2028   if (File)
2029     FileCharacter = std::max(HeaderInfo.getFileDirFlavor(File), FileCharacter);
2030 
2031   // Ask HeaderInfo if we should enter this #include file.  If not, #including
2032   // this file will have no effect.
2033   bool SkipHeader = false;
2034   if (ShouldEnter && File &&
2035       !HeaderInfo.ShouldEnterIncludeFile(*this, File, isImport,
2036                                          getLangOpts().Modules,
2037                                          SuggestedModule.getModule())) {
2038     ShouldEnter = false;
2039     SkipHeader = true;
2040   }
2041 
2042   if (Callbacks) {
2043     // Notify the callback object that we've seen an inclusion directive.
2044     Callbacks->InclusionDirective(
2045         HashLoc, IncludeTok,
2046         LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled,
2047         FilenameRange, File, SearchPath, RelativePath,
2048         ShouldEnter ? nullptr : SuggestedModule.getModule(), FileCharacter);
2049     if (SkipHeader && !SuggestedModule.getModule())
2050       Callbacks->FileSkipped(*File, FilenameTok, FileCharacter);
2051   }
2052 
2053   if (!File)
2054     return;
2055 
2056   // FIXME: If we have a suggested module, and we've already visited this file,
2057   // don't bother entering it again. We know it has no further effect.
2058 
2059   // Issue a diagnostic if the name of the file on disk has a different case
2060   // than the one we're about to open.
2061   const bool CheckIncludePathPortability =
2062       !IsMapped && File && !File->tryGetRealPathName().empty();
2063 
2064   if (CheckIncludePathPortability) {
2065     StringRef Name = LangOpts.MSVCCompat ? NormalizedPath.str() : Filename;
2066     StringRef RealPathName = File->tryGetRealPathName();
2067     SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name),
2068                                           llvm::sys::path::end(Name));
2069 
2070     if (trySimplifyPath(Components, RealPathName)) {
2071       SmallString<128> Path;
2072       Path.reserve(Name.size()+2);
2073       Path.push_back(isAngled ? '<' : '"');
2074       bool isLeadingSeparator = llvm::sys::path::is_absolute(Name);
2075       for (auto Component : Components) {
2076         if (isLeadingSeparator)
2077           isLeadingSeparator = false;
2078         else
2079           Path.append(Component);
2080         // Append the separator the user used, or the close quote
2081         Path.push_back(
2082           Path.size() <= Filename.size() ? Filename[Path.size()-1] :
2083             (isAngled ? '>' : '"'));
2084       }
2085       // For user files and known standard headers, by default we issue a diagnostic.
2086       // For other system headers, we don't. They can be controlled separately.
2087       auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ?
2088           diag::pp_nonportable_path : diag::pp_nonportable_system_path;
2089       SourceRange Range(FilenameTok.getLocation(), CharEnd);
2090       Diag(FilenameTok, DiagId) << Path <<
2091         FixItHint::CreateReplacement(Range, Path);
2092     }
2093   }
2094 
2095   // If we don't need to enter the file, stop now.
2096   if (!ShouldEnter) {
2097     // If this is a module import, make it visible if needed.
2098     if (auto *M = SuggestedModule.getModule()) {
2099       // When building a pch, -fmodule-name tells the compiler to textually
2100       // include headers in the specified module. But it is possible that
2101       // ShouldEnter is false because we are skipping the header. In that
2102       // case, We are not importing the specified module.
2103       if (SkipHeader && getLangOpts().CompilingPCH &&
2104           isForModuleBuilding(M, getLangOpts().CurrentModule,
2105                               getLangOpts().ModuleName))
2106         return;
2107 
2108       makeModuleVisible(M, HashLoc);
2109 
2110       if (IncludeTok.getIdentifierInfo()->getPPKeywordID() !=
2111           tok::pp___include_macros)
2112         EnterAnnotationToken(SourceRange(HashLoc, End),
2113                              tok::annot_module_include, M);
2114     }
2115     return;
2116   }
2117 
2118   // Look up the file, create a File ID for it.
2119   SourceLocation IncludePos = End;
2120   // If the filename string was the result of macro expansions, set the include
2121   // position on the file where it will be included and after the expansions.
2122   if (IncludePos.isMacroID())
2123     IncludePos = SourceMgr.getExpansionRange(IncludePos).getEnd();
2124   FileID FID = SourceMgr.createFileID(File, IncludePos, FileCharacter);
2125   assert(FID.isValid() && "Expected valid file ID");
2126 
2127   // If all is good, enter the new file!
2128   if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation()))
2129     return;
2130 
2131   // Determine if we're switching to building a new submodule, and which one.
2132   if (auto *M = SuggestedModule.getModule()) {
2133     if (M->getTopLevelModule()->ShadowingModule) {
2134       // We are building a submodule that belongs to a shadowed module. This
2135       // means we find header files in the shadowed module.
2136       Diag(M->DefinitionLoc, diag::err_module_build_shadowed_submodule)
2137         << M->getFullModuleName();
2138       Diag(M->getTopLevelModule()->ShadowingModule->DefinitionLoc,
2139            diag::note_previous_definition);
2140       return;
2141     }
2142     // When building a pch, -fmodule-name tells the compiler to textually
2143     // include headers in the specified module. We are not building the
2144     // specified module.
2145     if (getLangOpts().CompilingPCH &&
2146         isForModuleBuilding(M, getLangOpts().CurrentModule,
2147                             getLangOpts().ModuleName))
2148       return;
2149 
2150     assert(!CurLexerSubmodule && "should not have marked this as a module yet");
2151     CurLexerSubmodule = M;
2152 
2153     // Let the macro handling code know that any future macros are within
2154     // the new submodule.
2155     EnterSubmodule(M, HashLoc, /*ForPragma*/false);
2156 
2157     // Let the parser know that any future declarations are within the new
2158     // submodule.
2159     // FIXME: There's no point doing this if we're handling a #__include_macros
2160     // directive.
2161     EnterAnnotationToken(SourceRange(HashLoc, End), tok::annot_module_begin, M);
2162   }
2163 }
2164 
2165 /// HandleIncludeNextDirective - Implements \#include_next.
2166 ///
2167 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc,
2168                                               Token &IncludeNextTok) {
2169   Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
2170 
2171   // #include_next is like #include, except that we start searching after
2172   // the current found directory.  If we can't do this, issue a
2173   // diagnostic.
2174   const DirectoryLookup *Lookup = CurDirLookup;
2175   const FileEntry *LookupFromFile = nullptr;
2176   if (isInPrimaryFile() && LangOpts.IsHeaderFile) {
2177     // If the main file is a header, then it's either for PCH/AST generation,
2178     // or libclang opened it. Either way, handle it as a normal include below
2179     // and do not complain about include_next.
2180   } else if (isInPrimaryFile()) {
2181     Lookup = nullptr;
2182     Diag(IncludeNextTok, diag::pp_include_next_in_primary);
2183   } else if (CurLexerSubmodule) {
2184     // Start looking up in the directory *after* the one in which the current
2185     // file would be found, if any.
2186     assert(CurPPLexer && "#include_next directive in macro?");
2187     LookupFromFile = CurPPLexer->getFileEntry();
2188     Lookup = nullptr;
2189   } else if (!Lookup) {
2190     Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
2191   } else {
2192     // Start looking up in the next directory.
2193     ++Lookup;
2194   }
2195 
2196   return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup,
2197                                 LookupFromFile);
2198 }
2199 
2200 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode
2201 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) {
2202   // The Microsoft #import directive takes a type library and generates header
2203   // files from it, and includes those.  This is beyond the scope of what clang
2204   // does, so we ignore it and error out.  However, #import can optionally have
2205   // trailing attributes that span multiple lines.  We're going to eat those
2206   // so we can continue processing from there.
2207   Diag(Tok, diag::err_pp_import_directive_ms );
2208 
2209   // Read tokens until we get to the end of the directive.  Note that the
2210   // directive can be split over multiple lines using the backslash character.
2211   DiscardUntilEndOfDirective();
2212 }
2213 
2214 /// HandleImportDirective - Implements \#import.
2215 ///
2216 void Preprocessor::HandleImportDirective(SourceLocation HashLoc,
2217                                          Token &ImportTok) {
2218   if (!LangOpts.ObjC1) {  // #import is standard for ObjC.
2219     if (LangOpts.MSVCCompat)
2220       return HandleMicrosoftImportDirective(ImportTok);
2221     Diag(ImportTok, diag::ext_pp_import_directive);
2222   }
2223   return HandleIncludeDirective(HashLoc, ImportTok, nullptr, nullptr, true);
2224 }
2225 
2226 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a
2227 /// pseudo directive in the predefines buffer.  This handles it by sucking all
2228 /// tokens through the preprocessor and discarding them (only keeping the side
2229 /// effects on the preprocessor).
2230 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc,
2231                                                 Token &IncludeMacrosTok) {
2232   // This directive should only occur in the predefines buffer.  If not, emit an
2233   // error and reject it.
2234   SourceLocation Loc = IncludeMacrosTok.getLocation();
2235   if (SourceMgr.getBufferName(Loc) != "<built-in>") {
2236     Diag(IncludeMacrosTok.getLocation(),
2237          diag::pp_include_macros_out_of_predefines);
2238     DiscardUntilEndOfDirective();
2239     return;
2240   }
2241 
2242   // Treat this as a normal #include for checking purposes.  If this is
2243   // successful, it will push a new lexer onto the include stack.
2244   HandleIncludeDirective(HashLoc, IncludeMacrosTok);
2245 
2246   Token TmpTok;
2247   do {
2248     Lex(TmpTok);
2249     assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!");
2250   } while (TmpTok.isNot(tok::hashhash));
2251 }
2252 
2253 //===----------------------------------------------------------------------===//
2254 // Preprocessor Macro Directive Handling.
2255 //===----------------------------------------------------------------------===//
2256 
2257 /// ReadMacroParameterList - The ( starting a parameter list of a macro
2258 /// definition has just been read.  Lex the rest of the parameters and the
2259 /// closing ), updating MI with what we learn.  Return true if an error occurs
2260 /// parsing the param list.
2261 bool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {
2262   SmallVector<IdentifierInfo*, 32> Parameters;
2263 
2264   while (true) {
2265     LexUnexpandedToken(Tok);
2266     switch (Tok.getKind()) {
2267     case tok::r_paren:
2268       // Found the end of the parameter list.
2269       if (Parameters.empty())  // #define FOO()
2270         return false;
2271       // Otherwise we have #define FOO(A,)
2272       Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
2273       return true;
2274     case tok::ellipsis:  // #define X(... -> C99 varargs
2275       if (!LangOpts.C99)
2276         Diag(Tok, LangOpts.CPlusPlus11 ?
2277              diag::warn_cxx98_compat_variadic_macro :
2278              diag::ext_variadic_macro);
2279 
2280       // OpenCL v1.2 s6.9.e: variadic macros are not supported.
2281       if (LangOpts.OpenCL) {
2282         Diag(Tok, diag::err_pp_opencl_variadic_macros);
2283         return true;
2284       }
2285 
2286       // Lex the token after the identifier.
2287       LexUnexpandedToken(Tok);
2288       if (Tok.isNot(tok::r_paren)) {
2289         Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2290         return true;
2291       }
2292       // Add the __VA_ARGS__ identifier as a parameter.
2293       Parameters.push_back(Ident__VA_ARGS__);
2294       MI->setIsC99Varargs();
2295       MI->setParameterList(Parameters, BP);
2296       return false;
2297     case tok::eod:  // #define X(
2298       Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2299       return true;
2300     default:
2301       // Handle keywords and identifiers here to accept things like
2302       // #define Foo(for) for.
2303       IdentifierInfo *II = Tok.getIdentifierInfo();
2304       if (!II) {
2305         // #define X(1
2306         Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
2307         return true;
2308       }
2309 
2310       // If this is already used as a parameter, it is used multiple times (e.g.
2311       // #define X(A,A.
2312       if (std::find(Parameters.begin(), Parameters.end(), II) !=
2313           Parameters.end()) {  // C99 6.10.3p6
2314         Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II;
2315         return true;
2316       }
2317 
2318       // Add the parameter to the macro info.
2319       Parameters.push_back(II);
2320 
2321       // Lex the token after the identifier.
2322       LexUnexpandedToken(Tok);
2323 
2324       switch (Tok.getKind()) {
2325       default:          // #define X(A B
2326         Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
2327         return true;
2328       case tok::r_paren: // #define X(A)
2329         MI->setParameterList(Parameters, BP);
2330         return false;
2331       case tok::comma:  // #define X(A,
2332         break;
2333       case tok::ellipsis:  // #define X(A... -> GCC extension
2334         // Diagnose extension.
2335         Diag(Tok, diag::ext_named_variadic_macro);
2336 
2337         // Lex the token after the identifier.
2338         LexUnexpandedToken(Tok);
2339         if (Tok.isNot(tok::r_paren)) {
2340           Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2341           return true;
2342         }
2343 
2344         MI->setIsGNUVarargs();
2345         MI->setParameterList(Parameters, BP);
2346         return false;
2347       }
2348     }
2349   }
2350 }
2351 
2352 static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI,
2353                                    const LangOptions &LOptions) {
2354   if (MI->getNumTokens() == 1) {
2355     const Token &Value = MI->getReplacementToken(0);
2356 
2357     // Macro that is identity, like '#define inline inline' is a valid pattern.
2358     if (MacroName.getKind() == Value.getKind())
2359       return true;
2360 
2361     // Macro that maps a keyword to the same keyword decorated with leading/
2362     // trailing underscores is a valid pattern:
2363     //    #define inline __inline
2364     //    #define inline __inline__
2365     //    #define inline _inline (in MS compatibility mode)
2366     StringRef MacroText = MacroName.getIdentifierInfo()->getName();
2367     if (IdentifierInfo *II = Value.getIdentifierInfo()) {
2368       if (!II->isKeyword(LOptions))
2369         return false;
2370       StringRef ValueText = II->getName();
2371       StringRef TrimmedValue = ValueText;
2372       if (!ValueText.startswith("__")) {
2373         if (ValueText.startswith("_"))
2374           TrimmedValue = TrimmedValue.drop_front(1);
2375         else
2376           return false;
2377       } else {
2378         TrimmedValue = TrimmedValue.drop_front(2);
2379         if (TrimmedValue.endswith("__"))
2380           TrimmedValue = TrimmedValue.drop_back(2);
2381       }
2382       return TrimmedValue.equals(MacroText);
2383     } else {
2384       return false;
2385     }
2386   }
2387 
2388   // #define inline
2389   return MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static,
2390                            tok::kw_const) &&
2391          MI->getNumTokens() == 0;
2392 }
2393 
2394 // ReadOptionalMacroParameterListAndBody - This consumes all (i.e. the
2395 // entire line) of the macro's tokens and adds them to MacroInfo, and while
2396 // doing so performs certain validity checks including (but not limited to):
2397 //   - # (stringization) is followed by a macro parameter
2398 //
2399 //  Returns a nullptr if an invalid sequence of tokens is encountered or returns
2400 //  a pointer to a MacroInfo object.
2401 
2402 MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(
2403     const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {
2404 
2405   Token LastTok = MacroNameTok;
2406   // Create the new macro.
2407   MacroInfo *const MI = AllocateMacroInfo(MacroNameTok.getLocation());
2408 
2409   Token Tok;
2410   LexUnexpandedToken(Tok);
2411 
2412   // Used to un-poison and then re-poison identifiers of the __VA_ARGS__ ilk
2413   // within their appropriate context.
2414   VariadicMacroScopeGuard VariadicMacroScopeGuard(*this);
2415 
2416   // If this is a function-like macro definition, parse the argument list,
2417   // marking each of the identifiers as being used as macro arguments.  Also,
2418   // check other constraints on the first token of the macro body.
2419   if (Tok.is(tok::eod)) {
2420     if (ImmediatelyAfterHeaderGuard) {
2421       // Save this macro information since it may part of a header guard.
2422       CurPPLexer->MIOpt.SetDefinedMacro(MacroNameTok.getIdentifierInfo(),
2423                                         MacroNameTok.getLocation());
2424     }
2425     // If there is no body to this macro, we have no special handling here.
2426   } else if (Tok.hasLeadingSpace()) {
2427     // This is a normal token with leading space.  Clear the leading space
2428     // marker on the first token to get proper expansion.
2429     Tok.clearFlag(Token::LeadingSpace);
2430   } else if (Tok.is(tok::l_paren)) {
2431     // This is a function-like macro definition.  Read the argument list.
2432     MI->setIsFunctionLike();
2433     if (ReadMacroParameterList(MI, LastTok)) {
2434       // Throw away the rest of the line.
2435       if (CurPPLexer->ParsingPreprocessorDirective)
2436         DiscardUntilEndOfDirective();
2437       return nullptr;
2438     }
2439 
2440     // If this is a definition of an ISO C/C++ variadic function-like macro (not
2441     // using the GNU named varargs extension) inform our variadic scope guard
2442     // which un-poisons and re-poisons certain identifiers (e.g. __VA_ARGS__)
2443     // allowed only within the definition of a variadic macro.
2444 
2445     if (MI->isC99Varargs()) {
2446       VariadicMacroScopeGuard.enterScope();
2447     }
2448 
2449     // Read the first token after the arg list for down below.
2450     LexUnexpandedToken(Tok);
2451   } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {
2452     // C99 requires whitespace between the macro definition and the body.  Emit
2453     // a diagnostic for something like "#define X+".
2454     Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
2455   } else {
2456     // C90 6.8 TC1 says: "In the definition of an object-like macro, if the
2457     // first character of a replacement list is not a character required by
2458     // subclause 5.2.1, then there shall be white-space separation between the
2459     // identifier and the replacement list.".  5.2.1 lists this set:
2460     //   "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which
2461     // is irrelevant here.
2462     bool isInvalid = false;
2463     if (Tok.is(tok::at)) // @ is not in the list above.
2464       isInvalid = true;
2465     else if (Tok.is(tok::unknown)) {
2466       // If we have an unknown token, it is something strange like "`".  Since
2467       // all of valid characters would have lexed into a single character
2468       // token of some sort, we know this is not a valid case.
2469       isInvalid = true;
2470     }
2471     if (isInvalid)
2472       Diag(Tok, diag::ext_missing_whitespace_after_macro_name);
2473     else
2474       Diag(Tok, diag::warn_missing_whitespace_after_macro_name);
2475   }
2476 
2477   if (!Tok.is(tok::eod))
2478     LastTok = Tok;
2479 
2480   // Read the rest of the macro body.
2481   if (MI->isObjectLike()) {
2482     // Object-like macros are very simple, just read their body.
2483     while (Tok.isNot(tok::eod)) {
2484       LastTok = Tok;
2485       MI->AddTokenToBody(Tok);
2486       // Get the next token of the macro.
2487       LexUnexpandedToken(Tok);
2488     }
2489   } else {
2490     // Otherwise, read the body of a function-like macro.  While we are at it,
2491     // check C99 6.10.3.2p1: ensure that # operators are followed by macro
2492     // parameters in function-like macro expansions.
2493 
2494     VAOptDefinitionContext VAOCtx(*this);
2495 
2496     while (Tok.isNot(tok::eod)) {
2497       LastTok = Tok;
2498 
2499       if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {
2500         MI->AddTokenToBody(Tok);
2501 
2502         if (VAOCtx.isVAOptToken(Tok)) {
2503           // If we're already within a VAOPT, emit an error.
2504           if (VAOCtx.isInVAOpt()) {
2505             Diag(Tok, diag::err_pp_vaopt_nested_use);
2506             return nullptr;
2507           }
2508           // Ensure VAOPT is followed by a '(' .
2509           LexUnexpandedToken(Tok);
2510           if (Tok.isNot(tok::l_paren)) {
2511             Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);
2512             return nullptr;
2513           }
2514           MI->AddTokenToBody(Tok);
2515           VAOCtx.sawVAOptFollowedByOpeningParens(Tok.getLocation());
2516           LexUnexpandedToken(Tok);
2517           if (Tok.is(tok::hashhash)) {
2518             Diag(Tok, diag::err_vaopt_paste_at_start);
2519             return nullptr;
2520           }
2521           continue;
2522         } else if (VAOCtx.isInVAOpt()) {
2523           if (Tok.is(tok::r_paren)) {
2524             if (VAOCtx.sawClosingParen()) {
2525               const unsigned NumTokens = MI->getNumTokens();
2526               assert(NumTokens >= 3 && "Must have seen at least __VA_OPT__( "
2527                                        "and a subsequent tok::r_paren");
2528               if (MI->getReplacementToken(NumTokens - 2).is(tok::hashhash)) {
2529                 Diag(Tok, diag::err_vaopt_paste_at_end);
2530                 return nullptr;
2531               }
2532             }
2533           } else if (Tok.is(tok::l_paren)) {
2534             VAOCtx.sawOpeningParen(Tok.getLocation());
2535           }
2536         }
2537         // Get the next token of the macro.
2538         LexUnexpandedToken(Tok);
2539         continue;
2540       }
2541 
2542       // If we're in -traditional mode, then we should ignore stringification
2543       // and token pasting. Mark the tokens as unknown so as not to confuse
2544       // things.
2545       if (getLangOpts().TraditionalCPP) {
2546         Tok.setKind(tok::unknown);
2547         MI->AddTokenToBody(Tok);
2548 
2549         // Get the next token of the macro.
2550         LexUnexpandedToken(Tok);
2551         continue;
2552       }
2553 
2554       if (Tok.is(tok::hashhash)) {
2555         // If we see token pasting, check if it looks like the gcc comma
2556         // pasting extension.  We'll use this information to suppress
2557         // diagnostics later on.
2558 
2559         // Get the next token of the macro.
2560         LexUnexpandedToken(Tok);
2561 
2562         if (Tok.is(tok::eod)) {
2563           MI->AddTokenToBody(LastTok);
2564           break;
2565         }
2566 
2567         unsigned NumTokens = MI->getNumTokens();
2568         if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ &&
2569             MI->getReplacementToken(NumTokens-1).is(tok::comma))
2570           MI->setHasCommaPasting();
2571 
2572         // Things look ok, add the '##' token to the macro.
2573         MI->AddTokenToBody(LastTok);
2574         continue;
2575       }
2576 
2577       // Our Token is a stringization operator.
2578       // Get the next token of the macro.
2579       LexUnexpandedToken(Tok);
2580 
2581       // Check for a valid macro arg identifier or __VA_OPT__.
2582       if (!VAOCtx.isVAOptToken(Tok) &&
2583           (Tok.getIdentifierInfo() == nullptr ||
2584            MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {
2585 
2586         // If this is assembler-with-cpp mode, we accept random gibberish after
2587         // the '#' because '#' is often a comment character.  However, change
2588         // the kind of the token to tok::unknown so that the preprocessor isn't
2589         // confused.
2590         if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {
2591           LastTok.setKind(tok::unknown);
2592           MI->AddTokenToBody(LastTok);
2593           continue;
2594         } else {
2595           Diag(Tok, diag::err_pp_stringize_not_parameter)
2596             << LastTok.is(tok::hashat);
2597           return nullptr;
2598         }
2599       }
2600 
2601       // Things look ok, add the '#' and param name tokens to the macro.
2602       MI->AddTokenToBody(LastTok);
2603 
2604       // If the token following '#' is VAOPT, let the next iteration handle it
2605       // and check it for correctness, otherwise add the token and prime the
2606       // loop with the next one.
2607       if (!VAOCtx.isVAOptToken(Tok)) {
2608         MI->AddTokenToBody(Tok);
2609         LastTok = Tok;
2610 
2611         // Get the next token of the macro.
2612         LexUnexpandedToken(Tok);
2613       }
2614     }
2615     if (VAOCtx.isInVAOpt()) {
2616       assert(Tok.is(tok::eod) && "Must be at End Of preprocessing Directive");
2617       Diag(Tok, diag::err_pp_expected_after)
2618         << LastTok.getKind() << tok::r_paren;
2619       Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren;
2620       return nullptr;
2621     }
2622   }
2623   MI->setDefinitionEndLoc(LastTok.getLocation());
2624   return MI;
2625 }
2626 /// HandleDefineDirective - Implements \#define.  This consumes the entire macro
2627 /// line then lets the caller lex the next real token.
2628 void Preprocessor::HandleDefineDirective(
2629     Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {
2630   ++NumDefined;
2631 
2632   Token MacroNameTok;
2633   bool MacroShadowsKeyword;
2634   ReadMacroName(MacroNameTok, MU_Define, &MacroShadowsKeyword);
2635 
2636   // Error reading macro name?  If so, diagnostic already issued.
2637   if (MacroNameTok.is(tok::eod))
2638     return;
2639 
2640   // If we are supposed to keep comments in #defines, reenable comment saving
2641   // mode.
2642   if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments);
2643 
2644   MacroInfo *const MI = ReadOptionalMacroParameterListAndBody(
2645       MacroNameTok, ImmediatelyAfterHeaderGuard);
2646 
2647   if (!MI) return;
2648 
2649   if (MacroShadowsKeyword &&
2650       !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) {
2651     Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword);
2652   }
2653   // Check that there is no paste (##) operator at the beginning or end of the
2654   // replacement list.
2655   unsigned NumTokens = MI->getNumTokens();
2656   if (NumTokens != 0) {
2657     if (MI->getReplacementToken(0).is(tok::hashhash)) {
2658       Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
2659       return;
2660     }
2661     if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
2662       Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
2663       return;
2664     }
2665   }
2666 
2667   // When skipping just warn about macros that do not match.
2668   if (SkippingUntilPCHThroughHeader) {
2669     const MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo());
2670     if (!OtherMI || !MI->isIdenticalTo(*OtherMI, *this,
2671                              /*Syntactic=*/LangOpts.MicrosoftExt))
2672       Diag(MI->getDefinitionLoc(), diag::warn_pp_macro_def_mismatch_with_pch)
2673           << MacroNameTok.getIdentifierInfo();
2674     return;
2675   }
2676 
2677   // Finally, if this identifier already had a macro defined for it, verify that
2678   // the macro bodies are identical, and issue diagnostics if they are not.
2679   if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) {
2680     // In Objective-C, ignore attempts to directly redefine the builtin
2681     // definitions of the ownership qualifiers.  It's still possible to
2682     // #undef them.
2683     auto isObjCProtectedMacro = [](const IdentifierInfo *II) -> bool {
2684       return II->isStr("__strong") ||
2685              II->isStr("__weak") ||
2686              II->isStr("__unsafe_unretained") ||
2687              II->isStr("__autoreleasing");
2688     };
2689    if (getLangOpts().ObjC1 &&
2690         SourceMgr.getFileID(OtherMI->getDefinitionLoc())
2691           == getPredefinesFileID() &&
2692         isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) {
2693       // Warn if it changes the tokens.
2694       if ((!getDiagnostics().getSuppressSystemWarnings() ||
2695            !SourceMgr.isInSystemHeader(DefineTok.getLocation())) &&
2696           !MI->isIdenticalTo(*OtherMI, *this,
2697                              /*Syntactic=*/LangOpts.MicrosoftExt)) {
2698         Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored);
2699       }
2700       assert(!OtherMI->isWarnIfUnused());
2701       return;
2702     }
2703 
2704     // It is very common for system headers to have tons of macro redefinitions
2705     // and for warnings to be disabled in system headers.  If this is the case,
2706     // then don't bother calling MacroInfo::isIdenticalTo.
2707     if (!getDiagnostics().getSuppressSystemWarnings() ||
2708         !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {
2709       if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())
2710         Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
2711 
2712       // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and
2713       // C++ [cpp.predefined]p4, but allow it as an extension.
2714       if (OtherMI->isBuiltinMacro())
2715         Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro);
2716       // Macros must be identical.  This means all tokens and whitespace
2717       // separation must be the same.  C99 6.10.3p2.
2718       else if (!OtherMI->isAllowRedefinitionsWithoutWarning() &&
2719                !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {
2720         Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef)
2721           << MacroNameTok.getIdentifierInfo();
2722         Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition);
2723       }
2724     }
2725     if (OtherMI->isWarnIfUnused())
2726       WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc());
2727   }
2728 
2729   DefMacroDirective *MD =
2730       appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI);
2731 
2732   assert(!MI->isUsed());
2733   // If we need warning for not using the macro, add its location in the
2734   // warn-because-unused-macro set. If it gets used it will be removed from set.
2735   if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) &&
2736       !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc())) {
2737     MI->setIsWarnIfUnused(true);
2738     WarnUnusedMacroLocs.insert(MI->getDefinitionLoc());
2739   }
2740 
2741   // If the callbacks want to know, tell them about the macro definition.
2742   if (Callbacks)
2743     Callbacks->MacroDefined(MacroNameTok, MD);
2744 }
2745 
2746 /// HandleUndefDirective - Implements \#undef.
2747 ///
2748 void Preprocessor::HandleUndefDirective() {
2749   ++NumUndefined;
2750 
2751   Token MacroNameTok;
2752   ReadMacroName(MacroNameTok, MU_Undef);
2753 
2754   // Error reading macro name?  If so, diagnostic already issued.
2755   if (MacroNameTok.is(tok::eod))
2756     return;
2757 
2758   // Check to see if this is the last token on the #undef line.
2759   CheckEndOfDirective("undef");
2760 
2761   // Okay, we have a valid identifier to undef.
2762   auto *II = MacroNameTok.getIdentifierInfo();
2763   auto MD = getMacroDefinition(II);
2764   UndefMacroDirective *Undef = nullptr;
2765 
2766   // If the macro is not defined, this is a noop undef.
2767   if (const MacroInfo *MI = MD.getMacroInfo()) {
2768     if (!MI->isUsed() && MI->isWarnIfUnused())
2769       Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
2770 
2771     if (MI->isWarnIfUnused())
2772       WarnUnusedMacroLocs.erase(MI->getDefinitionLoc());
2773 
2774     Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation());
2775   }
2776 
2777   // If the callbacks want to know, tell them about the macro #undef.
2778   // Note: no matter if the macro was defined or not.
2779   if (Callbacks)
2780     Callbacks->MacroUndefined(MacroNameTok, MD, Undef);
2781 
2782   if (Undef)
2783     appendMacroDirective(II, Undef);
2784 }
2785 
2786 //===----------------------------------------------------------------------===//
2787 // Preprocessor Conditional Directive Handling.
2788 //===----------------------------------------------------------------------===//
2789 
2790 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive.  isIfndef
2791 /// is true when this is a \#ifndef directive.  ReadAnyTokensBeforeDirective is
2792 /// true if any tokens have been returned or pp-directives activated before this
2793 /// \#ifndef has been lexed.
2794 ///
2795 void Preprocessor::HandleIfdefDirective(Token &Result,
2796                                         const Token &HashToken,
2797                                         bool isIfndef,
2798                                         bool ReadAnyTokensBeforeDirective) {
2799   ++NumIf;
2800   Token DirectiveTok = Result;
2801 
2802   Token MacroNameTok;
2803   ReadMacroName(MacroNameTok);
2804 
2805   // Error reading macro name?  If so, diagnostic already issued.
2806   if (MacroNameTok.is(tok::eod)) {
2807     // Skip code until we get to #endif.  This helps with recovery by not
2808     // emitting an error when the #endif is reached.
2809     SkipExcludedConditionalBlock(HashToken.getLocation(),
2810                                  DirectiveTok.getLocation(),
2811                                  /*Foundnonskip*/ false, /*FoundElse*/ false);
2812     return;
2813   }
2814 
2815   // Check to see if this is the last token on the #if[n]def line.
2816   CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef");
2817 
2818   IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
2819   auto MD = getMacroDefinition(MII);
2820   MacroInfo *MI = MD.getMacroInfo();
2821 
2822   if (CurPPLexer->getConditionalStackDepth() == 0) {
2823     // If the start of a top-level #ifdef and if the macro is not defined,
2824     // inform MIOpt that this might be the start of a proper include guard.
2825     // Otherwise it is some other form of unknown conditional which we can't
2826     // handle.
2827     if (!ReadAnyTokensBeforeDirective && !MI) {
2828       assert(isIfndef && "#ifdef shouldn't reach here");
2829       CurPPLexer->MIOpt.EnterTopLevelIfndef(MII, MacroNameTok.getLocation());
2830     } else
2831       CurPPLexer->MIOpt.EnterTopLevelConditional();
2832   }
2833 
2834   // If there is a macro, process it.
2835   if (MI)  // Mark it used.
2836     markMacroAsUsed(MI);
2837 
2838   if (Callbacks) {
2839     if (isIfndef)
2840       Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD);
2841     else
2842       Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD);
2843   }
2844 
2845   // Should we include the stuff contained by this directive?
2846   if (PPOpts->SingleFileParseMode && !MI) {
2847     // In 'single-file-parse mode' undefined identifiers trigger parsing of all
2848     // the directive blocks.
2849     CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(),
2850                                      /*wasskip*/false, /*foundnonskip*/false,
2851                                      /*foundelse*/false);
2852   } else if (!MI == isIfndef) {
2853     // Yes, remember that we are inside a conditional, then lex the next token.
2854     CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(),
2855                                      /*wasskip*/false, /*foundnonskip*/true,
2856                                      /*foundelse*/false);
2857   } else {
2858     // No, skip the contents of this block.
2859     SkipExcludedConditionalBlock(HashToken.getLocation(),
2860                                  DirectiveTok.getLocation(),
2861                                  /*Foundnonskip*/ false,
2862                                  /*FoundElse*/ false);
2863   }
2864 }
2865 
2866 /// HandleIfDirective - Implements the \#if directive.
2867 ///
2868 void Preprocessor::HandleIfDirective(Token &IfToken,
2869                                      const Token &HashToken,
2870                                      bool ReadAnyTokensBeforeDirective) {
2871   ++NumIf;
2872 
2873   // Parse and evaluate the conditional expression.
2874   IdentifierInfo *IfNDefMacro = nullptr;
2875   const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation();
2876   const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro);
2877   const bool ConditionalTrue = DER.Conditional;
2878   const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation();
2879 
2880   // If this condition is equivalent to #ifndef X, and if this is the first
2881   // directive seen, handle it for the multiple-include optimization.
2882   if (CurPPLexer->getConditionalStackDepth() == 0) {
2883     if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue)
2884       // FIXME: Pass in the location of the macro name, not the 'if' token.
2885       CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation());
2886     else
2887       CurPPLexer->MIOpt.EnterTopLevelConditional();
2888   }
2889 
2890   if (Callbacks)
2891     Callbacks->If(IfToken.getLocation(),
2892                   SourceRange(ConditionalBegin, ConditionalEnd),
2893                   (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False));
2894 
2895   // Should we include the stuff contained by this directive?
2896   if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) {
2897     // In 'single-file-parse mode' undefined identifiers trigger parsing of all
2898     // the directive blocks.
2899     CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
2900                                      /*foundnonskip*/false, /*foundelse*/false);
2901   } else if (ConditionalTrue) {
2902     // Yes, remember that we are inside a conditional, then lex the next token.
2903     CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
2904                                    /*foundnonskip*/true, /*foundelse*/false);
2905   } else {
2906     // No, skip the contents of this block.
2907     SkipExcludedConditionalBlock(HashToken.getLocation(), IfToken.getLocation(),
2908                                  /*Foundnonskip*/ false,
2909                                  /*FoundElse*/ false);
2910   }
2911 }
2912 
2913 /// HandleEndifDirective - Implements the \#endif directive.
2914 ///
2915 void Preprocessor::HandleEndifDirective(Token &EndifToken) {
2916   ++NumEndif;
2917 
2918   // Check that this is the whole directive.
2919   CheckEndOfDirective("endif");
2920 
2921   PPConditionalInfo CondInfo;
2922   if (CurPPLexer->popConditionalLevel(CondInfo)) {
2923     // No conditionals on the stack: this is an #endif without an #if.
2924     Diag(EndifToken, diag::err_pp_endif_without_if);
2925     return;
2926   }
2927 
2928   // If this the end of a top-level #endif, inform MIOpt.
2929   if (CurPPLexer->getConditionalStackDepth() == 0)
2930     CurPPLexer->MIOpt.ExitTopLevelConditional();
2931 
2932   assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode &&
2933          "This code should only be reachable in the non-skipping case!");
2934 
2935   if (Callbacks)
2936     Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc);
2937 }
2938 
2939 /// HandleElseDirective - Implements the \#else directive.
2940 ///
2941 void Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) {
2942   ++NumElse;
2943 
2944   // #else directive in a non-skipping conditional... start skipping.
2945   CheckEndOfDirective("else");
2946 
2947   PPConditionalInfo CI;
2948   if (CurPPLexer->popConditionalLevel(CI)) {
2949     Diag(Result, diag::pp_err_else_without_if);
2950     return;
2951   }
2952 
2953   // If this is a top-level #else, inform the MIOpt.
2954   if (CurPPLexer->getConditionalStackDepth() == 0)
2955     CurPPLexer->MIOpt.EnterTopLevelConditional();
2956 
2957   // If this is a #else with a #else before it, report the error.
2958   if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
2959 
2960   if (Callbacks)
2961     Callbacks->Else(Result.getLocation(), CI.IfLoc);
2962 
2963   if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) {
2964     // In 'single-file-parse mode' undefined identifiers trigger parsing of all
2965     // the directive blocks.
2966     CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false,
2967                                      /*foundnonskip*/false, /*foundelse*/true);
2968     return;
2969   }
2970 
2971   // Finally, skip the rest of the contents of this block.
2972   SkipExcludedConditionalBlock(HashToken.getLocation(), CI.IfLoc,
2973                                /*Foundnonskip*/ true,
2974                                /*FoundElse*/ true, Result.getLocation());
2975 }
2976 
2977 /// HandleElifDirective - Implements the \#elif directive.
2978 ///
2979 void Preprocessor::HandleElifDirective(Token &ElifToken,
2980                                        const Token &HashToken) {
2981   ++NumElse;
2982 
2983   // #elif directive in a non-skipping conditional... start skipping.
2984   // We don't care what the condition is, because we will always skip it (since
2985   // the block immediately before it was included).
2986   const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation();
2987   DiscardUntilEndOfDirective();
2988   const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation();
2989 
2990   PPConditionalInfo CI;
2991   if (CurPPLexer->popConditionalLevel(CI)) {
2992     Diag(ElifToken, diag::pp_err_elif_without_if);
2993     return;
2994   }
2995 
2996   // If this is a top-level #elif, inform the MIOpt.
2997   if (CurPPLexer->getConditionalStackDepth() == 0)
2998     CurPPLexer->MIOpt.EnterTopLevelConditional();
2999 
3000   // If this is a #elif with a #else before it, report the error.
3001   if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
3002 
3003   if (Callbacks)
3004     Callbacks->Elif(ElifToken.getLocation(),
3005                     SourceRange(ConditionalBegin, ConditionalEnd),
3006                     PPCallbacks::CVK_NotEvaluated, CI.IfLoc);
3007 
3008   if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) {
3009     // In 'single-file-parse mode' undefined identifiers trigger parsing of all
3010     // the directive blocks.
3011     CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false,
3012                                      /*foundnonskip*/false, /*foundelse*/false);
3013     return;
3014   }
3015 
3016   // Finally, skip the rest of the contents of this block.
3017   SkipExcludedConditionalBlock(
3018       HashToken.getLocation(), CI.IfLoc, /*Foundnonskip*/ true,
3019       /*FoundElse*/ CI.FoundElse, ElifToken.getLocation());
3020 }
3021