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/Lex/Preprocessor.h"
16 #include "clang/Basic/FileManager.h"
17 #include "clang/Basic/SourceManager.h"
18 #include "clang/Lex/CodeCompletionHandler.h"
19 #include "clang/Lex/HeaderSearch.h"
20 #include "clang/Lex/LexDiagnostic.h"
21 #include "clang/Lex/LiteralSupport.h"
22 #include "clang/Lex/MacroInfo.h"
23 #include "clang/Lex/ModuleLoader.h"
24 #include "clang/Lex/Pragma.h"
25 #include "llvm/ADT/APInt.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Support/SaveAndRestore.h"
28 using namespace clang;
29 
30 //===----------------------------------------------------------------------===//
31 // Utility Methods for Preprocessor Directive Handling.
32 //===----------------------------------------------------------------------===//
33 
34 MacroInfo *Preprocessor::AllocateMacroInfo() {
35   MacroInfoChain *MIChain;
36 
37   if (MICache) {
38     MIChain = MICache;
39     MICache = MICache->Next;
40   }
41   else {
42     MIChain = BP.Allocate<MacroInfoChain>();
43   }
44 
45   MIChain->Next = MIChainHead;
46   MIChain->Prev = 0;
47   if (MIChainHead)
48     MIChainHead->Prev = MIChain;
49   MIChainHead = MIChain;
50 
51   return &(MIChain->MI);
52 }
53 
54 MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) {
55   MacroInfo *MI = AllocateMacroInfo();
56   new (MI) MacroInfo(L);
57   return MI;
58 }
59 
60 MacroInfo *Preprocessor::AllocateDeserializedMacroInfo(SourceLocation L,
61                                                        unsigned SubModuleID) {
62   LLVM_STATIC_ASSERT(llvm::AlignOf<MacroInfo>::Alignment >= sizeof(SubModuleID),
63                      "alignment for MacroInfo is less than the ID");
64   MacroInfo *MI =
65       (MacroInfo*)BP.Allocate(sizeof(MacroInfo) + sizeof(SubModuleID),
66                               llvm::AlignOf<MacroInfo>::Alignment);
67   new (MI) MacroInfo(L);
68   MI->FromASTFile = true;
69   MI->setOwningModuleID(SubModuleID);
70   return MI;
71 }
72 
73 DefMacroDirective *
74 Preprocessor::AllocateDefMacroDirective(MacroInfo *MI, SourceLocation Loc,
75                                         bool isImported) {
76   DefMacroDirective *MD = BP.Allocate<DefMacroDirective>();
77   new (MD) DefMacroDirective(MI, Loc, isImported);
78   return MD;
79 }
80 
81 UndefMacroDirective *
82 Preprocessor::AllocateUndefMacroDirective(SourceLocation UndefLoc) {
83   UndefMacroDirective *MD = BP.Allocate<UndefMacroDirective>();
84   new (MD) UndefMacroDirective(UndefLoc);
85   return MD;
86 }
87 
88 VisibilityMacroDirective *
89 Preprocessor::AllocateVisibilityMacroDirective(SourceLocation Loc,
90                                                bool isPublic) {
91   VisibilityMacroDirective *MD = BP.Allocate<VisibilityMacroDirective>();
92   new (MD) VisibilityMacroDirective(Loc, isPublic);
93   return MD;
94 }
95 
96 /// \brief Release the specified MacroInfo to be reused for allocating
97 /// new MacroInfo objects.
98 void Preprocessor::ReleaseMacroInfo(MacroInfo *MI) {
99   MacroInfoChain *MIChain = (MacroInfoChain*) MI;
100   if (MacroInfoChain *Prev = MIChain->Prev) {
101     MacroInfoChain *Next = MIChain->Next;
102     Prev->Next = Next;
103     if (Next)
104       Next->Prev = Prev;
105   }
106   else {
107     assert(MIChainHead == MIChain);
108     MIChainHead = MIChain->Next;
109     MIChainHead->Prev = 0;
110   }
111   MIChain->Next = MICache;
112   MICache = MIChain;
113 
114   MI->Destroy();
115 }
116 
117 /// \brief Read and discard all tokens remaining on the current line until
118 /// the tok::eod token is found.
119 void Preprocessor::DiscardUntilEndOfDirective() {
120   Token Tmp;
121   do {
122     LexUnexpandedToken(Tmp);
123     assert(Tmp.isNot(tok::eof) && "EOF seen while discarding directive tokens");
124   } while (Tmp.isNot(tok::eod));
125 }
126 
127 /// \brief Lex and validate a macro name, which occurs after a
128 /// \#define or \#undef.
129 ///
130 /// This sets the token kind to eod and discards the rest
131 /// of the macro line if the macro name is invalid.  \p isDefineUndef is 1 if
132 /// this is due to a a \#define, 2 if \#undef directive, 0 if it is something
133 /// else (e.g. \#ifdef).
134 void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
135   // Read the token, don't allow macro expansion on it.
136   LexUnexpandedToken(MacroNameTok);
137 
138   if (MacroNameTok.is(tok::code_completion)) {
139     if (CodeComplete)
140       CodeComplete->CodeCompleteMacroName(isDefineUndef == 1);
141     setCodeCompletionReached();
142     LexUnexpandedToken(MacroNameTok);
143   }
144 
145   // Missing macro name?
146   if (MacroNameTok.is(tok::eod)) {
147     Diag(MacroNameTok, diag::err_pp_missing_macro_name);
148     return;
149   }
150 
151   IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
152   if (II == 0) {
153     bool Invalid = false;
154     std::string Spelling = getSpelling(MacroNameTok, &Invalid);
155     if (Invalid)
156       return;
157 
158     const IdentifierInfo &Info = Identifiers.get(Spelling);
159 
160     // Allow #defining |and| and friends in microsoft mode.
161     if (Info.isCPlusPlusOperatorKeyword() && getLangOpts().MicrosoftMode) {
162       MacroNameTok.setIdentifierInfo(getIdentifierInfo(Spelling));
163       return;
164     }
165 
166     if (Info.isCPlusPlusOperatorKeyword())
167       // C++ 2.5p2: Alternative tokens behave the same as its primary token
168       // except for their spellings.
169       Diag(MacroNameTok, diag::err_pp_operator_used_as_macro_name) << Spelling;
170     else
171       Diag(MacroNameTok, diag::err_pp_macro_not_identifier);
172     // Fall through on error.
173   } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) {
174     // Error if defining "defined": C99 6.10.8/4, C++ [cpp.predefined]p4.
175     Diag(MacroNameTok, diag::err_defined_macro_name);
176   } else if (isDefineUndef == 2 && II->hasMacroDefinition() &&
177              getMacroInfo(II)->isBuiltinMacro()) {
178     // Warn if undefining "__LINE__" and other builtins, per C99 6.10.8/4
179     // and C++ [cpp.predefined]p4], but allow it as an extension.
180     Diag(MacroNameTok, diag::ext_pp_undef_builtin_macro);
181     return;
182   } else {
183     // Okay, we got a good identifier node.  Return it.
184     return;
185   }
186 
187   // Invalid macro name, read and discard the rest of the line.  Then set the
188   // token kind to tok::eod.
189   MacroNameTok.setKind(tok::eod);
190   return DiscardUntilEndOfDirective();
191 }
192 
193 /// \brief Ensure that the next token is a tok::eod token.
194 ///
195 /// If not, emit a diagnostic and consume up until the eod.  If EnableMacros is
196 /// true, then we consider macros that expand to zero tokens as being ok.
197 void Preprocessor::CheckEndOfDirective(const char *DirType, bool EnableMacros) {
198   Token Tmp;
199   // Lex unexpanded tokens for most directives: macros might expand to zero
200   // tokens, causing us to miss diagnosing invalid lines.  Some directives (like
201   // #line) allow empty macros.
202   if (EnableMacros)
203     Lex(Tmp);
204   else
205     LexUnexpandedToken(Tmp);
206 
207   // There should be no tokens after the directive, but we allow them as an
208   // extension.
209   while (Tmp.is(tok::comment))  // Skip comments in -C mode.
210     LexUnexpandedToken(Tmp);
211 
212   if (Tmp.isNot(tok::eod)) {
213     // Add a fixit in GNU/C99/C++ mode.  Don't offer a fixit for strict-C89,
214     // or if this is a macro-style preprocessing directive, because it is more
215     // trouble than it is worth to insert /**/ and check that there is no /**/
216     // in the range also.
217     FixItHint Hint;
218     if ((LangOpts.GNUMode || LangOpts.C99 || LangOpts.CPlusPlus) &&
219         !CurTokenLexer)
220       Hint = FixItHint::CreateInsertion(Tmp.getLocation(),"//");
221     Diag(Tmp, diag::ext_pp_extra_tokens_at_eol) << DirType << Hint;
222     DiscardUntilEndOfDirective();
223   }
224 }
225 
226 
227 
228 /// SkipExcludedConditionalBlock - We just read a \#if or related directive and
229 /// decided that the subsequent tokens are in the \#if'd out portion of the
230 /// file.  Lex the rest of the file, until we see an \#endif.  If
231 /// FoundNonSkipPortion is true, then we have already emitted code for part of
232 /// this \#if directive, so \#else/\#elif blocks should never be entered.
233 /// If ElseOk is true, then \#else directives are ok, if not, then we have
234 /// already seen one so a \#else directive is a duplicate.  When this returns,
235 /// the caller can lex the first valid token.
236 void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
237                                                 bool FoundNonSkipPortion,
238                                                 bool FoundElse,
239                                                 SourceLocation ElseLoc) {
240   ++NumSkipped;
241   assert(CurTokenLexer == 0 && CurPPLexer && "Lexing a macro, not a file?");
242 
243   CurPPLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false,
244                                  FoundNonSkipPortion, FoundElse);
245 
246   if (CurPTHLexer) {
247     PTHSkipExcludedConditionalBlock();
248     return;
249   }
250 
251   // Enter raw mode to disable identifier lookup (and thus macro expansion),
252   // disabling warnings, etc.
253   CurPPLexer->LexingRawMode = true;
254   Token Tok;
255   while (1) {
256     CurLexer->Lex(Tok);
257 
258     if (Tok.is(tok::code_completion)) {
259       if (CodeComplete)
260         CodeComplete->CodeCompleteInConditionalExclusion();
261       setCodeCompletionReached();
262       continue;
263     }
264 
265     // If this is the end of the buffer, we have an error.
266     if (Tok.is(tok::eof)) {
267       // Emit errors for each unterminated conditional on the stack, including
268       // the current one.
269       while (!CurPPLexer->ConditionalStack.empty()) {
270         if (CurLexer->getFileLoc() != CodeCompletionFileLoc)
271           Diag(CurPPLexer->ConditionalStack.back().IfLoc,
272                diag::err_pp_unterminated_conditional);
273         CurPPLexer->ConditionalStack.pop_back();
274       }
275 
276       // Just return and let the caller lex after this #include.
277       break;
278     }
279 
280     // If this token is not a preprocessor directive, just skip it.
281     if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine())
282       continue;
283 
284     // We just parsed a # character at the start of a line, so we're in
285     // directive mode.  Tell the lexer this so any newlines we see will be
286     // converted into an EOD token (this terminates the macro).
287     CurPPLexer->ParsingPreprocessorDirective = true;
288     if (CurLexer) CurLexer->SetKeepWhitespaceMode(false);
289 
290 
291     // Read the next token, the directive flavor.
292     LexUnexpandedToken(Tok);
293 
294     // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or
295     // something bogus), skip it.
296     if (Tok.isNot(tok::raw_identifier)) {
297       CurPPLexer->ParsingPreprocessorDirective = false;
298       // Restore comment saving mode.
299       if (CurLexer) CurLexer->resetExtendedTokenMode();
300       continue;
301     }
302 
303     // If the first letter isn't i or e, it isn't intesting to us.  We know that
304     // this is safe in the face of spelling differences, because there is no way
305     // to spell an i/e in a strange way that is another letter.  Skipping this
306     // allows us to avoid looking up the identifier info for #define/#undef and
307     // other common directives.
308     const char *RawCharData = Tok.getRawIdentifierData();
309 
310     char FirstChar = RawCharData[0];
311     if (FirstChar >= 'a' && FirstChar <= 'z' &&
312         FirstChar != 'i' && FirstChar != 'e') {
313       CurPPLexer->ParsingPreprocessorDirective = false;
314       // Restore comment saving mode.
315       if (CurLexer) CurLexer->resetExtendedTokenMode();
316       continue;
317     }
318 
319     // Get the identifier name without trigraphs or embedded newlines.  Note
320     // that we can't use Tok.getIdentifierInfo() because its lookup is disabled
321     // when skipping.
322     char DirectiveBuf[20];
323     StringRef Directive;
324     if (!Tok.needsCleaning() && Tok.getLength() < 20) {
325       Directive = StringRef(RawCharData, Tok.getLength());
326     } else {
327       std::string DirectiveStr = getSpelling(Tok);
328       unsigned IdLen = DirectiveStr.size();
329       if (IdLen >= 20) {
330         CurPPLexer->ParsingPreprocessorDirective = false;
331         // Restore comment saving mode.
332         if (CurLexer) CurLexer->resetExtendedTokenMode();
333         continue;
334       }
335       memcpy(DirectiveBuf, &DirectiveStr[0], IdLen);
336       Directive = StringRef(DirectiveBuf, IdLen);
337     }
338 
339     if (Directive.startswith("if")) {
340       StringRef Sub = Directive.substr(2);
341       if (Sub.empty() ||   // "if"
342           Sub == "def" ||   // "ifdef"
343           Sub == "ndef") {  // "ifndef"
344         // We know the entire #if/#ifdef/#ifndef block will be skipped, don't
345         // bother parsing the condition.
346         DiscardUntilEndOfDirective();
347         CurPPLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true,
348                                        /*foundnonskip*/false,
349                                        /*foundelse*/false);
350       }
351     } else if (Directive[0] == 'e') {
352       StringRef Sub = Directive.substr(1);
353       if (Sub == "ndif") {  // "endif"
354         PPConditionalInfo CondInfo;
355         CondInfo.WasSkipping = true; // Silence bogus warning.
356         bool InCond = CurPPLexer->popConditionalLevel(CondInfo);
357         (void)InCond;  // Silence warning in no-asserts mode.
358         assert(!InCond && "Can't be skipping if not in a conditional!");
359 
360         // If we popped the outermost skipping block, we're done skipping!
361         if (!CondInfo.WasSkipping) {
362           // Restore the value of LexingRawMode so that trailing comments
363           // are handled correctly, if we've reached the outermost block.
364           CurPPLexer->LexingRawMode = false;
365           CheckEndOfDirective("endif");
366           CurPPLexer->LexingRawMode = true;
367           if (Callbacks)
368             Callbacks->Endif(Tok.getLocation(), CondInfo.IfLoc);
369           break;
370         } else {
371           DiscardUntilEndOfDirective();
372         }
373       } else if (Sub == "lse") { // "else".
374         // #else directive in a skipping conditional.  If not in some other
375         // skipping conditional, and if #else hasn't already been seen, enter it
376         // as a non-skipping conditional.
377         PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel();
378 
379         // If this is a #else with a #else before it, report the error.
380         if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else);
381 
382         // Note that we've seen a #else in this conditional.
383         CondInfo.FoundElse = true;
384 
385         // If the conditional is at the top level, and the #if block wasn't
386         // entered, enter the #else block now.
387         if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) {
388           CondInfo.FoundNonSkip = true;
389           // Restore the value of LexingRawMode so that trailing comments
390           // are handled correctly.
391           CurPPLexer->LexingRawMode = false;
392           CheckEndOfDirective("else");
393           CurPPLexer->LexingRawMode = true;
394           if (Callbacks)
395             Callbacks->Else(Tok.getLocation(), CondInfo.IfLoc);
396           break;
397         } else {
398           DiscardUntilEndOfDirective();  // C99 6.10p4.
399         }
400       } else if (Sub == "lif") {  // "elif".
401         PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel();
402 
403         bool ShouldEnter;
404         const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation();
405         // If this is in a skipping block or if we're already handled this #if
406         // block, don't bother parsing the condition.
407         if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) {
408           DiscardUntilEndOfDirective();
409           ShouldEnter = false;
410         } else {
411           // Restore the value of LexingRawMode so that identifiers are
412           // looked up, etc, inside the #elif expression.
413           assert(CurPPLexer->LexingRawMode && "We have to be skipping here!");
414           CurPPLexer->LexingRawMode = false;
415           IdentifierInfo *IfNDefMacro = 0;
416           ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
417           CurPPLexer->LexingRawMode = true;
418         }
419         const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation();
420 
421         // If this is a #elif with a #else before it, report the error.
422         if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else);
423 
424         // If this condition is true, enter it!
425         if (ShouldEnter) {
426           CondInfo.FoundNonSkip = true;
427           if (Callbacks)
428             Callbacks->Elif(Tok.getLocation(),
429                             SourceRange(ConditionalBegin, ConditionalEnd),
430                             CondInfo.IfLoc);
431           break;
432         }
433       }
434     }
435 
436     CurPPLexer->ParsingPreprocessorDirective = false;
437     // Restore comment saving mode.
438     if (CurLexer) CurLexer->resetExtendedTokenMode();
439   }
440 
441   // Finally, if we are out of the conditional (saw an #endif or ran off the end
442   // of the file, just stop skipping and return to lexing whatever came after
443   // the #if block.
444   CurPPLexer->LexingRawMode = false;
445 
446   if (Callbacks) {
447     SourceLocation BeginLoc = ElseLoc.isValid() ? ElseLoc : IfTokenLoc;
448     Callbacks->SourceRangeSkipped(SourceRange(BeginLoc, Tok.getLocation()));
449   }
450 }
451 
452 void Preprocessor::PTHSkipExcludedConditionalBlock() {
453 
454   while (1) {
455     assert(CurPTHLexer);
456     assert(CurPTHLexer->LexingRawMode == false);
457 
458     // Skip to the next '#else', '#elif', or #endif.
459     if (CurPTHLexer->SkipBlock()) {
460       // We have reached an #endif.  Both the '#' and 'endif' tokens
461       // have been consumed by the PTHLexer.  Just pop off the condition level.
462       PPConditionalInfo CondInfo;
463       bool InCond = CurPTHLexer->popConditionalLevel(CondInfo);
464       (void)InCond;  // Silence warning in no-asserts mode.
465       assert(!InCond && "Can't be skipping if not in a conditional!");
466       break;
467     }
468 
469     // We have reached a '#else' or '#elif'.  Lex the next token to get
470     // the directive flavor.
471     Token Tok;
472     LexUnexpandedToken(Tok);
473 
474     // We can actually look up the IdentifierInfo here since we aren't in
475     // raw mode.
476     tok::PPKeywordKind K = Tok.getIdentifierInfo()->getPPKeywordID();
477 
478     if (K == tok::pp_else) {
479       // #else: Enter the else condition.  We aren't in a nested condition
480       //  since we skip those. We're always in the one matching the last
481       //  blocked we skipped.
482       PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel();
483       // Note that we've seen a #else in this conditional.
484       CondInfo.FoundElse = true;
485 
486       // If the #if block wasn't entered then enter the #else block now.
487       if (!CondInfo.FoundNonSkip) {
488         CondInfo.FoundNonSkip = true;
489 
490         // Scan until the eod token.
491         CurPTHLexer->ParsingPreprocessorDirective = true;
492         DiscardUntilEndOfDirective();
493         CurPTHLexer->ParsingPreprocessorDirective = false;
494 
495         break;
496       }
497 
498       // Otherwise skip this block.
499       continue;
500     }
501 
502     assert(K == tok::pp_elif);
503     PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel();
504 
505     // If this is a #elif with a #else before it, report the error.
506     if (CondInfo.FoundElse)
507       Diag(Tok, diag::pp_err_elif_after_else);
508 
509     // If this is in a skipping block or if we're already handled this #if
510     // block, don't bother parsing the condition.  We just skip this block.
511     if (CondInfo.FoundNonSkip)
512       continue;
513 
514     // Evaluate the condition of the #elif.
515     IdentifierInfo *IfNDefMacro = 0;
516     CurPTHLexer->ParsingPreprocessorDirective = true;
517     bool ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
518     CurPTHLexer->ParsingPreprocessorDirective = false;
519 
520     // If this condition is true, enter it!
521     if (ShouldEnter) {
522       CondInfo.FoundNonSkip = true;
523       break;
524     }
525 
526     // Otherwise, skip this block and go to the next one.
527     continue;
528   }
529 }
530 
531 const FileEntry *Preprocessor::LookupFile(
532     StringRef Filename,
533     bool isAngled,
534     const DirectoryLookup *FromDir,
535     const DirectoryLookup *&CurDir,
536     SmallVectorImpl<char> *SearchPath,
537     SmallVectorImpl<char> *RelativePath,
538     Module **SuggestedModule,
539     bool SkipCache) {
540   // If the header lookup mechanism may be relative to the current file, pass in
541   // info about where the current file is.
542   const FileEntry *CurFileEnt = 0;
543   if (!FromDir) {
544     FileID FID = getCurrentFileLexer()->getFileID();
545     CurFileEnt = SourceMgr.getFileEntryForID(FID);
546 
547     // If there is no file entry associated with this file, it must be the
548     // predefines buffer.  Any other file is not lexed with a normal lexer, so
549     // it won't be scanned for preprocessor directives.   If we have the
550     // predefines buffer, resolve #include references (which come from the
551     // -include command line argument) as if they came from the main file, this
552     // affects file lookup etc.
553     if (CurFileEnt == 0) {
554       FID = SourceMgr.getMainFileID();
555       CurFileEnt = SourceMgr.getFileEntryForID(FID);
556     }
557   }
558 
559   // Do a standard file entry lookup.
560   CurDir = CurDirLookup;
561   const FileEntry *FE = HeaderInfo.LookupFile(
562       Filename, isAngled, FromDir, CurDir, CurFileEnt,
563       SearchPath, RelativePath, SuggestedModule, SkipCache);
564   if (FE) return FE;
565 
566   // Otherwise, see if this is a subframework header.  If so, this is relative
567   // to one of the headers on the #include stack.  Walk the list of the current
568   // headers on the #include stack and pass them to HeaderInfo.
569   if (IsFileLexer()) {
570     if ((CurFileEnt = SourceMgr.getFileEntryForID(CurPPLexer->getFileID())))
571       if ((FE = HeaderInfo.LookupSubframeworkHeader(Filename, CurFileEnt,
572                                                     SearchPath, RelativePath,
573                                                     SuggestedModule)))
574         return FE;
575   }
576 
577   for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) {
578     IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1];
579     if (IsFileLexer(ISEntry)) {
580       if ((CurFileEnt =
581            SourceMgr.getFileEntryForID(ISEntry.ThePPLexer->getFileID())))
582         if ((FE = HeaderInfo.LookupSubframeworkHeader(
583                 Filename, CurFileEnt, SearchPath, RelativePath,
584                 SuggestedModule)))
585           return FE;
586     }
587   }
588 
589   // Otherwise, we really couldn't find the file.
590   return 0;
591 }
592 
593 
594 //===----------------------------------------------------------------------===//
595 // Preprocessor Directive Handling.
596 //===----------------------------------------------------------------------===//
597 
598 class Preprocessor::ResetMacroExpansionHelper {
599 public:
600   ResetMacroExpansionHelper(Preprocessor *pp)
601     : PP(pp), save(pp->DisableMacroExpansion) {
602     if (pp->MacroExpansionInDirectivesOverride)
603       pp->DisableMacroExpansion = false;
604   }
605   ~ResetMacroExpansionHelper() {
606     PP->DisableMacroExpansion = save;
607   }
608 private:
609   Preprocessor *PP;
610   bool save;
611 };
612 
613 /// HandleDirective - This callback is invoked when the lexer sees a # token
614 /// at the start of a line.  This consumes the directive, modifies the
615 /// lexer/preprocessor state, and advances the lexer(s) so that the next token
616 /// read is the correct one.
617 void Preprocessor::HandleDirective(Token &Result) {
618   // FIXME: Traditional: # with whitespace before it not recognized by K&R?
619 
620   // We just parsed a # character at the start of a line, so we're in directive
621   // mode.  Tell the lexer this so any newlines we see will be converted into an
622   // EOD token (which terminates the directive).
623   CurPPLexer->ParsingPreprocessorDirective = true;
624   if (CurLexer) CurLexer->SetKeepWhitespaceMode(false);
625 
626   ++NumDirectives;
627 
628   // We are about to read a token.  For the multiple-include optimization FA to
629   // work, we have to remember if we had read any tokens *before* this
630   // pp-directive.
631   bool ReadAnyTokensBeforeDirective =CurPPLexer->MIOpt.getHasReadAnyTokensVal();
632 
633   // Save the '#' token in case we need to return it later.
634   Token SavedHash = Result;
635 
636   // Read the next token, the directive flavor.  This isn't expanded due to
637   // C99 6.10.3p8.
638   LexUnexpandedToken(Result);
639 
640   // C99 6.10.3p11: Is this preprocessor directive in macro invocation?  e.g.:
641   //   #define A(x) #x
642   //   A(abc
643   //     #warning blah
644   //   def)
645   // If so, the user is relying on undefined behavior, emit a diagnostic. Do
646   // not support this for #include-like directives, since that can result in
647   // terrible diagnostics, and does not work in GCC.
648   if (InMacroArgs) {
649     if (IdentifierInfo *II = Result.getIdentifierInfo()) {
650       switch (II->getPPKeywordID()) {
651       case tok::pp_include:
652       case tok::pp_import:
653       case tok::pp_include_next:
654       case tok::pp___include_macros:
655         Diag(Result, diag::err_embedded_include) << II->getName();
656         DiscardUntilEndOfDirective();
657         return;
658       default:
659         break;
660       }
661     }
662     Diag(Result, diag::ext_embedded_directive);
663   }
664 
665   // Temporarily enable macro expansion if set so
666   // and reset to previous state when returning from this function.
667   ResetMacroExpansionHelper helper(this);
668 
669   switch (Result.getKind()) {
670   case tok::eod:
671     return;   // null directive.
672   case tok::code_completion:
673     if (CodeComplete)
674       CodeComplete->CodeCompleteDirective(
675                                     CurPPLexer->getConditionalStackDepth() > 0);
676     setCodeCompletionReached();
677     return;
678   case tok::numeric_constant:  // # 7  GNU line marker directive.
679     if (getLangOpts().AsmPreprocessor)
680       break;  // # 4 is not a preprocessor directive in .S files.
681     return HandleDigitDirective(Result);
682   default:
683     IdentifierInfo *II = Result.getIdentifierInfo();
684     if (II == 0) break;  // Not an identifier.
685 
686     // Ask what the preprocessor keyword ID is.
687     switch (II->getPPKeywordID()) {
688     default: break;
689     // C99 6.10.1 - Conditional Inclusion.
690     case tok::pp_if:
691       return HandleIfDirective(Result, ReadAnyTokensBeforeDirective);
692     case tok::pp_ifdef:
693       return HandleIfdefDirective(Result, false, true/*not valid for miopt*/);
694     case tok::pp_ifndef:
695       return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective);
696     case tok::pp_elif:
697       return HandleElifDirective(Result);
698     case tok::pp_else:
699       return HandleElseDirective(Result);
700     case tok::pp_endif:
701       return HandleEndifDirective(Result);
702 
703     // C99 6.10.2 - Source File Inclusion.
704     case tok::pp_include:
705       // Handle #include.
706       return HandleIncludeDirective(SavedHash.getLocation(), Result);
707     case tok::pp___include_macros:
708       // Handle -imacros.
709       return HandleIncludeMacrosDirective(SavedHash.getLocation(), Result);
710 
711     // C99 6.10.3 - Macro Replacement.
712     case tok::pp_define:
713       return HandleDefineDirective(Result);
714     case tok::pp_undef:
715       return HandleUndefDirective(Result);
716 
717     // C99 6.10.4 - Line Control.
718     case tok::pp_line:
719       return HandleLineDirective(Result);
720 
721     // C99 6.10.5 - Error Directive.
722     case tok::pp_error:
723       return HandleUserDiagnosticDirective(Result, false);
724 
725     // C99 6.10.6 - Pragma Directive.
726     case tok::pp_pragma:
727       return HandlePragmaDirective(PIK_HashPragma);
728 
729     // GNU Extensions.
730     case tok::pp_import:
731       return HandleImportDirective(SavedHash.getLocation(), Result);
732     case tok::pp_include_next:
733       return HandleIncludeNextDirective(SavedHash.getLocation(), Result);
734 
735     case tok::pp_warning:
736       Diag(Result, diag::ext_pp_warning_directive);
737       return HandleUserDiagnosticDirective(Result, true);
738     case tok::pp_ident:
739       return HandleIdentSCCSDirective(Result);
740     case tok::pp_sccs:
741       return HandleIdentSCCSDirective(Result);
742     case tok::pp_assert:
743       //isExtension = true;  // FIXME: implement #assert
744       break;
745     case tok::pp_unassert:
746       //isExtension = true;  // FIXME: implement #unassert
747       break;
748 
749     case tok::pp___public_macro:
750       if (getLangOpts().Modules)
751         return HandleMacroPublicDirective(Result);
752       break;
753 
754     case tok::pp___private_macro:
755       if (getLangOpts().Modules)
756         return HandleMacroPrivateDirective(Result);
757       break;
758     }
759     break;
760   }
761 
762   // If this is a .S file, treat unknown # directives as non-preprocessor
763   // directives.  This is important because # may be a comment or introduce
764   // various pseudo-ops.  Just return the # token and push back the following
765   // token to be lexed next time.
766   if (getLangOpts().AsmPreprocessor) {
767     Token *Toks = new Token[2];
768     // Return the # and the token after it.
769     Toks[0] = SavedHash;
770     Toks[1] = Result;
771 
772     // If the second token is a hashhash token, then we need to translate it to
773     // unknown so the token lexer doesn't try to perform token pasting.
774     if (Result.is(tok::hashhash))
775       Toks[1].setKind(tok::unknown);
776 
777     // Enter this token stream so that we re-lex the tokens.  Make sure to
778     // enable macro expansion, in case the token after the # is an identifier
779     // that is expanded.
780     EnterTokenStream(Toks, 2, false, true);
781     return;
782   }
783 
784   // If we reached here, the preprocessing token is not valid!
785   Diag(Result, diag::err_pp_invalid_directive);
786 
787   // Read the rest of the PP line.
788   DiscardUntilEndOfDirective();
789 
790   // Okay, we're done parsing the directive.
791 }
792 
793 /// GetLineValue - Convert a numeric token into an unsigned value, emitting
794 /// Diagnostic DiagID if it is invalid, and returning the value in Val.
795 static bool GetLineValue(Token &DigitTok, unsigned &Val,
796                          unsigned DiagID, Preprocessor &PP,
797                          bool IsGNULineDirective=false) {
798   if (DigitTok.isNot(tok::numeric_constant)) {
799     PP.Diag(DigitTok, DiagID);
800 
801     if (DigitTok.isNot(tok::eod))
802       PP.DiscardUntilEndOfDirective();
803     return true;
804   }
805 
806   SmallString<64> IntegerBuffer;
807   IntegerBuffer.resize(DigitTok.getLength());
808   const char *DigitTokBegin = &IntegerBuffer[0];
809   bool Invalid = false;
810   unsigned ActualLength = PP.getSpelling(DigitTok, DigitTokBegin, &Invalid);
811   if (Invalid)
812     return true;
813 
814   // Verify that we have a simple digit-sequence, and compute the value.  This
815   // is always a simple digit string computed in decimal, so we do this manually
816   // here.
817   Val = 0;
818   for (unsigned i = 0; i != ActualLength; ++i) {
819     if (!isDigit(DigitTokBegin[i])) {
820       PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i),
821               diag::err_pp_line_digit_sequence) << IsGNULineDirective;
822       PP.DiscardUntilEndOfDirective();
823       return true;
824     }
825 
826     unsigned NextVal = Val*10+(DigitTokBegin[i]-'0');
827     if (NextVal < Val) { // overflow.
828       PP.Diag(DigitTok, DiagID);
829       PP.DiscardUntilEndOfDirective();
830       return true;
831     }
832     Val = NextVal;
833   }
834 
835   if (DigitTokBegin[0] == '0' && Val)
836     PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal)
837       << IsGNULineDirective;
838 
839   return false;
840 }
841 
842 /// \brief Handle a \#line directive: C99 6.10.4.
843 ///
844 /// The two acceptable forms are:
845 /// \verbatim
846 ///   # line digit-sequence
847 ///   # line digit-sequence "s-char-sequence"
848 /// \endverbatim
849 void Preprocessor::HandleLineDirective(Token &Tok) {
850   // Read the line # and string argument.  Per C99 6.10.4p5, these tokens are
851   // expanded.
852   Token DigitTok;
853   Lex(DigitTok);
854 
855   // Validate the number and convert it to an unsigned.
856   unsigned LineNo;
857   if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer,*this))
858     return;
859 
860   if (LineNo == 0)
861     Diag(DigitTok, diag::ext_pp_line_zero);
862 
863   // Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a
864   // number greater than 2147483647".  C90 requires that the line # be <= 32767.
865   unsigned LineLimit = 32768U;
866   if (LangOpts.C99 || LangOpts.CPlusPlus11)
867     LineLimit = 2147483648U;
868   if (LineNo >= LineLimit)
869     Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;
870   else if (LangOpts.CPlusPlus11 && LineNo >= 32768U)
871     Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big);
872 
873   int FilenameID = -1;
874   Token StrTok;
875   Lex(StrTok);
876 
877   // If the StrTok is "eod", then it wasn't present.  Otherwise, it must be a
878   // string followed by eod.
879   if (StrTok.is(tok::eod))
880     ; // ok
881   else if (StrTok.isNot(tok::string_literal)) {
882     Diag(StrTok, diag::err_pp_line_invalid_filename);
883     return DiscardUntilEndOfDirective();
884   } else if (StrTok.hasUDSuffix()) {
885     Diag(StrTok, diag::err_invalid_string_udl);
886     return DiscardUntilEndOfDirective();
887   } else {
888     // Parse and validate the string, converting it into a unique ID.
889     StringLiteralParser Literal(&StrTok, 1, *this);
890     assert(Literal.isAscii() && "Didn't allow wide strings in");
891     if (Literal.hadError)
892       return DiscardUntilEndOfDirective();
893     if (Literal.Pascal) {
894       Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
895       return DiscardUntilEndOfDirective();
896     }
897     FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString());
898 
899     // Verify that there is nothing after the string, other than EOD.  Because
900     // of C99 6.10.4p5, macros that expand to empty tokens are ok.
901     CheckEndOfDirective("line", true);
902   }
903 
904   SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID);
905 
906   if (Callbacks)
907     Callbacks->FileChanged(CurPPLexer->getSourceLocation(),
908                            PPCallbacks::RenameFile,
909                            SrcMgr::C_User);
910 }
911 
912 /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line
913 /// marker directive.
914 static bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit,
915                                 bool &IsSystemHeader, bool &IsExternCHeader,
916                                 Preprocessor &PP) {
917   unsigned FlagVal;
918   Token FlagTok;
919   PP.Lex(FlagTok);
920   if (FlagTok.is(tok::eod)) return false;
921   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))
922     return true;
923 
924   if (FlagVal == 1) {
925     IsFileEntry = true;
926 
927     PP.Lex(FlagTok);
928     if (FlagTok.is(tok::eod)) return false;
929     if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP))
930       return true;
931   } else if (FlagVal == 2) {
932     IsFileExit = true;
933 
934     SourceManager &SM = PP.getSourceManager();
935     // If we are leaving the current presumed file, check to make sure the
936     // presumed include stack isn't empty!
937     FileID CurFileID =
938       SM.getDecomposedExpansionLoc(FlagTok.getLocation()).first;
939     PresumedLoc PLoc = SM.getPresumedLoc(FlagTok.getLocation());
940     if (PLoc.isInvalid())
941       return true;
942 
943     // If there is no include loc (main file) or if the include loc is in a
944     // different physical file, then we aren't in a "1" line marker flag region.
945     SourceLocation IncLoc = PLoc.getIncludeLoc();
946     if (IncLoc.isInvalid() ||
947         SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {
948       PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);
949       PP.DiscardUntilEndOfDirective();
950       return true;
951     }
952 
953     PP.Lex(FlagTok);
954     if (FlagTok.is(tok::eod)) return false;
955     if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP))
956       return true;
957   }
958 
959   // We must have 3 if there are still flags.
960   if (FlagVal != 3) {
961     PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
962     PP.DiscardUntilEndOfDirective();
963     return true;
964   }
965 
966   IsSystemHeader = true;
967 
968   PP.Lex(FlagTok);
969   if (FlagTok.is(tok::eod)) return false;
970   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))
971     return true;
972 
973   // We must have 4 if there is yet another flag.
974   if (FlagVal != 4) {
975     PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
976     PP.DiscardUntilEndOfDirective();
977     return true;
978   }
979 
980   IsExternCHeader = true;
981 
982   PP.Lex(FlagTok);
983   if (FlagTok.is(tok::eod)) return false;
984 
985   // There are no more valid flags here.
986   PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);
987   PP.DiscardUntilEndOfDirective();
988   return true;
989 }
990 
991 /// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is
992 /// one of the following forms:
993 ///
994 ///     # 42
995 ///     # 42 "file" ('1' | '2')?
996 ///     # 42 "file" ('1' | '2')? '3' '4'?
997 ///
998 void Preprocessor::HandleDigitDirective(Token &DigitTok) {
999   // Validate the number and convert it to an unsigned.  GNU does not have a
1000   // line # limit other than it fit in 32-bits.
1001   unsigned LineNo;
1002   if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer,
1003                    *this, true))
1004     return;
1005 
1006   Token StrTok;
1007   Lex(StrTok);
1008 
1009   bool IsFileEntry = false, IsFileExit = false;
1010   bool IsSystemHeader = false, IsExternCHeader = false;
1011   int FilenameID = -1;
1012 
1013   // If the StrTok is "eod", then it wasn't present.  Otherwise, it must be a
1014   // string followed by eod.
1015   if (StrTok.is(tok::eod))
1016     ; // ok
1017   else if (StrTok.isNot(tok::string_literal)) {
1018     Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
1019     return DiscardUntilEndOfDirective();
1020   } else if (StrTok.hasUDSuffix()) {
1021     Diag(StrTok, diag::err_invalid_string_udl);
1022     return DiscardUntilEndOfDirective();
1023   } else {
1024     // Parse and validate the string, converting it into a unique ID.
1025     StringLiteralParser Literal(&StrTok, 1, *this);
1026     assert(Literal.isAscii() && "Didn't allow wide strings in");
1027     if (Literal.hadError)
1028       return DiscardUntilEndOfDirective();
1029     if (Literal.Pascal) {
1030       Diag(StrTok, diag::err_pp_linemarker_invalid_filename);
1031       return DiscardUntilEndOfDirective();
1032     }
1033     FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString());
1034 
1035     // If a filename was present, read any flags that are present.
1036     if (ReadLineMarkerFlags(IsFileEntry, IsFileExit,
1037                             IsSystemHeader, IsExternCHeader, *this))
1038       return;
1039   }
1040 
1041   // Create a line note with this information.
1042   SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID,
1043                         IsFileEntry, IsFileExit,
1044                         IsSystemHeader, IsExternCHeader);
1045 
1046   // If the preprocessor has callbacks installed, notify them of the #line
1047   // change.  This is used so that the line marker comes out in -E mode for
1048   // example.
1049   if (Callbacks) {
1050     PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile;
1051     if (IsFileEntry)
1052       Reason = PPCallbacks::EnterFile;
1053     else if (IsFileExit)
1054       Reason = PPCallbacks::ExitFile;
1055     SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User;
1056     if (IsExternCHeader)
1057       FileKind = SrcMgr::C_ExternCSystem;
1058     else if (IsSystemHeader)
1059       FileKind = SrcMgr::C_System;
1060 
1061     Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind);
1062   }
1063 }
1064 
1065 
1066 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive.
1067 ///
1068 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
1069                                                  bool isWarning) {
1070   // PTH doesn't emit #warning or #error directives.
1071   if (CurPTHLexer)
1072     return CurPTHLexer->DiscardToEndOfLine();
1073 
1074   // Read the rest of the line raw.  We do this because we don't want macros
1075   // to be expanded and we don't require that the tokens be valid preprocessing
1076   // tokens.  For example, this is allowed: "#warning `   'foo".  GCC does
1077   // collapse multiple consequtive white space between tokens, but this isn't
1078   // specified by the standard.
1079   SmallString<128> Message;
1080   CurLexer->ReadToEndOfLine(&Message);
1081 
1082   // Find the first non-whitespace character, so that we can make the
1083   // diagnostic more succinct.
1084   StringRef Msg = Message.str().ltrim(" ");
1085 
1086   if (isWarning)
1087     Diag(Tok, diag::pp_hash_warning) << Msg;
1088   else
1089     Diag(Tok, diag::err_pp_hash_error) << Msg;
1090 }
1091 
1092 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1093 ///
1094 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
1095   // Yes, this directive is an extension.
1096   Diag(Tok, diag::ext_pp_ident_directive);
1097 
1098   // Read the string argument.
1099   Token StrTok;
1100   Lex(StrTok);
1101 
1102   // If the token kind isn't a string, it's a malformed directive.
1103   if (StrTok.isNot(tok::string_literal) &&
1104       StrTok.isNot(tok::wide_string_literal)) {
1105     Diag(StrTok, diag::err_pp_malformed_ident);
1106     if (StrTok.isNot(tok::eod))
1107       DiscardUntilEndOfDirective();
1108     return;
1109   }
1110 
1111   if (StrTok.hasUDSuffix()) {
1112     Diag(StrTok, diag::err_invalid_string_udl);
1113     return DiscardUntilEndOfDirective();
1114   }
1115 
1116   // Verify that there is nothing after the string, other than EOD.
1117   CheckEndOfDirective("ident");
1118 
1119   if (Callbacks) {
1120     bool Invalid = false;
1121     std::string Str = getSpelling(StrTok, &Invalid);
1122     if (!Invalid)
1123       Callbacks->Ident(Tok.getLocation(), Str);
1124   }
1125 }
1126 
1127 /// \brief Handle a #public directive.
1128 void Preprocessor::HandleMacroPublicDirective(Token &Tok) {
1129   Token MacroNameTok;
1130   ReadMacroName(MacroNameTok, 2);
1131 
1132   // Error reading macro name?  If so, diagnostic already issued.
1133   if (MacroNameTok.is(tok::eod))
1134     return;
1135 
1136   // Check to see if this is the last token on the #__public_macro line.
1137   CheckEndOfDirective("__public_macro");
1138 
1139   IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1140   // Okay, we finally have a valid identifier to undef.
1141   MacroDirective *MD = getMacroDirective(II);
1142 
1143   // If the macro is not defined, this is an error.
1144   if (MD == 0) {
1145     Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;
1146     return;
1147   }
1148 
1149   // Note that this macro has now been exported.
1150   appendMacroDirective(II, AllocateVisibilityMacroDirective(
1151                                 MacroNameTok.getLocation(), /*IsPublic=*/true));
1152 }
1153 
1154 /// \brief Handle a #private directive.
1155 void Preprocessor::HandleMacroPrivateDirective(Token &Tok) {
1156   Token MacroNameTok;
1157   ReadMacroName(MacroNameTok, 2);
1158 
1159   // Error reading macro name?  If so, diagnostic already issued.
1160   if (MacroNameTok.is(tok::eod))
1161     return;
1162 
1163   // Check to see if this is the last token on the #__private_macro line.
1164   CheckEndOfDirective("__private_macro");
1165 
1166   IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1167   // Okay, we finally have a valid identifier to undef.
1168   MacroDirective *MD = getMacroDirective(II);
1169 
1170   // If the macro is not defined, this is an error.
1171   if (MD == 0) {
1172     Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;
1173     return;
1174   }
1175 
1176   // Note that this macro has now been marked private.
1177   appendMacroDirective(II, AllocateVisibilityMacroDirective(
1178                                MacroNameTok.getLocation(), /*IsPublic=*/false));
1179 }
1180 
1181 //===----------------------------------------------------------------------===//
1182 // Preprocessor Include Directive Handling.
1183 //===----------------------------------------------------------------------===//
1184 
1185 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1186 /// checked and spelled filename, e.g. as an operand of \#include. This returns
1187 /// true if the input filename was in <>'s or false if it were in ""'s.  The
1188 /// caller is expected to provide a buffer that is large enough to hold the
1189 /// spelling of the filename, but is also expected to handle the case when
1190 /// this method decides to use a different buffer.
1191 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
1192                                               StringRef &Buffer) {
1193   // Get the text form of the filename.
1194   assert(!Buffer.empty() && "Can't have tokens with empty spellings!");
1195 
1196   // Make sure the filename is <x> or "x".
1197   bool isAngled;
1198   if (Buffer[0] == '<') {
1199     if (Buffer.back() != '>') {
1200       Diag(Loc, diag::err_pp_expects_filename);
1201       Buffer = StringRef();
1202       return true;
1203     }
1204     isAngled = true;
1205   } else if (Buffer[0] == '"') {
1206     if (Buffer.back() != '"') {
1207       Diag(Loc, diag::err_pp_expects_filename);
1208       Buffer = StringRef();
1209       return true;
1210     }
1211     isAngled = false;
1212   } else {
1213     Diag(Loc, diag::err_pp_expects_filename);
1214     Buffer = StringRef();
1215     return true;
1216   }
1217 
1218   // Diagnose #include "" as invalid.
1219   if (Buffer.size() <= 2) {
1220     Diag(Loc, diag::err_pp_empty_filename);
1221     Buffer = StringRef();
1222     return true;
1223   }
1224 
1225   // Skip the brackets.
1226   Buffer = Buffer.substr(1, Buffer.size()-2);
1227   return isAngled;
1228 }
1229 
1230 /// \brief Handle cases where the \#include name is expanded from a macro
1231 /// as multiple tokens, which need to be glued together.
1232 ///
1233 /// This occurs for code like:
1234 /// \code
1235 ///    \#define FOO <a/b.h>
1236 ///    \#include FOO
1237 /// \endcode
1238 /// because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1239 ///
1240 /// This code concatenates and consumes tokens up to the '>' token.  It returns
1241 /// false if the > was found, otherwise it returns true if it finds and consumes
1242 /// the EOD marker.
1243 bool Preprocessor::ConcatenateIncludeName(
1244                                         SmallString<128> &FilenameBuffer,
1245                                           SourceLocation &End) {
1246   Token CurTok;
1247 
1248   Lex(CurTok);
1249   while (CurTok.isNot(tok::eod)) {
1250     End = CurTok.getLocation();
1251 
1252     // FIXME: Provide code completion for #includes.
1253     if (CurTok.is(tok::code_completion)) {
1254       setCodeCompletionReached();
1255       Lex(CurTok);
1256       continue;
1257     }
1258 
1259     // Append the spelling of this token to the buffer. If there was a space
1260     // before it, add it now.
1261     if (CurTok.hasLeadingSpace())
1262       FilenameBuffer.push_back(' ');
1263 
1264     // Get the spelling of the token, directly into FilenameBuffer if possible.
1265     unsigned PreAppendSize = FilenameBuffer.size();
1266     FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1267 
1268     const char *BufPtr = &FilenameBuffer[PreAppendSize];
1269     unsigned ActualLen = getSpelling(CurTok, BufPtr);
1270 
1271     // If the token was spelled somewhere else, copy it into FilenameBuffer.
1272     if (BufPtr != &FilenameBuffer[PreAppendSize])
1273       memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1274 
1275     // Resize FilenameBuffer to the correct size.
1276     if (CurTok.getLength() != ActualLen)
1277       FilenameBuffer.resize(PreAppendSize+ActualLen);
1278 
1279     // If we found the '>' marker, return success.
1280     if (CurTok.is(tok::greater))
1281       return false;
1282 
1283     Lex(CurTok);
1284   }
1285 
1286   // If we hit the eod marker, emit an error and return true so that the caller
1287   // knows the EOD has been read.
1288   Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1289   return true;
1290 }
1291 
1292 /// HandleIncludeDirective - The "\#include" tokens have just been read, read
1293 /// the file to be included from the lexer, then include it!  This is a common
1294 /// routine with functionality shared between \#include, \#include_next and
1295 /// \#import.  LookupFrom is set when this is a \#include_next directive, it
1296 /// specifies the file to start searching from.
1297 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
1298                                           Token &IncludeTok,
1299                                           const DirectoryLookup *LookupFrom,
1300                                           bool isImport) {
1301 
1302   Token FilenameTok;
1303   CurPPLexer->LexIncludeFilename(FilenameTok);
1304 
1305   // Reserve a buffer to get the spelling.
1306   SmallString<128> FilenameBuffer;
1307   StringRef Filename;
1308   SourceLocation End;
1309   SourceLocation CharEnd; // the end of this directive, in characters
1310 
1311   switch (FilenameTok.getKind()) {
1312   case tok::eod:
1313     // If the token kind is EOD, the error has already been diagnosed.
1314     return;
1315 
1316   case tok::angle_string_literal:
1317   case tok::string_literal:
1318     Filename = getSpelling(FilenameTok, FilenameBuffer);
1319     End = FilenameTok.getLocation();
1320     CharEnd = End.getLocWithOffset(FilenameTok.getLength());
1321     break;
1322 
1323   case tok::less:
1324     // This could be a <foo/bar.h> file coming from a macro expansion.  In this
1325     // case, glue the tokens together into FilenameBuffer and interpret those.
1326     FilenameBuffer.push_back('<');
1327     if (ConcatenateIncludeName(FilenameBuffer, End))
1328       return;   // Found <eod> but no ">"?  Diagnostic already emitted.
1329     Filename = FilenameBuffer.str();
1330     CharEnd = End.getLocWithOffset(1);
1331     break;
1332   default:
1333     Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1334     DiscardUntilEndOfDirective();
1335     return;
1336   }
1337 
1338   CharSourceRange FilenameRange
1339     = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd);
1340   StringRef OriginalFilename = Filename;
1341   bool isAngled =
1342     GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename);
1343   // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1344   // error.
1345   if (Filename.empty()) {
1346     DiscardUntilEndOfDirective();
1347     return;
1348   }
1349 
1350   // Verify that there is nothing after the filename, other than EOD.  Note that
1351   // we allow macros that expand to nothing after the filename, because this
1352   // falls into the category of "#include pp-tokens new-line" specified in
1353   // C99 6.10.2p4.
1354   CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true);
1355 
1356   // Check that we don't have infinite #include recursion.
1357   if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) {
1358     Diag(FilenameTok, diag::err_pp_include_too_deep);
1359     return;
1360   }
1361 
1362   // Complain about attempts to #include files in an audit pragma.
1363   if (PragmaARCCFCodeAuditedLoc.isValid()) {
1364     Diag(HashLoc, diag::err_pp_include_in_arc_cf_code_audited);
1365     Diag(PragmaARCCFCodeAuditedLoc, diag::note_pragma_entered_here);
1366 
1367     // Immediately leave the pragma.
1368     PragmaARCCFCodeAuditedLoc = SourceLocation();
1369   }
1370 
1371   if (HeaderInfo.HasIncludeAliasMap()) {
1372     // Map the filename with the brackets still attached.  If the name doesn't
1373     // map to anything, fall back on the filename we've already gotten the
1374     // spelling for.
1375     StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename);
1376     if (!NewName.empty())
1377       Filename = NewName;
1378   }
1379 
1380   // Search include directories.
1381   const DirectoryLookup *CurDir;
1382   SmallString<1024> SearchPath;
1383   SmallString<1024> RelativePath;
1384   // We get the raw path only if we have 'Callbacks' to which we later pass
1385   // the path.
1386   Module *SuggestedModule = 0;
1387   const FileEntry *File = LookupFile(
1388       Filename, isAngled, LookupFrom, CurDir,
1389       Callbacks ? &SearchPath : NULL, Callbacks ? &RelativePath : NULL,
1390       getLangOpts().Modules? &SuggestedModule : 0);
1391 
1392   if (Callbacks) {
1393     if (!File) {
1394       // Give the clients a chance to recover.
1395       SmallString<128> RecoveryPath;
1396       if (Callbacks->FileNotFound(Filename, RecoveryPath)) {
1397         if (const DirectoryEntry *DE = FileMgr.getDirectory(RecoveryPath)) {
1398           // Add the recovery path to the list of search paths.
1399           DirectoryLookup DL(DE, SrcMgr::C_User, false);
1400           HeaderInfo.AddSearchPath(DL, isAngled);
1401 
1402           // Try the lookup again, skipping the cache.
1403           File = LookupFile(Filename, isAngled, LookupFrom, CurDir, 0, 0,
1404                             getLangOpts().Modules? &SuggestedModule : 0,
1405                             /*SkipCache*/true);
1406         }
1407       }
1408     }
1409 
1410     if (!SuggestedModule) {
1411       // Notify the callback object that we've seen an inclusion directive.
1412       Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename, isAngled,
1413                                     FilenameRange, File,
1414                                     SearchPath, RelativePath,
1415                                     /*ImportedModule=*/0);
1416     }
1417   }
1418 
1419   if (File == 0) {
1420     if (!SuppressIncludeNotFoundError) {
1421       // If the file could not be located and it was included via angle
1422       // brackets, we can attempt a lookup as though it were a quoted path to
1423       // provide the user with a possible fixit.
1424       if (isAngled) {
1425         File = LookupFile(Filename, false, LookupFrom, CurDir,
1426                           Callbacks ? &SearchPath : 0,
1427                           Callbacks ? &RelativePath : 0,
1428                           getLangOpts().Modules ? &SuggestedModule : 0);
1429         if (File) {
1430           SourceRange Range(FilenameTok.getLocation(), CharEnd);
1431           Diag(FilenameTok, diag::err_pp_file_not_found_not_fatal) <<
1432             Filename <<
1433             FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\"");
1434         }
1435       }
1436       // If the file is still not found, just go with the vanilla diagnostic
1437       if (!File)
1438         Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;
1439     }
1440     if (!File)
1441       return;
1442   }
1443 
1444   // If we are supposed to import a module rather than including the header,
1445   // do so now.
1446   if (SuggestedModule) {
1447     // Compute the module access path corresponding to this module.
1448     // FIXME: Should we have a second loadModule() overload to avoid this
1449     // extra lookup step?
1450     SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path;
1451     for (Module *Mod = SuggestedModule; Mod; Mod = Mod->Parent)
1452       Path.push_back(std::make_pair(getIdentifierInfo(Mod->Name),
1453                                     FilenameTok.getLocation()));
1454     std::reverse(Path.begin(), Path.end());
1455 
1456     // Warn that we're replacing the include/import with a module import.
1457     SmallString<128> PathString;
1458     for (unsigned I = 0, N = Path.size(); I != N; ++I) {
1459       if (I)
1460         PathString += '.';
1461       PathString += Path[I].first->getName();
1462     }
1463     int IncludeKind = 0;
1464 
1465     switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) {
1466     case tok::pp_include:
1467       IncludeKind = 0;
1468       break;
1469 
1470     case tok::pp_import:
1471       IncludeKind = 1;
1472       break;
1473 
1474     case tok::pp_include_next:
1475       IncludeKind = 2;
1476       break;
1477 
1478     case tok::pp___include_macros:
1479       IncludeKind = 3;
1480       break;
1481 
1482     default:
1483       llvm_unreachable("unknown include directive kind");
1484     }
1485 
1486     // Determine whether we are actually building the module that this
1487     // include directive maps to.
1488     bool BuildingImportedModule
1489       = Path[0].first->getName() == getLangOpts().CurrentModule;
1490 
1491     if (!BuildingImportedModule && getLangOpts().ObjC2) {
1492       // If we're not building the imported module, warn that we're going
1493       // to automatically turn this inclusion directive into a module import.
1494       // We only do this in Objective-C, where we have a module-import syntax.
1495       CharSourceRange ReplaceRange(SourceRange(HashLoc, CharEnd),
1496                                    /*IsTokenRange=*/false);
1497       Diag(HashLoc, diag::warn_auto_module_import)
1498         << IncludeKind << PathString
1499         << FixItHint::CreateReplacement(ReplaceRange,
1500              "@import " + PathString.str().str() + ";");
1501     }
1502 
1503     // Load the module.
1504     // If this was an #__include_macros directive, only make macros visible.
1505     Module::NameVisibilityKind Visibility
1506       = (IncludeKind == 3)? Module::MacrosVisible : Module::AllVisible;
1507     ModuleLoadResult Imported
1508       = TheModuleLoader.loadModule(IncludeTok.getLocation(), Path, Visibility,
1509                                    /*IsIncludeDirective=*/true);
1510     assert((Imported == 0 || Imported == SuggestedModule) &&
1511            "the imported module is different than the suggested one");
1512 
1513     // If this header isn't part of the module we're building, we're done.
1514     if (!BuildingImportedModule && Imported) {
1515       if (Callbacks) {
1516         Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename, isAngled,
1517                                       FilenameRange, File,
1518                                       SearchPath, RelativePath, Imported);
1519       }
1520       return;
1521     }
1522 
1523     // If we failed to find a submodule that we expected to find, we can
1524     // continue. Otherwise, there's an error in the included file, so we
1525     // don't want to include it.
1526     if (!BuildingImportedModule && !Imported.isMissingExpected()) {
1527       return;
1528     }
1529   }
1530 
1531   if (Callbacks && SuggestedModule) {
1532     // We didn't notify the callback object that we've seen an inclusion
1533     // directive before. Now that we are parsing the include normally and not
1534     // turning it to a module import, notify the callback object.
1535     Callbacks->InclusionDirective(HashLoc, IncludeTok, Filename, isAngled,
1536                                   FilenameRange, File,
1537                                   SearchPath, RelativePath,
1538                                   /*ImportedModule=*/0);
1539   }
1540 
1541   // The #included file will be considered to be a system header if either it is
1542   // in a system include directory, or if the #includer is a system include
1543   // header.
1544   SrcMgr::CharacteristicKind FileCharacter =
1545     std::max(HeaderInfo.getFileDirFlavor(File),
1546              SourceMgr.getFileCharacteristic(FilenameTok.getLocation()));
1547 
1548   // Ask HeaderInfo if we should enter this #include file.  If not, #including
1549   // this file will have no effect.
1550   if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
1551     if (Callbacks)
1552       Callbacks->FileSkipped(*File, FilenameTok, FileCharacter);
1553     return;
1554   }
1555 
1556   // Look up the file, create a File ID for it.
1557   SourceLocation IncludePos = End;
1558   // If the filename string was the result of macro expansions, set the include
1559   // position on the file where it will be included and after the expansions.
1560   if (IncludePos.isMacroID())
1561     IncludePos = SourceMgr.getExpansionRange(IncludePos).second;
1562   FileID FID = SourceMgr.createFileID(File, IncludePos, FileCharacter);
1563   assert(!FID.isInvalid() && "Expected valid file ID");
1564 
1565   // Finally, if all is good, enter the new file!
1566   EnterSourceFile(FID, CurDir, FilenameTok.getLocation());
1567 }
1568 
1569 /// HandleIncludeNextDirective - Implements \#include_next.
1570 ///
1571 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc,
1572                                               Token &IncludeNextTok) {
1573   Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
1574 
1575   // #include_next is like #include, except that we start searching after
1576   // the current found directory.  If we can't do this, issue a
1577   // diagnostic.
1578   const DirectoryLookup *Lookup = CurDirLookup;
1579   if (isInPrimaryFile()) {
1580     Lookup = 0;
1581     Diag(IncludeNextTok, diag::pp_include_next_in_primary);
1582   } else if (Lookup == 0) {
1583     Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
1584   } else {
1585     // Start looking up in the next directory.
1586     ++Lookup;
1587   }
1588 
1589   return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup);
1590 }
1591 
1592 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode
1593 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) {
1594   // The Microsoft #import directive takes a type library and generates header
1595   // files from it, and includes those.  This is beyond the scope of what clang
1596   // does, so we ignore it and error out.  However, #import can optionally have
1597   // trailing attributes that span multiple lines.  We're going to eat those
1598   // so we can continue processing from there.
1599   Diag(Tok, diag::err_pp_import_directive_ms );
1600 
1601   // Read tokens until we get to the end of the directive.  Note that the
1602   // directive can be split over multiple lines using the backslash character.
1603   DiscardUntilEndOfDirective();
1604 }
1605 
1606 /// HandleImportDirective - Implements \#import.
1607 ///
1608 void Preprocessor::HandleImportDirective(SourceLocation HashLoc,
1609                                          Token &ImportTok) {
1610   if (!LangOpts.ObjC1) {  // #import is standard for ObjC.
1611     if (LangOpts.MicrosoftMode)
1612       return HandleMicrosoftImportDirective(ImportTok);
1613     Diag(ImportTok, diag::ext_pp_import_directive);
1614   }
1615   return HandleIncludeDirective(HashLoc, ImportTok, 0, true);
1616 }
1617 
1618 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a
1619 /// pseudo directive in the predefines buffer.  This handles it by sucking all
1620 /// tokens through the preprocessor and discarding them (only keeping the side
1621 /// effects on the preprocessor).
1622 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc,
1623                                                 Token &IncludeMacrosTok) {
1624   // This directive should only occur in the predefines buffer.  If not, emit an
1625   // error and reject it.
1626   SourceLocation Loc = IncludeMacrosTok.getLocation();
1627   if (strcmp(SourceMgr.getBufferName(Loc), "<built-in>") != 0) {
1628     Diag(IncludeMacrosTok.getLocation(),
1629          diag::pp_include_macros_out_of_predefines);
1630     DiscardUntilEndOfDirective();
1631     return;
1632   }
1633 
1634   // Treat this as a normal #include for checking purposes.  If this is
1635   // successful, it will push a new lexer onto the include stack.
1636   HandleIncludeDirective(HashLoc, IncludeMacrosTok, 0, false);
1637 
1638   Token TmpTok;
1639   do {
1640     Lex(TmpTok);
1641     assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!");
1642   } while (TmpTok.isNot(tok::hashhash));
1643 }
1644 
1645 //===----------------------------------------------------------------------===//
1646 // Preprocessor Macro Directive Handling.
1647 //===----------------------------------------------------------------------===//
1648 
1649 /// ReadMacroDefinitionArgList - The ( starting an argument list of a macro
1650 /// definition has just been read.  Lex the rest of the arguments and the
1651 /// closing ), updating MI with what we learn.  Return true if an error occurs
1652 /// parsing the arg list.
1653 bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI, Token &Tok) {
1654   SmallVector<IdentifierInfo*, 32> Arguments;
1655 
1656   while (1) {
1657     LexUnexpandedToken(Tok);
1658     switch (Tok.getKind()) {
1659     case tok::r_paren:
1660       // Found the end of the argument list.
1661       if (Arguments.empty())  // #define FOO()
1662         return false;
1663       // Otherwise we have #define FOO(A,)
1664       Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
1665       return true;
1666     case tok::ellipsis:  // #define X(... -> C99 varargs
1667       if (!LangOpts.C99)
1668         Diag(Tok, LangOpts.CPlusPlus11 ?
1669              diag::warn_cxx98_compat_variadic_macro :
1670              diag::ext_variadic_macro);
1671 
1672       // OpenCL v1.2 s6.9.e: variadic macros are not supported.
1673       if (LangOpts.OpenCL) {
1674         Diag(Tok, diag::err_pp_opencl_variadic_macros);
1675         return true;
1676       }
1677 
1678       // Lex the token after the identifier.
1679       LexUnexpandedToken(Tok);
1680       if (Tok.isNot(tok::r_paren)) {
1681         Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
1682         return true;
1683       }
1684       // Add the __VA_ARGS__ identifier as an argument.
1685       Arguments.push_back(Ident__VA_ARGS__);
1686       MI->setIsC99Varargs();
1687       MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
1688       return false;
1689     case tok::eod:  // #define X(
1690       Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
1691       return true;
1692     default:
1693       // Handle keywords and identifiers here to accept things like
1694       // #define Foo(for) for.
1695       IdentifierInfo *II = Tok.getIdentifierInfo();
1696       if (II == 0) {
1697         // #define X(1
1698         Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
1699         return true;
1700       }
1701 
1702       // If this is already used as an argument, it is used multiple times (e.g.
1703       // #define X(A,A.
1704       if (std::find(Arguments.begin(), Arguments.end(), II) !=
1705           Arguments.end()) {  // C99 6.10.3p6
1706         Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II;
1707         return true;
1708       }
1709 
1710       // Add the argument to the macro info.
1711       Arguments.push_back(II);
1712 
1713       // Lex the token after the identifier.
1714       LexUnexpandedToken(Tok);
1715 
1716       switch (Tok.getKind()) {
1717       default:          // #define X(A B
1718         Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
1719         return true;
1720       case tok::r_paren: // #define X(A)
1721         MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
1722         return false;
1723       case tok::comma:  // #define X(A,
1724         break;
1725       case tok::ellipsis:  // #define X(A... -> GCC extension
1726         // Diagnose extension.
1727         Diag(Tok, diag::ext_named_variadic_macro);
1728 
1729         // Lex the token after the identifier.
1730         LexUnexpandedToken(Tok);
1731         if (Tok.isNot(tok::r_paren)) {
1732           Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
1733           return true;
1734         }
1735 
1736         MI->setIsGNUVarargs();
1737         MI->setArgumentList(&Arguments[0], Arguments.size(), BP);
1738         return false;
1739       }
1740     }
1741   }
1742 }
1743 
1744 /// HandleDefineDirective - Implements \#define.  This consumes the entire macro
1745 /// line then lets the caller lex the next real token.
1746 void Preprocessor::HandleDefineDirective(Token &DefineTok) {
1747   ++NumDefined;
1748 
1749   Token MacroNameTok;
1750   ReadMacroName(MacroNameTok, 1);
1751 
1752   // Error reading macro name?  If so, diagnostic already issued.
1753   if (MacroNameTok.is(tok::eod))
1754     return;
1755 
1756   Token LastTok = MacroNameTok;
1757 
1758   // If we are supposed to keep comments in #defines, reenable comment saving
1759   // mode.
1760   if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments);
1761 
1762   // Create the new macro.
1763   MacroInfo *MI = AllocateMacroInfo(MacroNameTok.getLocation());
1764 
1765   Token Tok;
1766   LexUnexpandedToken(Tok);
1767 
1768   // If this is a function-like macro definition, parse the argument list,
1769   // marking each of the identifiers as being used as macro arguments.  Also,
1770   // check other constraints on the first token of the macro body.
1771   if (Tok.is(tok::eod)) {
1772     // If there is no body to this macro, we have no special handling here.
1773   } else if (Tok.hasLeadingSpace()) {
1774     // This is a normal token with leading space.  Clear the leading space
1775     // marker on the first token to get proper expansion.
1776     Tok.clearFlag(Token::LeadingSpace);
1777   } else if (Tok.is(tok::l_paren)) {
1778     // This is a function-like macro definition.  Read the argument list.
1779     MI->setIsFunctionLike();
1780     if (ReadMacroDefinitionArgList(MI, LastTok)) {
1781       // Forget about MI.
1782       ReleaseMacroInfo(MI);
1783       // Throw away the rest of the line.
1784       if (CurPPLexer->ParsingPreprocessorDirective)
1785         DiscardUntilEndOfDirective();
1786       return;
1787     }
1788 
1789     // If this is a definition of a variadic C99 function-like macro, not using
1790     // the GNU named varargs extension, enabled __VA_ARGS__.
1791 
1792     // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
1793     // This gets unpoisoned where it is allowed.
1794     assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!");
1795     if (MI->isC99Varargs())
1796       Ident__VA_ARGS__->setIsPoisoned(false);
1797 
1798     // Read the first token after the arg list for down below.
1799     LexUnexpandedToken(Tok);
1800   } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {
1801     // C99 requires whitespace between the macro definition and the body.  Emit
1802     // a diagnostic for something like "#define X+".
1803     Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
1804   } else {
1805     // C90 6.8 TC1 says: "In the definition of an object-like macro, if the
1806     // first character of a replacement list is not a character required by
1807     // subclause 5.2.1, then there shall be white-space separation between the
1808     // identifier and the replacement list.".  5.2.1 lists this set:
1809     //   "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which
1810     // is irrelevant here.
1811     bool isInvalid = false;
1812     if (Tok.is(tok::at)) // @ is not in the list above.
1813       isInvalid = true;
1814     else if (Tok.is(tok::unknown)) {
1815       // If we have an unknown token, it is something strange like "`".  Since
1816       // all of valid characters would have lexed into a single character
1817       // token of some sort, we know this is not a valid case.
1818       isInvalid = true;
1819     }
1820     if (isInvalid)
1821       Diag(Tok, diag::ext_missing_whitespace_after_macro_name);
1822     else
1823       Diag(Tok, diag::warn_missing_whitespace_after_macro_name);
1824   }
1825 
1826   if (!Tok.is(tok::eod))
1827     LastTok = Tok;
1828 
1829   // Read the rest of the macro body.
1830   if (MI->isObjectLike()) {
1831     // Object-like macros are very simple, just read their body.
1832     while (Tok.isNot(tok::eod)) {
1833       LastTok = Tok;
1834       MI->AddTokenToBody(Tok);
1835       // Get the next token of the macro.
1836       LexUnexpandedToken(Tok);
1837     }
1838 
1839   } else {
1840     // Otherwise, read the body of a function-like macro.  While we are at it,
1841     // check C99 6.10.3.2p1: ensure that # operators are followed by macro
1842     // parameters in function-like macro expansions.
1843     while (Tok.isNot(tok::eod)) {
1844       LastTok = Tok;
1845 
1846       if (Tok.isNot(tok::hash) && Tok.isNot(tok::hashhash)) {
1847         MI->AddTokenToBody(Tok);
1848 
1849         // Get the next token of the macro.
1850         LexUnexpandedToken(Tok);
1851         continue;
1852       }
1853 
1854       if (Tok.is(tok::hashhash)) {
1855 
1856         // If we see token pasting, check if it looks like the gcc comma
1857         // pasting extension.  We'll use this information to suppress
1858         // diagnostics later on.
1859 
1860         // Get the next token of the macro.
1861         LexUnexpandedToken(Tok);
1862 
1863         if (Tok.is(tok::eod)) {
1864           MI->AddTokenToBody(LastTok);
1865           break;
1866         }
1867 
1868         unsigned NumTokens = MI->getNumTokens();
1869         if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ &&
1870             MI->getReplacementToken(NumTokens-1).is(tok::comma))
1871           MI->setHasCommaPasting();
1872 
1873         // Things look ok, add the '##' and param name tokens to the macro.
1874         MI->AddTokenToBody(LastTok);
1875         MI->AddTokenToBody(Tok);
1876         LastTok = Tok;
1877 
1878         // Get the next token of the macro.
1879         LexUnexpandedToken(Tok);
1880         continue;
1881       }
1882 
1883       // Get the next token of the macro.
1884       LexUnexpandedToken(Tok);
1885 
1886       // Check for a valid macro arg identifier.
1887       if (Tok.getIdentifierInfo() == 0 ||
1888           MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) {
1889 
1890         // If this is assembler-with-cpp mode, we accept random gibberish after
1891         // the '#' because '#' is often a comment character.  However, change
1892         // the kind of the token to tok::unknown so that the preprocessor isn't
1893         // confused.
1894         if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {
1895           LastTok.setKind(tok::unknown);
1896         } else {
1897           Diag(Tok, diag::err_pp_stringize_not_parameter);
1898           ReleaseMacroInfo(MI);
1899 
1900           // Disable __VA_ARGS__ again.
1901           Ident__VA_ARGS__->setIsPoisoned(true);
1902           return;
1903         }
1904       }
1905 
1906       // Things look ok, add the '#' and param name tokens to the macro.
1907       MI->AddTokenToBody(LastTok);
1908       MI->AddTokenToBody(Tok);
1909       LastTok = Tok;
1910 
1911       // Get the next token of the macro.
1912       LexUnexpandedToken(Tok);
1913     }
1914   }
1915 
1916 
1917   // Disable __VA_ARGS__ again.
1918   Ident__VA_ARGS__->setIsPoisoned(true);
1919 
1920   // Check that there is no paste (##) operator at the beginning or end of the
1921   // replacement list.
1922   unsigned NumTokens = MI->getNumTokens();
1923   if (NumTokens != 0) {
1924     if (MI->getReplacementToken(0).is(tok::hashhash)) {
1925       Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
1926       ReleaseMacroInfo(MI);
1927       return;
1928     }
1929     if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
1930       Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
1931       ReleaseMacroInfo(MI);
1932       return;
1933     }
1934   }
1935 
1936   MI->setDefinitionEndLoc(LastTok.getLocation());
1937 
1938   // Finally, if this identifier already had a macro defined for it, verify that
1939   // the macro bodies are identical, and issue diagnostics if they are not.
1940   if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) {
1941     // It is very common for system headers to have tons of macro redefinitions
1942     // and for warnings to be disabled in system headers.  If this is the case,
1943     // then don't bother calling MacroInfo::isIdenticalTo.
1944     if (!getDiagnostics().getSuppressSystemWarnings() ||
1945         !SourceMgr.isInSystemHeader(DefineTok.getLocation())) {
1946       if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused())
1947         Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
1948 
1949       // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and
1950       // C++ [cpp.predefined]p4, but allow it as an extension.
1951       if (OtherMI->isBuiltinMacro())
1952         Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro);
1953       // Macros must be identical.  This means all tokens and whitespace
1954       // separation must be the same.  C99 6.10.3p2.
1955       else if (!OtherMI->isAllowRedefinitionsWithoutWarning() &&
1956                !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) {
1957         Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef)
1958           << MacroNameTok.getIdentifierInfo();
1959         Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition);
1960       }
1961     }
1962     if (OtherMI->isWarnIfUnused())
1963       WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc());
1964   }
1965 
1966   DefMacroDirective *MD =
1967       appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI);
1968 
1969   assert(!MI->isUsed());
1970   // If we need warning for not using the macro, add its location in the
1971   // warn-because-unused-macro set. If it gets used it will be removed from set.
1972   if (isInPrimaryFile() && // don't warn for include'd macros.
1973       Diags->getDiagnosticLevel(diag::pp_macro_not_used,
1974           MI->getDefinitionLoc()) != DiagnosticsEngine::Ignored) {
1975     MI->setIsWarnIfUnused(true);
1976     WarnUnusedMacroLocs.insert(MI->getDefinitionLoc());
1977   }
1978 
1979   // If the callbacks want to know, tell them about the macro definition.
1980   if (Callbacks)
1981     Callbacks->MacroDefined(MacroNameTok, MD);
1982 }
1983 
1984 /// HandleUndefDirective - Implements \#undef.
1985 ///
1986 void Preprocessor::HandleUndefDirective(Token &UndefTok) {
1987   ++NumUndefined;
1988 
1989   Token MacroNameTok;
1990   ReadMacroName(MacroNameTok, 2);
1991 
1992   // Error reading macro name?  If so, diagnostic already issued.
1993   if (MacroNameTok.is(tok::eod))
1994     return;
1995 
1996   // Check to see if this is the last token on the #undef line.
1997   CheckEndOfDirective("undef");
1998 
1999   // Okay, we finally have a valid identifier to undef.
2000   MacroDirective *MD = getMacroDirective(MacroNameTok.getIdentifierInfo());
2001   const MacroInfo *MI = MD ? MD->getMacroInfo() : 0;
2002 
2003   // If the callbacks want to know, tell them about the macro #undef.
2004   // Note: no matter if the macro was defined or not.
2005   if (Callbacks)
2006     Callbacks->MacroUndefined(MacroNameTok, MD);
2007 
2008   // If the macro is not defined, this is a noop undef, just return.
2009   if (MI == 0) return;
2010 
2011   if (!MI->isUsed() && MI->isWarnIfUnused())
2012     Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
2013 
2014   if (MI->isWarnIfUnused())
2015     WarnUnusedMacroLocs.erase(MI->getDefinitionLoc());
2016 
2017   appendMacroDirective(MacroNameTok.getIdentifierInfo(),
2018                        AllocateUndefMacroDirective(MacroNameTok.getLocation()));
2019 }
2020 
2021 
2022 //===----------------------------------------------------------------------===//
2023 // Preprocessor Conditional Directive Handling.
2024 //===----------------------------------------------------------------------===//
2025 
2026 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive.  isIfndef
2027 /// is true when this is a \#ifndef directive.  ReadAnyTokensBeforeDirective is
2028 /// true if any tokens have been returned or pp-directives activated before this
2029 /// \#ifndef has been lexed.
2030 ///
2031 void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
2032                                         bool ReadAnyTokensBeforeDirective) {
2033   ++NumIf;
2034   Token DirectiveTok = Result;
2035 
2036   Token MacroNameTok;
2037   ReadMacroName(MacroNameTok);
2038 
2039   // Error reading macro name?  If so, diagnostic already issued.
2040   if (MacroNameTok.is(tok::eod)) {
2041     // Skip code until we get to #endif.  This helps with recovery by not
2042     // emitting an error when the #endif is reached.
2043     SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2044                                  /*Foundnonskip*/false, /*FoundElse*/false);
2045     return;
2046   }
2047 
2048   // Check to see if this is the last token on the #if[n]def line.
2049   CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef");
2050 
2051   IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
2052   MacroDirective *MD = getMacroDirective(MII);
2053   MacroInfo *MI = MD ? MD->getMacroInfo() : 0;
2054 
2055   if (CurPPLexer->getConditionalStackDepth() == 0) {
2056     // If the start of a top-level #ifdef and if the macro is not defined,
2057     // inform MIOpt that this might be the start of a proper include guard.
2058     // Otherwise it is some other form of unknown conditional which we can't
2059     // handle.
2060     if (!ReadAnyTokensBeforeDirective && MI == 0) {
2061       assert(isIfndef && "#ifdef shouldn't reach here");
2062       CurPPLexer->MIOpt.EnterTopLevelIFNDEF(MII);
2063     } else
2064       CurPPLexer->MIOpt.EnterTopLevelConditional();
2065   }
2066 
2067   // If there is a macro, process it.
2068   if (MI)  // Mark it used.
2069     markMacroAsUsed(MI);
2070 
2071   if (Callbacks) {
2072     if (isIfndef)
2073       Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD);
2074     else
2075       Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD);
2076   }
2077 
2078   // Should we include the stuff contained by this directive?
2079   if (!MI == isIfndef) {
2080     // Yes, remember that we are inside a conditional, then lex the next token.
2081     CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(),
2082                                      /*wasskip*/false, /*foundnonskip*/true,
2083                                      /*foundelse*/false);
2084   } else {
2085     // No, skip the contents of this block.
2086     SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2087                                  /*Foundnonskip*/false,
2088                                  /*FoundElse*/false);
2089   }
2090 }
2091 
2092 /// HandleIfDirective - Implements the \#if directive.
2093 ///
2094 void Preprocessor::HandleIfDirective(Token &IfToken,
2095                                      bool ReadAnyTokensBeforeDirective) {
2096   ++NumIf;
2097 
2098   // Parse and evaluate the conditional expression.
2099   IdentifierInfo *IfNDefMacro = 0;
2100   const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation();
2101   const bool ConditionalTrue = EvaluateDirectiveExpression(IfNDefMacro);
2102   const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation();
2103 
2104   // If this condition is equivalent to #ifndef X, and if this is the first
2105   // directive seen, handle it for the multiple-include optimization.
2106   if (CurPPLexer->getConditionalStackDepth() == 0) {
2107     if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue)
2108       CurPPLexer->MIOpt.EnterTopLevelIFNDEF(IfNDefMacro);
2109     else
2110       CurPPLexer->MIOpt.EnterTopLevelConditional();
2111   }
2112 
2113   if (Callbacks)
2114     Callbacks->If(IfToken.getLocation(),
2115                   SourceRange(ConditionalBegin, ConditionalEnd));
2116 
2117   // Should we include the stuff contained by this directive?
2118   if (ConditionalTrue) {
2119     // Yes, remember that we are inside a conditional, then lex the next token.
2120     CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
2121                                    /*foundnonskip*/true, /*foundelse*/false);
2122   } else {
2123     // No, skip the contents of this block.
2124     SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false,
2125                                  /*FoundElse*/false);
2126   }
2127 }
2128 
2129 /// HandleEndifDirective - Implements the \#endif directive.
2130 ///
2131 void Preprocessor::HandleEndifDirective(Token &EndifToken) {
2132   ++NumEndif;
2133 
2134   // Check that this is the whole directive.
2135   CheckEndOfDirective("endif");
2136 
2137   PPConditionalInfo CondInfo;
2138   if (CurPPLexer->popConditionalLevel(CondInfo)) {
2139     // No conditionals on the stack: this is an #endif without an #if.
2140     Diag(EndifToken, diag::err_pp_endif_without_if);
2141     return;
2142   }
2143 
2144   // If this the end of a top-level #endif, inform MIOpt.
2145   if (CurPPLexer->getConditionalStackDepth() == 0)
2146     CurPPLexer->MIOpt.ExitTopLevelConditional();
2147 
2148   assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode &&
2149          "This code should only be reachable in the non-skipping case!");
2150 
2151   if (Callbacks)
2152     Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc);
2153 }
2154 
2155 /// HandleElseDirective - Implements the \#else directive.
2156 ///
2157 void Preprocessor::HandleElseDirective(Token &Result) {
2158   ++NumElse;
2159 
2160   // #else directive in a non-skipping conditional... start skipping.
2161   CheckEndOfDirective("else");
2162 
2163   PPConditionalInfo CI;
2164   if (CurPPLexer->popConditionalLevel(CI)) {
2165     Diag(Result, diag::pp_err_else_without_if);
2166     return;
2167   }
2168 
2169   // If this is a top-level #else, inform the MIOpt.
2170   if (CurPPLexer->getConditionalStackDepth() == 0)
2171     CurPPLexer->MIOpt.EnterTopLevelConditional();
2172 
2173   // If this is a #else with a #else before it, report the error.
2174   if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
2175 
2176   if (Callbacks)
2177     Callbacks->Else(Result.getLocation(), CI.IfLoc);
2178 
2179   // Finally, skip the rest of the contents of this block.
2180   SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2181                                /*FoundElse*/true, Result.getLocation());
2182 }
2183 
2184 /// HandleElifDirective - Implements the \#elif directive.
2185 ///
2186 void Preprocessor::HandleElifDirective(Token &ElifToken) {
2187   ++NumElse;
2188 
2189   // #elif directive in a non-skipping conditional... start skipping.
2190   // We don't care what the condition is, because we will always skip it (since
2191   // the block immediately before it was included).
2192   const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation();
2193   DiscardUntilEndOfDirective();
2194   const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation();
2195 
2196   PPConditionalInfo CI;
2197   if (CurPPLexer->popConditionalLevel(CI)) {
2198     Diag(ElifToken, diag::pp_err_elif_without_if);
2199     return;
2200   }
2201 
2202   // If this is a top-level #elif, inform the MIOpt.
2203   if (CurPPLexer->getConditionalStackDepth() == 0)
2204     CurPPLexer->MIOpt.EnterTopLevelConditional();
2205 
2206   // If this is a #elif with a #else before it, report the error.
2207   if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
2208 
2209   if (Callbacks)
2210     Callbacks->Elif(ElifToken.getLocation(),
2211                     SourceRange(ConditionalBegin, ConditionalEnd), CI.IfLoc);
2212 
2213   // Finally, skip the rest of the contents of this block.
2214   SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2215                                /*FoundElse*/CI.FoundElse,
2216                                ElifToken.getLocation());
2217 }
2218