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