Parser.cpp revision 263508
1//===--- Parser.cpp - C Language Family Parser ----------------------------===//
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//  This file implements the Parser interfaces.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Parse/Parser.h"
15#include "ParsePragma.h"
16#include "RAIIObjectsForParser.h"
17#include "clang/AST/ASTConsumer.h"
18#include "clang/AST/DeclTemplate.h"
19#include "clang/Parse/ParseDiagnostic.h"
20#include "clang/Sema/DeclSpec.h"
21#include "clang/Sema/ParsedTemplate.h"
22#include "clang/Sema/Scope.h"
23#include "llvm/Support/raw_ostream.h"
24using namespace clang;
25
26
27namespace {
28/// \brief A comment handler that passes comments found by the preprocessor
29/// to the parser action.
30class ActionCommentHandler : public CommentHandler {
31  Sema &S;
32
33public:
34  explicit ActionCommentHandler(Sema &S) : S(S) { }
35
36  virtual bool HandleComment(Preprocessor &PP, SourceRange Comment) {
37    S.ActOnComment(Comment);
38    return false;
39  }
40};
41} // end anonymous namespace
42
43IdentifierInfo *Parser::getSEHExceptKeyword() {
44  // __except is accepted as a (contextual) keyword
45  if (!Ident__except && (getLangOpts().MicrosoftExt || getLangOpts().Borland))
46    Ident__except = PP.getIdentifierInfo("__except");
47
48  return Ident__except;
49}
50
51Parser::Parser(Preprocessor &pp, Sema &actions, bool skipFunctionBodies)
52  : PP(pp), Actions(actions), Diags(PP.getDiagnostics()),
53    GreaterThanIsOperator(true), ColonIsSacred(false),
54    InMessageExpression(false), TemplateParameterDepth(0),
55    ParsingInObjCContainer(false) {
56  SkipFunctionBodies = pp.isCodeCompletionEnabled() || skipFunctionBodies;
57  Tok.startToken();
58  Tok.setKind(tok::eof);
59  Actions.CurScope = 0;
60  NumCachedScopes = 0;
61  ParenCount = BracketCount = BraceCount = 0;
62  CurParsedObjCImpl = 0;
63
64  // Add #pragma handlers. These are removed and destroyed in the
65  // destructor.
66  AlignHandler.reset(new PragmaAlignHandler());
67  PP.AddPragmaHandler(AlignHandler.get());
68
69  GCCVisibilityHandler.reset(new PragmaGCCVisibilityHandler());
70  PP.AddPragmaHandler("GCC", GCCVisibilityHandler.get());
71
72  OptionsHandler.reset(new PragmaOptionsHandler());
73  PP.AddPragmaHandler(OptionsHandler.get());
74
75  PackHandler.reset(new PragmaPackHandler());
76  PP.AddPragmaHandler(PackHandler.get());
77
78  MSStructHandler.reset(new PragmaMSStructHandler());
79  PP.AddPragmaHandler(MSStructHandler.get());
80
81  UnusedHandler.reset(new PragmaUnusedHandler());
82  PP.AddPragmaHandler(UnusedHandler.get());
83
84  WeakHandler.reset(new PragmaWeakHandler());
85  PP.AddPragmaHandler(WeakHandler.get());
86
87  RedefineExtnameHandler.reset(new PragmaRedefineExtnameHandler());
88  PP.AddPragmaHandler(RedefineExtnameHandler.get());
89
90  FPContractHandler.reset(new PragmaFPContractHandler());
91  PP.AddPragmaHandler("STDC", FPContractHandler.get());
92
93  if (getLangOpts().OpenCL) {
94    OpenCLExtensionHandler.reset(new PragmaOpenCLExtensionHandler());
95    PP.AddPragmaHandler("OPENCL", OpenCLExtensionHandler.get());
96
97    PP.AddPragmaHandler("OPENCL", FPContractHandler.get());
98  }
99  if (getLangOpts().OpenMP)
100    OpenMPHandler.reset(new PragmaOpenMPHandler());
101  else
102    OpenMPHandler.reset(new PragmaNoOpenMPHandler());
103  PP.AddPragmaHandler(OpenMPHandler.get());
104
105  if (getLangOpts().MicrosoftExt) {
106    MSCommentHandler.reset(new PragmaCommentHandler(actions));
107    PP.AddPragmaHandler(MSCommentHandler.get());
108    MSDetectMismatchHandler.reset(new PragmaDetectMismatchHandler(actions));
109    PP.AddPragmaHandler(MSDetectMismatchHandler.get());
110  }
111
112  CommentSemaHandler.reset(new ActionCommentHandler(actions));
113  PP.addCommentHandler(CommentSemaHandler.get());
114
115  PP.setCodeCompletionHandler(*this);
116}
117
118DiagnosticBuilder Parser::Diag(SourceLocation Loc, unsigned DiagID) {
119  return Diags.Report(Loc, DiagID);
120}
121
122DiagnosticBuilder Parser::Diag(const Token &Tok, unsigned DiagID) {
123  return Diag(Tok.getLocation(), DiagID);
124}
125
126/// \brief Emits a diagnostic suggesting parentheses surrounding a
127/// given range.
128///
129/// \param Loc The location where we'll emit the diagnostic.
130/// \param DK The kind of diagnostic to emit.
131/// \param ParenRange Source range enclosing code that should be parenthesized.
132void Parser::SuggestParentheses(SourceLocation Loc, unsigned DK,
133                                SourceRange ParenRange) {
134  SourceLocation EndLoc = PP.getLocForEndOfToken(ParenRange.getEnd());
135  if (!ParenRange.getEnd().isFileID() || EndLoc.isInvalid()) {
136    // We can't display the parentheses, so just dig the
137    // warning/error and return.
138    Diag(Loc, DK);
139    return;
140  }
141
142  Diag(Loc, DK)
143    << FixItHint::CreateInsertion(ParenRange.getBegin(), "(")
144    << FixItHint::CreateInsertion(EndLoc, ")");
145}
146
147static bool IsCommonTypo(tok::TokenKind ExpectedTok, const Token &Tok) {
148  switch (ExpectedTok) {
149  case tok::semi:
150    return Tok.is(tok::colon) || Tok.is(tok::comma); // : or , for ;
151  default: return false;
152  }
153}
154
155/// ExpectAndConsume - The parser expects that 'ExpectedTok' is next in the
156/// input.  If so, it is consumed and false is returned.
157///
158/// If the input is malformed, this emits the specified diagnostic.  Next, if
159/// SkipToTok is specified, it calls SkipUntil(SkipToTok).  Finally, true is
160/// returned.
161bool Parser::ExpectAndConsume(tok::TokenKind ExpectedTok, unsigned DiagID,
162                              const char *Msg, tok::TokenKind SkipToTok) {
163  if (Tok.is(ExpectedTok) || Tok.is(tok::code_completion)) {
164    ConsumeAnyToken();
165    return false;
166  }
167
168  // Detect common single-character typos and resume.
169  if (IsCommonTypo(ExpectedTok, Tok)) {
170    SourceLocation Loc = Tok.getLocation();
171    Diag(Loc, DiagID)
172      << Msg
173      << FixItHint::CreateReplacement(SourceRange(Loc),
174                                      getTokenSimpleSpelling(ExpectedTok));
175    ConsumeAnyToken();
176
177    // Pretend there wasn't a problem.
178    return false;
179  }
180
181  const char *Spelling = 0;
182  SourceLocation EndLoc = PP.getLocForEndOfToken(PrevTokLocation);
183  if (EndLoc.isValid() &&
184      (Spelling = tok::getTokenSimpleSpelling(ExpectedTok))) {
185    // Show what code to insert to fix this problem.
186    Diag(EndLoc, DiagID)
187      << Msg
188      << FixItHint::CreateInsertion(EndLoc, Spelling);
189  } else
190    Diag(Tok, DiagID) << Msg;
191
192  if (SkipToTok != tok::unknown)
193    SkipUntil(SkipToTok, StopAtSemi);
194  return true;
195}
196
197bool Parser::ExpectAndConsumeSemi(unsigned DiagID) {
198  if (Tok.is(tok::semi) || Tok.is(tok::code_completion)) {
199    ConsumeToken();
200    return false;
201  }
202
203  if ((Tok.is(tok::r_paren) || Tok.is(tok::r_square)) &&
204      NextToken().is(tok::semi)) {
205    Diag(Tok, diag::err_extraneous_token_before_semi)
206      << PP.getSpelling(Tok)
207      << FixItHint::CreateRemoval(Tok.getLocation());
208    ConsumeAnyToken(); // The ')' or ']'.
209    ConsumeToken(); // The ';'.
210    return false;
211  }
212
213  return ExpectAndConsume(tok::semi, DiagID);
214}
215
216void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, unsigned TST) {
217  if (!Tok.is(tok::semi)) return;
218
219  bool HadMultipleSemis = false;
220  SourceLocation StartLoc = Tok.getLocation();
221  SourceLocation EndLoc = Tok.getLocation();
222  ConsumeToken();
223
224  while ((Tok.is(tok::semi) && !Tok.isAtStartOfLine())) {
225    HadMultipleSemis = true;
226    EndLoc = Tok.getLocation();
227    ConsumeToken();
228  }
229
230  // C++11 allows extra semicolons at namespace scope, but not in any of the
231  // other contexts.
232  if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {
233    if (getLangOpts().CPlusPlus11)
234      Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi)
235          << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
236    else
237      Diag(StartLoc, diag::ext_extra_semi_cxx11)
238          << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
239    return;
240  }
241
242  if (Kind != AfterMemberFunctionDefinition || HadMultipleSemis)
243    Diag(StartLoc, diag::ext_extra_semi)
244        << Kind << DeclSpec::getSpecifierName((DeclSpec::TST)TST)
245        << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
246  else
247    // A single semicolon is valid after a member function definition.
248    Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def)
249      << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
250}
251
252//===----------------------------------------------------------------------===//
253// Error recovery.
254//===----------------------------------------------------------------------===//
255
256static bool HasFlagsSet(Parser::SkipUntilFlags L, Parser::SkipUntilFlags R) {
257  return (static_cast<unsigned>(L) & static_cast<unsigned>(R)) != 0;
258}
259
260/// SkipUntil - Read tokens until we get to the specified token, then consume
261/// it (unless no flag StopBeforeMatch).  Because we cannot guarantee that the
262/// token will ever occur, this skips to the next token, or to some likely
263/// good stopping point.  If StopAtSemi is true, skipping will stop at a ';'
264/// character.
265///
266/// If SkipUntil finds the specified token, it returns true, otherwise it
267/// returns false.
268bool Parser::SkipUntil(ArrayRef<tok::TokenKind> Toks, SkipUntilFlags Flags) {
269  // We always want this function to skip at least one token if the first token
270  // isn't T and if not at EOF.
271  bool isFirstTokenSkipped = true;
272  while (1) {
273    // If we found one of the tokens, stop and return true.
274    for (unsigned i = 0, NumToks = Toks.size(); i != NumToks; ++i) {
275      if (Tok.is(Toks[i])) {
276        if (HasFlagsSet(Flags, StopBeforeMatch)) {
277          // Noop, don't consume the token.
278        } else {
279          ConsumeAnyToken();
280        }
281        return true;
282      }
283    }
284
285    // Important special case: The caller has given up and just wants us to
286    // skip the rest of the file. Do this without recursing, since we can
287    // get here precisely because the caller detected too much recursion.
288    if (Toks.size() == 1 && Toks[0] == tok::eof &&
289        !HasFlagsSet(Flags, StopAtSemi) &&
290        !HasFlagsSet(Flags, StopAtCodeCompletion)) {
291      while (Tok.getKind() != tok::eof)
292        ConsumeAnyToken();
293      return true;
294    }
295
296    switch (Tok.getKind()) {
297    case tok::eof:
298      // Ran out of tokens.
299      return false;
300
301    case tok::code_completion:
302      if (!HasFlagsSet(Flags, StopAtCodeCompletion))
303        ConsumeToken();
304      return false;
305
306    case tok::l_paren:
307      // Recursively skip properly-nested parens.
308      ConsumeParen();
309      if (HasFlagsSet(Flags, StopAtCodeCompletion))
310        SkipUntil(tok::r_paren, StopAtCodeCompletion);
311      else
312        SkipUntil(tok::r_paren);
313      break;
314    case tok::l_square:
315      // Recursively skip properly-nested square brackets.
316      ConsumeBracket();
317      if (HasFlagsSet(Flags, StopAtCodeCompletion))
318        SkipUntil(tok::r_square, StopAtCodeCompletion);
319      else
320        SkipUntil(tok::r_square);
321      break;
322    case tok::l_brace:
323      // Recursively skip properly-nested braces.
324      ConsumeBrace();
325      if (HasFlagsSet(Flags, StopAtCodeCompletion))
326        SkipUntil(tok::r_brace, StopAtCodeCompletion);
327      else
328        SkipUntil(tok::r_brace);
329      break;
330
331    // Okay, we found a ']' or '}' or ')', which we think should be balanced.
332    // Since the user wasn't looking for this token (if they were, it would
333    // already be handled), this isn't balanced.  If there is a LHS token at a
334    // higher level, we will assume that this matches the unbalanced token
335    // and return it.  Otherwise, this is a spurious RHS token, which we skip.
336    case tok::r_paren:
337      if (ParenCount && !isFirstTokenSkipped)
338        return false;  // Matches something.
339      ConsumeParen();
340      break;
341    case tok::r_square:
342      if (BracketCount && !isFirstTokenSkipped)
343        return false;  // Matches something.
344      ConsumeBracket();
345      break;
346    case tok::r_brace:
347      if (BraceCount && !isFirstTokenSkipped)
348        return false;  // Matches something.
349      ConsumeBrace();
350      break;
351
352    case tok::string_literal:
353    case tok::wide_string_literal:
354    case tok::utf8_string_literal:
355    case tok::utf16_string_literal:
356    case tok::utf32_string_literal:
357      ConsumeStringToken();
358      break;
359
360    case tok::semi:
361      if (HasFlagsSet(Flags, StopAtSemi))
362        return false;
363      // FALL THROUGH.
364    default:
365      // Skip this token.
366      ConsumeToken();
367      break;
368    }
369    isFirstTokenSkipped = false;
370  }
371}
372
373//===----------------------------------------------------------------------===//
374// Scope manipulation
375//===----------------------------------------------------------------------===//
376
377/// EnterScope - Start a new scope.
378void Parser::EnterScope(unsigned ScopeFlags) {
379  if (NumCachedScopes) {
380    Scope *N = ScopeCache[--NumCachedScopes];
381    N->Init(getCurScope(), ScopeFlags);
382    Actions.CurScope = N;
383  } else {
384    Actions.CurScope = new Scope(getCurScope(), ScopeFlags, Diags);
385  }
386}
387
388/// ExitScope - Pop a scope off the scope stack.
389void Parser::ExitScope() {
390  assert(getCurScope() && "Scope imbalance!");
391
392  // Inform the actions module that this scope is going away if there are any
393  // decls in it.
394  if (!getCurScope()->decl_empty())
395    Actions.ActOnPopScope(Tok.getLocation(), getCurScope());
396
397  Scope *OldScope = getCurScope();
398  Actions.CurScope = OldScope->getParent();
399
400  if (NumCachedScopes == ScopeCacheSize)
401    delete OldScope;
402  else
403    ScopeCache[NumCachedScopes++] = OldScope;
404}
405
406/// Set the flags for the current scope to ScopeFlags. If ManageFlags is false,
407/// this object does nothing.
408Parser::ParseScopeFlags::ParseScopeFlags(Parser *Self, unsigned ScopeFlags,
409                                 bool ManageFlags)
410  : CurScope(ManageFlags ? Self->getCurScope() : 0) {
411  if (CurScope) {
412    OldFlags = CurScope->getFlags();
413    CurScope->setFlags(ScopeFlags);
414  }
415}
416
417/// Restore the flags for the current scope to what they were before this
418/// object overrode them.
419Parser::ParseScopeFlags::~ParseScopeFlags() {
420  if (CurScope)
421    CurScope->setFlags(OldFlags);
422}
423
424
425//===----------------------------------------------------------------------===//
426// C99 6.9: External Definitions.
427//===----------------------------------------------------------------------===//
428
429Parser::~Parser() {
430  // If we still have scopes active, delete the scope tree.
431  delete getCurScope();
432  Actions.CurScope = 0;
433
434  // Free the scope cache.
435  for (unsigned i = 0, e = NumCachedScopes; i != e; ++i)
436    delete ScopeCache[i];
437
438  // Remove the pragma handlers we installed.
439  PP.RemovePragmaHandler(AlignHandler.get());
440  AlignHandler.reset();
441  PP.RemovePragmaHandler("GCC", GCCVisibilityHandler.get());
442  GCCVisibilityHandler.reset();
443  PP.RemovePragmaHandler(OptionsHandler.get());
444  OptionsHandler.reset();
445  PP.RemovePragmaHandler(PackHandler.get());
446  PackHandler.reset();
447  PP.RemovePragmaHandler(MSStructHandler.get());
448  MSStructHandler.reset();
449  PP.RemovePragmaHandler(UnusedHandler.get());
450  UnusedHandler.reset();
451  PP.RemovePragmaHandler(WeakHandler.get());
452  WeakHandler.reset();
453  PP.RemovePragmaHandler(RedefineExtnameHandler.get());
454  RedefineExtnameHandler.reset();
455
456  if (getLangOpts().OpenCL) {
457    PP.RemovePragmaHandler("OPENCL", OpenCLExtensionHandler.get());
458    OpenCLExtensionHandler.reset();
459    PP.RemovePragmaHandler("OPENCL", FPContractHandler.get());
460  }
461  PP.RemovePragmaHandler(OpenMPHandler.get());
462  OpenMPHandler.reset();
463
464  if (getLangOpts().MicrosoftExt) {
465    PP.RemovePragmaHandler(MSCommentHandler.get());
466    MSCommentHandler.reset();
467    PP.RemovePragmaHandler(MSDetectMismatchHandler.get());
468    MSDetectMismatchHandler.reset();
469  }
470
471  PP.RemovePragmaHandler("STDC", FPContractHandler.get());
472  FPContractHandler.reset();
473
474  PP.removeCommentHandler(CommentSemaHandler.get());
475
476  PP.clearCodeCompletionHandler();
477
478  assert(TemplateIds.empty() && "Still alive TemplateIdAnnotations around?");
479}
480
481/// Initialize - Warm up the parser.
482///
483void Parser::Initialize() {
484  // Create the translation unit scope.  Install it as the current scope.
485  assert(getCurScope() == 0 && "A scope is already active?");
486  EnterScope(Scope::DeclScope);
487  Actions.ActOnTranslationUnitScope(getCurScope());
488
489  // Initialization for Objective-C context sensitive keywords recognition.
490  // Referenced in Parser::ParseObjCTypeQualifierList.
491  if (getLangOpts().ObjC1) {
492    ObjCTypeQuals[objc_in] = &PP.getIdentifierTable().get("in");
493    ObjCTypeQuals[objc_out] = &PP.getIdentifierTable().get("out");
494    ObjCTypeQuals[objc_inout] = &PP.getIdentifierTable().get("inout");
495    ObjCTypeQuals[objc_oneway] = &PP.getIdentifierTable().get("oneway");
496    ObjCTypeQuals[objc_bycopy] = &PP.getIdentifierTable().get("bycopy");
497    ObjCTypeQuals[objc_byref] = &PP.getIdentifierTable().get("byref");
498  }
499
500  Ident_instancetype = 0;
501  Ident_final = 0;
502  Ident_sealed = 0;
503  Ident_override = 0;
504
505  Ident_super = &PP.getIdentifierTable().get("super");
506
507  if (getLangOpts().AltiVec) {
508    Ident_vector = &PP.getIdentifierTable().get("vector");
509    Ident_pixel = &PP.getIdentifierTable().get("pixel");
510    Ident_bool = &PP.getIdentifierTable().get("bool");
511  }
512
513  Ident_introduced = 0;
514  Ident_deprecated = 0;
515  Ident_obsoleted = 0;
516  Ident_unavailable = 0;
517
518  Ident__except = 0;
519
520  Ident__exception_code = Ident__exception_info = Ident__abnormal_termination = 0;
521  Ident___exception_code = Ident___exception_info = Ident___abnormal_termination = 0;
522  Ident_GetExceptionCode = Ident_GetExceptionInfo = Ident_AbnormalTermination = 0;
523
524  if(getLangOpts().Borland) {
525    Ident__exception_info        = PP.getIdentifierInfo("_exception_info");
526    Ident___exception_info       = PP.getIdentifierInfo("__exception_info");
527    Ident_GetExceptionInfo       = PP.getIdentifierInfo("GetExceptionInformation");
528    Ident__exception_code        = PP.getIdentifierInfo("_exception_code");
529    Ident___exception_code       = PP.getIdentifierInfo("__exception_code");
530    Ident_GetExceptionCode       = PP.getIdentifierInfo("GetExceptionCode");
531    Ident__abnormal_termination  = PP.getIdentifierInfo("_abnormal_termination");
532    Ident___abnormal_termination = PP.getIdentifierInfo("__abnormal_termination");
533    Ident_AbnormalTermination    = PP.getIdentifierInfo("AbnormalTermination");
534
535    PP.SetPoisonReason(Ident__exception_code,diag::err_seh___except_block);
536    PP.SetPoisonReason(Ident___exception_code,diag::err_seh___except_block);
537    PP.SetPoisonReason(Ident_GetExceptionCode,diag::err_seh___except_block);
538    PP.SetPoisonReason(Ident__exception_info,diag::err_seh___except_filter);
539    PP.SetPoisonReason(Ident___exception_info,diag::err_seh___except_filter);
540    PP.SetPoisonReason(Ident_GetExceptionInfo,diag::err_seh___except_filter);
541    PP.SetPoisonReason(Ident__abnormal_termination,diag::err_seh___finally_block);
542    PP.SetPoisonReason(Ident___abnormal_termination,diag::err_seh___finally_block);
543    PP.SetPoisonReason(Ident_AbnormalTermination,diag::err_seh___finally_block);
544  }
545
546  Actions.Initialize();
547
548  // Prime the lexer look-ahead.
549  ConsumeToken();
550}
551
552namespace {
553  /// \brief RAIIObject to destroy the contents of a SmallVector of
554  /// TemplateIdAnnotation pointers and clear the vector.
555  class DestroyTemplateIdAnnotationsRAIIObj {
556    SmallVectorImpl<TemplateIdAnnotation *> &Container;
557  public:
558    DestroyTemplateIdAnnotationsRAIIObj(SmallVectorImpl<TemplateIdAnnotation *>
559                                       &Container)
560      : Container(Container) {}
561
562    ~DestroyTemplateIdAnnotationsRAIIObj() {
563      for (SmallVectorImpl<TemplateIdAnnotation *>::iterator I =
564           Container.begin(), E = Container.end();
565           I != E; ++I)
566        (*I)->Destroy();
567      Container.clear();
568    }
569  };
570}
571
572/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the
573/// action tells us to.  This returns true if the EOF was encountered.
574bool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result) {
575  DestroyTemplateIdAnnotationsRAIIObj CleanupRAII(TemplateIds);
576
577  // Skip over the EOF token, flagging end of previous input for incremental
578  // processing
579  if (PP.isIncrementalProcessingEnabled() && Tok.is(tok::eof))
580    ConsumeToken();
581
582  Result = DeclGroupPtrTy();
583  switch (Tok.getKind()) {
584  case tok::annot_pragma_unused:
585    HandlePragmaUnused();
586    return false;
587
588  case tok::annot_module_include:
589    Actions.ActOnModuleInclude(Tok.getLocation(),
590                               reinterpret_cast<Module *>(
591                                   Tok.getAnnotationValue()));
592    ConsumeToken();
593    return false;
594
595  case tok::eof:
596    // Late template parsing can begin.
597    if (getLangOpts().DelayedTemplateParsing)
598      Actions.SetLateTemplateParser(LateTemplateParserCallback, this);
599    if (!PP.isIncrementalProcessingEnabled())
600      Actions.ActOnEndOfTranslationUnit();
601    //else don't tell Sema that we ended parsing: more input might come.
602    return true;
603
604  default:
605    break;
606  }
607
608  ParsedAttributesWithRange attrs(AttrFactory);
609  MaybeParseCXX11Attributes(attrs);
610  MaybeParseMicrosoftAttributes(attrs);
611
612  Result = ParseExternalDeclaration(attrs);
613  return false;
614}
615
616/// ParseExternalDeclaration:
617///
618///       external-declaration: [C99 6.9], declaration: [C++ dcl.dcl]
619///         function-definition
620///         declaration
621/// [GNU]   asm-definition
622/// [GNU]   __extension__ external-declaration
623/// [OBJC]  objc-class-definition
624/// [OBJC]  objc-class-declaration
625/// [OBJC]  objc-alias-declaration
626/// [OBJC]  objc-protocol-definition
627/// [OBJC]  objc-method-definition
628/// [OBJC]  @end
629/// [C++]   linkage-specification
630/// [GNU] asm-definition:
631///         simple-asm-expr ';'
632/// [C++11] empty-declaration
633/// [C++11] attribute-declaration
634///
635/// [C++11] empty-declaration:
636///           ';'
637///
638/// [C++0x/GNU] 'extern' 'template' declaration
639Parser::DeclGroupPtrTy
640Parser::ParseExternalDeclaration(ParsedAttributesWithRange &attrs,
641                                 ParsingDeclSpec *DS) {
642  DestroyTemplateIdAnnotationsRAIIObj CleanupRAII(TemplateIds);
643  ParenBraceBracketBalancer BalancerRAIIObj(*this);
644
645  if (PP.isCodeCompletionReached()) {
646    cutOffParsing();
647    return DeclGroupPtrTy();
648  }
649
650  Decl *SingleDecl = 0;
651  switch (Tok.getKind()) {
652  case tok::annot_pragma_vis:
653    HandlePragmaVisibility();
654    return DeclGroupPtrTy();
655  case tok::annot_pragma_pack:
656    HandlePragmaPack();
657    return DeclGroupPtrTy();
658  case tok::annot_pragma_msstruct:
659    HandlePragmaMSStruct();
660    return DeclGroupPtrTy();
661  case tok::annot_pragma_align:
662    HandlePragmaAlign();
663    return DeclGroupPtrTy();
664  case tok::annot_pragma_weak:
665    HandlePragmaWeak();
666    return DeclGroupPtrTy();
667  case tok::annot_pragma_weakalias:
668    HandlePragmaWeakAlias();
669    return DeclGroupPtrTy();
670  case tok::annot_pragma_redefine_extname:
671    HandlePragmaRedefineExtname();
672    return DeclGroupPtrTy();
673  case tok::annot_pragma_fp_contract:
674    HandlePragmaFPContract();
675    return DeclGroupPtrTy();
676  case tok::annot_pragma_opencl_extension:
677    HandlePragmaOpenCLExtension();
678    return DeclGroupPtrTy();
679  case tok::annot_pragma_openmp:
680    ParseOpenMPDeclarativeDirective();
681    return DeclGroupPtrTy();
682  case tok::semi:
683    // Either a C++11 empty-declaration or attribute-declaration.
684    SingleDecl = Actions.ActOnEmptyDeclaration(getCurScope(),
685                                               attrs.getList(),
686                                               Tok.getLocation());
687    ConsumeExtraSemi(OutsideFunction);
688    break;
689  case tok::r_brace:
690    Diag(Tok, diag::err_extraneous_closing_brace);
691    ConsumeBrace();
692    return DeclGroupPtrTy();
693  case tok::eof:
694    Diag(Tok, diag::err_expected_external_declaration);
695    return DeclGroupPtrTy();
696  case tok::kw___extension__: {
697    // __extension__ silences extension warnings in the subexpression.
698    ExtensionRAIIObject O(Diags);  // Use RAII to do this.
699    ConsumeToken();
700    return ParseExternalDeclaration(attrs);
701  }
702  case tok::kw_asm: {
703    ProhibitAttributes(attrs);
704
705    SourceLocation StartLoc = Tok.getLocation();
706    SourceLocation EndLoc;
707    ExprResult Result(ParseSimpleAsm(&EndLoc));
708
709    ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
710                     "top-level asm block");
711
712    if (Result.isInvalid())
713      return DeclGroupPtrTy();
714    SingleDecl = Actions.ActOnFileScopeAsmDecl(Result.get(), StartLoc, EndLoc);
715    break;
716  }
717  case tok::at:
718    return ParseObjCAtDirectives();
719  case tok::minus:
720  case tok::plus:
721    if (!getLangOpts().ObjC1) {
722      Diag(Tok, diag::err_expected_external_declaration);
723      ConsumeToken();
724      return DeclGroupPtrTy();
725    }
726    SingleDecl = ParseObjCMethodDefinition();
727    break;
728  case tok::code_completion:
729      Actions.CodeCompleteOrdinaryName(getCurScope(),
730                             CurParsedObjCImpl? Sema::PCC_ObjCImplementation
731                                              : Sema::PCC_Namespace);
732    cutOffParsing();
733    return DeclGroupPtrTy();
734  case tok::kw_using:
735  case tok::kw_namespace:
736  case tok::kw_typedef:
737  case tok::kw_template:
738  case tok::kw_export:    // As in 'export template'
739  case tok::kw_static_assert:
740  case tok::kw__Static_assert:
741    // A function definition cannot start with any of these keywords.
742    {
743      SourceLocation DeclEnd;
744      StmtVector Stmts;
745      return ParseDeclaration(Stmts, Declarator::FileContext, DeclEnd, attrs);
746    }
747
748  case tok::kw_static:
749    // Parse (then ignore) 'static' prior to a template instantiation. This is
750    // a GCC extension that we intentionally do not support.
751    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {
752      Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored)
753        << 0;
754      SourceLocation DeclEnd;
755      StmtVector Stmts;
756      return ParseDeclaration(Stmts, Declarator::FileContext, DeclEnd, attrs);
757    }
758    goto dont_know;
759
760  case tok::kw_inline:
761    if (getLangOpts().CPlusPlus) {
762      tok::TokenKind NextKind = NextToken().getKind();
763
764      // Inline namespaces. Allowed as an extension even in C++03.
765      if (NextKind == tok::kw_namespace) {
766        SourceLocation DeclEnd;
767        StmtVector Stmts;
768        return ParseDeclaration(Stmts, Declarator::FileContext, DeclEnd, attrs);
769      }
770
771      // Parse (then ignore) 'inline' prior to a template instantiation. This is
772      // a GCC extension that we intentionally do not support.
773      if (NextKind == tok::kw_template) {
774        Diag(ConsumeToken(), diag::warn_static_inline_explicit_inst_ignored)
775          << 1;
776        SourceLocation DeclEnd;
777        StmtVector Stmts;
778        return ParseDeclaration(Stmts, Declarator::FileContext, DeclEnd, attrs);
779      }
780    }
781    goto dont_know;
782
783  case tok::kw_extern:
784    if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {
785      // Extern templates
786      SourceLocation ExternLoc = ConsumeToken();
787      SourceLocation TemplateLoc = ConsumeToken();
788      Diag(ExternLoc, getLangOpts().CPlusPlus11 ?
789             diag::warn_cxx98_compat_extern_template :
790             diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);
791      SourceLocation DeclEnd;
792      return Actions.ConvertDeclToDeclGroup(
793                  ParseExplicitInstantiation(Declarator::FileContext,
794                                             ExternLoc, TemplateLoc, DeclEnd));
795    }
796    // FIXME: Detect C++ linkage specifications here?
797    goto dont_know;
798
799  case tok::kw___if_exists:
800  case tok::kw___if_not_exists:
801    ParseMicrosoftIfExistsExternalDeclaration();
802    return DeclGroupPtrTy();
803
804  default:
805  dont_know:
806    // We can't tell whether this is a function-definition or declaration yet.
807    return ParseDeclarationOrFunctionDefinition(attrs, DS);
808  }
809
810  // This routine returns a DeclGroup, if the thing we parsed only contains a
811  // single decl, convert it now.
812  return Actions.ConvertDeclToDeclGroup(SingleDecl);
813}
814
815/// \brief Determine whether the current token, if it occurs after a
816/// declarator, continues a declaration or declaration list.
817bool Parser::isDeclarationAfterDeclarator() {
818  // Check for '= delete' or '= default'
819  if (getLangOpts().CPlusPlus && Tok.is(tok::equal)) {
820    const Token &KW = NextToken();
821    if (KW.is(tok::kw_default) || KW.is(tok::kw_delete))
822      return false;
823  }
824
825  return Tok.is(tok::equal) ||      // int X()=  -> not a function def
826    Tok.is(tok::comma) ||           // int X(),  -> not a function def
827    Tok.is(tok::semi)  ||           // int X();  -> not a function def
828    Tok.is(tok::kw_asm) ||          // int X() __asm__ -> not a function def
829    Tok.is(tok::kw___attribute) ||  // int X() __attr__ -> not a function def
830    (getLangOpts().CPlusPlus &&
831     Tok.is(tok::l_paren));         // int X(0) -> not a function def [C++]
832}
833
834/// \brief Determine whether the current token, if it occurs after a
835/// declarator, indicates the start of a function definition.
836bool Parser::isStartOfFunctionDefinition(const ParsingDeclarator &Declarator) {
837  assert(Declarator.isFunctionDeclarator() && "Isn't a function declarator");
838  if (Tok.is(tok::l_brace))   // int X() {}
839    return true;
840
841  // Handle K&R C argument lists: int X(f) int f; {}
842  if (!getLangOpts().CPlusPlus &&
843      Declarator.getFunctionTypeInfo().isKNRPrototype())
844    return isDeclarationSpecifier();
845
846  if (getLangOpts().CPlusPlus && Tok.is(tok::equal)) {
847    const Token &KW = NextToken();
848    return KW.is(tok::kw_default) || KW.is(tok::kw_delete);
849  }
850
851  return Tok.is(tok::colon) ||         // X() : Base() {} (used for ctors)
852         Tok.is(tok::kw_try);          // X() try { ... }
853}
854
855/// ParseDeclarationOrFunctionDefinition - Parse either a function-definition or
856/// a declaration.  We can't tell which we have until we read up to the
857/// compound-statement in function-definition. TemplateParams, if
858/// non-NULL, provides the template parameters when we're parsing a
859/// C++ template-declaration.
860///
861///       function-definition: [C99 6.9.1]
862///         decl-specs      declarator declaration-list[opt] compound-statement
863/// [C90] function-definition: [C99 6.7.1] - implicit int result
864/// [C90]   decl-specs[opt] declarator declaration-list[opt] compound-statement
865///
866///       declaration: [C99 6.7]
867///         declaration-specifiers init-declarator-list[opt] ';'
868/// [!C99]  init-declarator-list ';'                   [TODO: warn in c99 mode]
869/// [OMP]   threadprivate-directive                              [TODO]
870///
871Parser::DeclGroupPtrTy
872Parser::ParseDeclOrFunctionDefInternal(ParsedAttributesWithRange &attrs,
873                                       ParsingDeclSpec &DS,
874                                       AccessSpecifier AS) {
875  // Parse the common declaration-specifiers piece.
876  ParseDeclarationSpecifiers(DS, ParsedTemplateInfo(), AS, DSC_top_level);
877
878  // If we had a free-standing type definition with a missing semicolon, we
879  // may get this far before the problem becomes obvious.
880  if (DS.hasTagDefinition() &&
881      DiagnoseMissingSemiAfterTagDefinition(DS, AS, DSC_top_level))
882    return DeclGroupPtrTy();
883
884  // C99 6.7.2.3p6: Handle "struct-or-union identifier;", "enum { X };"
885  // declaration-specifiers init-declarator-list[opt] ';'
886  if (Tok.is(tok::semi)) {
887    ProhibitAttributes(attrs);
888    ConsumeToken();
889    Decl *TheDecl = Actions.ParsedFreeStandingDeclSpec(getCurScope(), AS, DS);
890    DS.complete(TheDecl);
891    return Actions.ConvertDeclToDeclGroup(TheDecl);
892  }
893
894  DS.takeAttributesFrom(attrs);
895
896  // ObjC2 allows prefix attributes on class interfaces and protocols.
897  // FIXME: This still needs better diagnostics. We should only accept
898  // attributes here, no types, etc.
899  if (getLangOpts().ObjC2 && Tok.is(tok::at)) {
900    SourceLocation AtLoc = ConsumeToken(); // the "@"
901    if (!Tok.isObjCAtKeyword(tok::objc_interface) &&
902        !Tok.isObjCAtKeyword(tok::objc_protocol)) {
903      Diag(Tok, diag::err_objc_unexpected_attr);
904      SkipUntil(tok::semi); // FIXME: better skip?
905      return DeclGroupPtrTy();
906    }
907
908    DS.abort();
909
910    const char *PrevSpec = 0;
911    unsigned DiagID;
912    if (DS.SetTypeSpecType(DeclSpec::TST_unspecified, AtLoc, PrevSpec, DiagID))
913      Diag(AtLoc, DiagID) << PrevSpec;
914
915    if (Tok.isObjCAtKeyword(tok::objc_protocol))
916      return ParseObjCAtProtocolDeclaration(AtLoc, DS.getAttributes());
917
918    return Actions.ConvertDeclToDeclGroup(
919            ParseObjCAtInterfaceDeclaration(AtLoc, DS.getAttributes()));
920  }
921
922  // If the declspec consisted only of 'extern' and we have a string
923  // literal following it, this must be a C++ linkage specifier like
924  // 'extern "C"'.
925  if (Tok.is(tok::string_literal) && getLangOpts().CPlusPlus &&
926      DS.getStorageClassSpec() == DeclSpec::SCS_extern &&
927      DS.getParsedSpecifiers() == DeclSpec::PQ_StorageClassSpecifier) {
928    Decl *TheDecl = ParseLinkage(DS, Declarator::FileContext);
929    return Actions.ConvertDeclToDeclGroup(TheDecl);
930  }
931
932  return ParseDeclGroup(DS, Declarator::FileContext, true);
933}
934
935Parser::DeclGroupPtrTy
936Parser::ParseDeclarationOrFunctionDefinition(ParsedAttributesWithRange &attrs,
937                                             ParsingDeclSpec *DS,
938                                             AccessSpecifier AS) {
939  if (DS) {
940    return ParseDeclOrFunctionDefInternal(attrs, *DS, AS);
941  } else {
942    ParsingDeclSpec PDS(*this);
943    // Must temporarily exit the objective-c container scope for
944    // parsing c constructs and re-enter objc container scope
945    // afterwards.
946    ObjCDeclContextSwitch ObjCDC(*this);
947
948    return ParseDeclOrFunctionDefInternal(attrs, PDS, AS);
949  }
950}
951
952
953static inline bool isFunctionDeclaratorRequiringReturnTypeDeduction(
954    const Declarator &D) {
955  if (!D.isFunctionDeclarator() || !D.getDeclSpec().containsPlaceholderType())
956    return false;
957  for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {
958    unsigned chunkIndex = E - I - 1;
959    const DeclaratorChunk &DeclType = D.getTypeObject(chunkIndex);
960    if (DeclType.Kind == DeclaratorChunk::Function) {
961      const DeclaratorChunk::FunctionTypeInfo &FTI = DeclType.Fun;
962      if (!FTI.hasTrailingReturnType())
963        return true;
964      QualType TrailingRetType = FTI.getTrailingReturnType().get();
965      return TrailingRetType->getCanonicalTypeInternal()
966        ->getContainedAutoType();
967    }
968  }
969  return false;
970}
971
972/// ParseFunctionDefinition - We parsed and verified that the specified
973/// Declarator is well formed.  If this is a K&R-style function, read the
974/// parameters declaration-list, then start the compound-statement.
975///
976///       function-definition: [C99 6.9.1]
977///         decl-specs      declarator declaration-list[opt] compound-statement
978/// [C90] function-definition: [C99 6.7.1] - implicit int result
979/// [C90]   decl-specs[opt] declarator declaration-list[opt] compound-statement
980/// [C++] function-definition: [C++ 8.4]
981///         decl-specifier-seq[opt] declarator ctor-initializer[opt]
982///         function-body
983/// [C++] function-definition: [C++ 8.4]
984///         decl-specifier-seq[opt] declarator function-try-block
985///
986Decl *Parser::ParseFunctionDefinition(ParsingDeclarator &D,
987                                      const ParsedTemplateInfo &TemplateInfo,
988                                      LateParsedAttrList *LateParsedAttrs) {
989  // Poison the SEH identifiers so they are flagged as illegal in function bodies
990  PoisonSEHIdentifiersRAIIObject PoisonSEHIdentifiers(*this, true);
991  const DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
992
993  // If this is C90 and the declspecs were completely missing, fudge in an
994  // implicit int.  We do this here because this is the only place where
995  // declaration-specifiers are completely optional in the grammar.
996  if (getLangOpts().ImplicitInt && D.getDeclSpec().isEmpty()) {
997    const char *PrevSpec;
998    unsigned DiagID;
999    D.getMutableDeclSpec().SetTypeSpecType(DeclSpec::TST_int,
1000                                           D.getIdentifierLoc(),
1001                                           PrevSpec, DiagID);
1002    D.SetRangeBegin(D.getDeclSpec().getSourceRange().getBegin());
1003  }
1004
1005  // If this declaration was formed with a K&R-style identifier list for the
1006  // arguments, parse declarations for all of the args next.
1007  // int foo(a,b) int a; float b; {}
1008  if (FTI.isKNRPrototype())
1009    ParseKNRParamDeclarations(D);
1010
1011  // We should have either an opening brace or, in a C++ constructor,
1012  // we may have a colon.
1013  if (Tok.isNot(tok::l_brace) &&
1014      (!getLangOpts().CPlusPlus ||
1015       (Tok.isNot(tok::colon) && Tok.isNot(tok::kw_try) &&
1016        Tok.isNot(tok::equal)))) {
1017    Diag(Tok, diag::err_expected_fn_body);
1018
1019    // Skip over garbage, until we get to '{'.  Don't eat the '{'.
1020    SkipUntil(tok::l_brace, StopAtSemi | StopBeforeMatch);
1021
1022    // If we didn't find the '{', bail out.
1023    if (Tok.isNot(tok::l_brace))
1024      return 0;
1025  }
1026
1027  // Check to make sure that any normal attributes are allowed to be on
1028  // a definition.  Late parsed attributes are checked at the end.
1029  if (Tok.isNot(tok::equal)) {
1030    AttributeList *DtorAttrs = D.getAttributes();
1031    while (DtorAttrs) {
1032      if (!IsThreadSafetyAttribute(DtorAttrs->getName()->getName()) &&
1033          !DtorAttrs->isCXX11Attribute()) {
1034        Diag(DtorAttrs->getLoc(), diag::warn_attribute_on_function_definition)
1035          << DtorAttrs->getName()->getName();
1036      }
1037      DtorAttrs = DtorAttrs->getNext();
1038    }
1039  }
1040
1041  // In delayed template parsing mode, for function template we consume the
1042  // tokens and store them for late parsing at the end of the translation unit.
1043  if (getLangOpts().DelayedTemplateParsing && Tok.isNot(tok::equal) &&
1044      TemplateInfo.Kind == ParsedTemplateInfo::Template &&
1045      !D.getDeclSpec().isConstexprSpecified() &&
1046      !isFunctionDeclaratorRequiringReturnTypeDeduction(D)) {
1047    MultiTemplateParamsArg TemplateParameterLists(*TemplateInfo.TemplateParams);
1048
1049    ParseScope BodyScope(this, Scope::FnScope|Scope::DeclScope);
1050    Scope *ParentScope = getCurScope()->getParent();
1051
1052    D.setFunctionDefinitionKind(FDK_Definition);
1053    Decl *DP = Actions.HandleDeclarator(ParentScope, D,
1054                                        TemplateParameterLists);
1055    D.complete(DP);
1056    D.getMutableDeclSpec().abort();
1057
1058    CachedTokens Toks;
1059    LexTemplateFunctionForLateParsing(Toks);
1060
1061    if (DP) {
1062      FunctionDecl *FnD = 0;
1063      if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(DP))
1064        FnD = FunTmpl->getTemplatedDecl();
1065      else
1066        FnD = cast<FunctionDecl>(DP);
1067
1068      Actions.CheckForFunctionRedefinition(FnD);
1069      Actions.MarkAsLateParsedTemplate(FnD, DP, Toks);
1070    }
1071    return DP;
1072  }
1073  else if (CurParsedObjCImpl &&
1074           !TemplateInfo.TemplateParams &&
1075           (Tok.is(tok::l_brace) || Tok.is(tok::kw_try) ||
1076            Tok.is(tok::colon)) &&
1077      Actions.CurContext->isTranslationUnit()) {
1078    ParseScope BodyScope(this, Scope::FnScope|Scope::DeclScope);
1079    Scope *ParentScope = getCurScope()->getParent();
1080
1081    D.setFunctionDefinitionKind(FDK_Definition);
1082    Decl *FuncDecl = Actions.HandleDeclarator(ParentScope, D,
1083                                              MultiTemplateParamsArg());
1084    D.complete(FuncDecl);
1085    D.getMutableDeclSpec().abort();
1086    if (FuncDecl) {
1087      // Consume the tokens and store them for later parsing.
1088      StashAwayMethodOrFunctionBodyTokens(FuncDecl);
1089      CurParsedObjCImpl->HasCFunction = true;
1090      return FuncDecl;
1091    }
1092  }
1093
1094  // Enter a scope for the function body.
1095  ParseScope BodyScope(this, Scope::FnScope|Scope::DeclScope);
1096
1097  // Tell the actions module that we have entered a function definition with the
1098  // specified Declarator for the function.
1099  Decl *Res = TemplateInfo.TemplateParams?
1100      Actions.ActOnStartOfFunctionTemplateDef(getCurScope(),
1101                                              *TemplateInfo.TemplateParams, D)
1102    : Actions.ActOnStartOfFunctionDef(getCurScope(), D);
1103
1104  // Break out of the ParsingDeclarator context before we parse the body.
1105  D.complete(Res);
1106
1107  // Break out of the ParsingDeclSpec context, too.  This const_cast is
1108  // safe because we're always the sole owner.
1109  D.getMutableDeclSpec().abort();
1110
1111  if (Tok.is(tok::equal)) {
1112    assert(getLangOpts().CPlusPlus && "Only C++ function definitions have '='");
1113    ConsumeToken();
1114
1115    Actions.ActOnFinishFunctionBody(Res, 0, false);
1116
1117    bool Delete = false;
1118    SourceLocation KWLoc;
1119    if (Tok.is(tok::kw_delete)) {
1120      Diag(Tok, getLangOpts().CPlusPlus11 ?
1121           diag::warn_cxx98_compat_deleted_function :
1122           diag::ext_deleted_function);
1123
1124      KWLoc = ConsumeToken();
1125      Actions.SetDeclDeleted(Res, KWLoc);
1126      Delete = true;
1127    } else if (Tok.is(tok::kw_default)) {
1128      Diag(Tok, getLangOpts().CPlusPlus11 ?
1129           diag::warn_cxx98_compat_defaulted_function :
1130           diag::ext_defaulted_function);
1131
1132      KWLoc = ConsumeToken();
1133      Actions.SetDeclDefaulted(Res, KWLoc);
1134    } else {
1135      llvm_unreachable("function definition after = not 'delete' or 'default'");
1136    }
1137
1138    if (Tok.is(tok::comma)) {
1139      Diag(KWLoc, diag::err_default_delete_in_multiple_declaration)
1140        << Delete;
1141      SkipUntil(tok::semi);
1142    } else {
1143      ExpectAndConsume(tok::semi, diag::err_expected_semi_after,
1144                       Delete ? "delete" : "default", tok::semi);
1145    }
1146
1147    return Res;
1148  }
1149
1150  if (Tok.is(tok::kw_try))
1151    return ParseFunctionTryBlock(Res, BodyScope);
1152
1153  // If we have a colon, then we're probably parsing a C++
1154  // ctor-initializer.
1155  if (Tok.is(tok::colon)) {
1156    ParseConstructorInitializer(Res);
1157
1158    // Recover from error.
1159    if (!Tok.is(tok::l_brace)) {
1160      BodyScope.Exit();
1161      Actions.ActOnFinishFunctionBody(Res, 0);
1162      return Res;
1163    }
1164  } else
1165    Actions.ActOnDefaultCtorInitializers(Res);
1166
1167  // Late attributes are parsed in the same scope as the function body.
1168  if (LateParsedAttrs)
1169    ParseLexedAttributeList(*LateParsedAttrs, Res, false, true);
1170
1171  return ParseFunctionStatementBody(Res, BodyScope);
1172}
1173
1174/// ParseKNRParamDeclarations - Parse 'declaration-list[opt]' which provides
1175/// types for a function with a K&R-style identifier list for arguments.
1176void Parser::ParseKNRParamDeclarations(Declarator &D) {
1177  // We know that the top-level of this declarator is a function.
1178  DeclaratorChunk::FunctionTypeInfo &FTI = D.getFunctionTypeInfo();
1179
1180  // Enter function-declaration scope, limiting any declarators to the
1181  // function prototype scope, including parameter declarators.
1182  ParseScope PrototypeScope(this, Scope::FunctionPrototypeScope |
1183                            Scope::FunctionDeclarationScope | Scope::DeclScope);
1184
1185  // Read all the argument declarations.
1186  while (isDeclarationSpecifier()) {
1187    SourceLocation DSStart = Tok.getLocation();
1188
1189    // Parse the common declaration-specifiers piece.
1190    DeclSpec DS(AttrFactory);
1191    ParseDeclarationSpecifiers(DS);
1192
1193    // C99 6.9.1p6: 'each declaration in the declaration list shall have at
1194    // least one declarator'.
1195    // NOTE: GCC just makes this an ext-warn.  It's not clear what it does with
1196    // the declarations though.  It's trivial to ignore them, really hard to do
1197    // anything else with them.
1198    if (Tok.is(tok::semi)) {
1199      Diag(DSStart, diag::err_declaration_does_not_declare_param);
1200      ConsumeToken();
1201      continue;
1202    }
1203
1204    // C99 6.9.1p6: Declarations shall contain no storage-class specifiers other
1205    // than register.
1206    if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
1207        DS.getStorageClassSpec() != DeclSpec::SCS_register) {
1208      Diag(DS.getStorageClassSpecLoc(),
1209           diag::err_invalid_storage_class_in_func_decl);
1210      DS.ClearStorageClassSpecs();
1211    }
1212    if (DS.getThreadStorageClassSpec() != DeclSpec::TSCS_unspecified) {
1213      Diag(DS.getThreadStorageClassSpecLoc(),
1214           diag::err_invalid_storage_class_in_func_decl);
1215      DS.ClearStorageClassSpecs();
1216    }
1217
1218    // Parse the first declarator attached to this declspec.
1219    Declarator ParmDeclarator(DS, Declarator::KNRTypeListContext);
1220    ParseDeclarator(ParmDeclarator);
1221
1222    // Handle the full declarator list.
1223    while (1) {
1224      // If attributes are present, parse them.
1225      MaybeParseGNUAttributes(ParmDeclarator);
1226
1227      // Ask the actions module to compute the type for this declarator.
1228      Decl *Param =
1229        Actions.ActOnParamDeclarator(getCurScope(), ParmDeclarator);
1230
1231      if (Param &&
1232          // A missing identifier has already been diagnosed.
1233          ParmDeclarator.getIdentifier()) {
1234
1235        // Scan the argument list looking for the correct param to apply this
1236        // type.
1237        for (unsigned i = 0; ; ++i) {
1238          // C99 6.9.1p6: those declarators shall declare only identifiers from
1239          // the identifier list.
1240          if (i == FTI.NumArgs) {
1241            Diag(ParmDeclarator.getIdentifierLoc(), diag::err_no_matching_param)
1242              << ParmDeclarator.getIdentifier();
1243            break;
1244          }
1245
1246          if (FTI.ArgInfo[i].Ident == ParmDeclarator.getIdentifier()) {
1247            // Reject redefinitions of parameters.
1248            if (FTI.ArgInfo[i].Param) {
1249              Diag(ParmDeclarator.getIdentifierLoc(),
1250                   diag::err_param_redefinition)
1251                 << ParmDeclarator.getIdentifier();
1252            } else {
1253              FTI.ArgInfo[i].Param = Param;
1254            }
1255            break;
1256          }
1257        }
1258      }
1259
1260      // If we don't have a comma, it is either the end of the list (a ';') or
1261      // an error, bail out.
1262      if (Tok.isNot(tok::comma))
1263        break;
1264
1265      ParmDeclarator.clear();
1266
1267      // Consume the comma.
1268      ParmDeclarator.setCommaLoc(ConsumeToken());
1269
1270      // Parse the next declarator.
1271      ParseDeclarator(ParmDeclarator);
1272    }
1273
1274    if (ExpectAndConsumeSemi(diag::err_expected_semi_declaration)) {
1275      // Skip to end of block or statement
1276      SkipUntil(tok::semi);
1277      if (Tok.is(tok::semi))
1278        ConsumeToken();
1279    }
1280  }
1281
1282  // The actions module must verify that all arguments were declared.
1283  Actions.ActOnFinishKNRParamDeclarations(getCurScope(), D, Tok.getLocation());
1284}
1285
1286
1287/// ParseAsmStringLiteral - This is just a normal string-literal, but is not
1288/// allowed to be a wide string, and is not subject to character translation.
1289///
1290/// [GNU] asm-string-literal:
1291///         string-literal
1292///
1293Parser::ExprResult Parser::ParseAsmStringLiteral() {
1294  switch (Tok.getKind()) {
1295    case tok::string_literal:
1296      break;
1297    case tok::utf8_string_literal:
1298    case tok::utf16_string_literal:
1299    case tok::utf32_string_literal:
1300    case tok::wide_string_literal: {
1301      SourceLocation L = Tok.getLocation();
1302      Diag(Tok, diag::err_asm_operand_wide_string_literal)
1303        << (Tok.getKind() == tok::wide_string_literal)
1304        << SourceRange(L, L);
1305      return ExprError();
1306    }
1307    default:
1308      Diag(Tok, diag::err_expected_string_literal)
1309        << /*Source='in...'*/0 << "'asm'";
1310      return ExprError();
1311  }
1312
1313  return ParseStringLiteralExpression();
1314}
1315
1316/// ParseSimpleAsm
1317///
1318/// [GNU] simple-asm-expr:
1319///         'asm' '(' asm-string-literal ')'
1320///
1321Parser::ExprResult Parser::ParseSimpleAsm(SourceLocation *EndLoc) {
1322  assert(Tok.is(tok::kw_asm) && "Not an asm!");
1323  SourceLocation Loc = ConsumeToken();
1324
1325  if (Tok.is(tok::kw_volatile)) {
1326    // Remove from the end of 'asm' to the end of 'volatile'.
1327    SourceRange RemovalRange(PP.getLocForEndOfToken(Loc),
1328                             PP.getLocForEndOfToken(Tok.getLocation()));
1329
1330    Diag(Tok, diag::warn_file_asm_volatile)
1331      << FixItHint::CreateRemoval(RemovalRange);
1332    ConsumeToken();
1333  }
1334
1335  BalancedDelimiterTracker T(*this, tok::l_paren);
1336  if (T.consumeOpen()) {
1337    Diag(Tok, diag::err_expected_lparen_after) << "asm";
1338    return ExprError();
1339  }
1340
1341  ExprResult Result(ParseAsmStringLiteral());
1342
1343  if (Result.isInvalid()) {
1344    SkipUntil(tok::r_paren, StopAtSemi | StopBeforeMatch);
1345    if (EndLoc)
1346      *EndLoc = Tok.getLocation();
1347    ConsumeAnyToken();
1348  } else {
1349    // Close the paren and get the location of the end bracket
1350    T.consumeClose();
1351    if (EndLoc)
1352      *EndLoc = T.getCloseLocation();
1353  }
1354
1355  return Result;
1356}
1357
1358/// \brief Get the TemplateIdAnnotation from the token and put it in the
1359/// cleanup pool so that it gets destroyed when parsing the current top level
1360/// declaration is finished.
1361TemplateIdAnnotation *Parser::takeTemplateIdAnnotation(const Token &tok) {
1362  assert(tok.is(tok::annot_template_id) && "Expected template-id token");
1363  TemplateIdAnnotation *
1364      Id = static_cast<TemplateIdAnnotation *>(tok.getAnnotationValue());
1365  return Id;
1366}
1367
1368void Parser::AnnotateScopeToken(CXXScopeSpec &SS, bool IsNewAnnotation) {
1369  // Push the current token back into the token stream (or revert it if it is
1370  // cached) and use an annotation scope token for current token.
1371  if (PP.isBacktrackEnabled())
1372    PP.RevertCachedTokens(1);
1373  else
1374    PP.EnterToken(Tok);
1375  Tok.setKind(tok::annot_cxxscope);
1376  Tok.setAnnotationValue(Actions.SaveNestedNameSpecifierAnnotation(SS));
1377  Tok.setAnnotationRange(SS.getRange());
1378
1379  // In case the tokens were cached, have Preprocessor replace them
1380  // with the annotation token.  We don't need to do this if we've
1381  // just reverted back to a prior state.
1382  if (IsNewAnnotation)
1383    PP.AnnotateCachedTokens(Tok);
1384}
1385
1386/// \brief Attempt to classify the name at the current token position. This may
1387/// form a type, scope or primary expression annotation, or replace the token
1388/// with a typo-corrected keyword. This is only appropriate when the current
1389/// name must refer to an entity which has already been declared.
1390///
1391/// \param IsAddressOfOperand Must be \c true if the name is preceded by an '&'
1392///        and might possibly have a dependent nested name specifier.
1393/// \param CCC Indicates how to perform typo-correction for this name. If NULL,
1394///        no typo correction will be performed.
1395Parser::AnnotatedNameKind
1396Parser::TryAnnotateName(bool IsAddressOfOperand,
1397                        CorrectionCandidateCallback *CCC) {
1398  assert(Tok.is(tok::identifier) || Tok.is(tok::annot_cxxscope));
1399
1400  const bool EnteringContext = false;
1401  const bool WasScopeAnnotation = Tok.is(tok::annot_cxxscope);
1402
1403  CXXScopeSpec SS;
1404  if (getLangOpts().CPlusPlus &&
1405      ParseOptionalCXXScopeSpecifier(SS, ParsedType(), EnteringContext))
1406    return ANK_Error;
1407
1408  if (Tok.isNot(tok::identifier) || SS.isInvalid()) {
1409    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, false, SS,
1410                                                  !WasScopeAnnotation))
1411      return ANK_Error;
1412    return ANK_Unresolved;
1413  }
1414
1415  IdentifierInfo *Name = Tok.getIdentifierInfo();
1416  SourceLocation NameLoc = Tok.getLocation();
1417
1418  // FIXME: Move the tentative declaration logic into ClassifyName so we can
1419  // typo-correct to tentatively-declared identifiers.
1420  if (isTentativelyDeclared(Name)) {
1421    // Identifier has been tentatively declared, and thus cannot be resolved as
1422    // an expression. Fall back to annotating it as a type.
1423    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, false, SS,
1424                                                  !WasScopeAnnotation))
1425      return ANK_Error;
1426    return Tok.is(tok::annot_typename) ? ANK_Success : ANK_TentativeDecl;
1427  }
1428
1429  Token Next = NextToken();
1430
1431  // Look up and classify the identifier. We don't perform any typo-correction
1432  // after a scope specifier, because in general we can't recover from typos
1433  // there (eg, after correcting 'A::tempalte B<X>::C', we would need to jump
1434  // back into scope specifier parsing).
1435  Sema::NameClassification Classification
1436    = Actions.ClassifyName(getCurScope(), SS, Name, NameLoc, Next,
1437                           IsAddressOfOperand, SS.isEmpty() ? CCC : 0);
1438
1439  switch (Classification.getKind()) {
1440  case Sema::NC_Error:
1441    return ANK_Error;
1442
1443  case Sema::NC_Keyword:
1444    // The identifier was typo-corrected to a keyword.
1445    Tok.setIdentifierInfo(Name);
1446    Tok.setKind(Name->getTokenID());
1447    PP.TypoCorrectToken(Tok);
1448    if (SS.isNotEmpty())
1449      AnnotateScopeToken(SS, !WasScopeAnnotation);
1450    // We've "annotated" this as a keyword.
1451    return ANK_Success;
1452
1453  case Sema::NC_Unknown:
1454    // It's not something we know about. Leave it unannotated.
1455    break;
1456
1457  case Sema::NC_Type:
1458    Tok.setKind(tok::annot_typename);
1459    setTypeAnnotation(Tok, Classification.getType());
1460    Tok.setAnnotationEndLoc(NameLoc);
1461    if (SS.isNotEmpty())
1462      Tok.setLocation(SS.getBeginLoc());
1463    PP.AnnotateCachedTokens(Tok);
1464    return ANK_Success;
1465
1466  case Sema::NC_Expression:
1467    Tok.setKind(tok::annot_primary_expr);
1468    setExprAnnotation(Tok, Classification.getExpression());
1469    Tok.setAnnotationEndLoc(NameLoc);
1470    if (SS.isNotEmpty())
1471      Tok.setLocation(SS.getBeginLoc());
1472    PP.AnnotateCachedTokens(Tok);
1473    return ANK_Success;
1474
1475  case Sema::NC_TypeTemplate:
1476    if (Next.isNot(tok::less)) {
1477      // This may be a type template being used as a template template argument.
1478      if (SS.isNotEmpty())
1479        AnnotateScopeToken(SS, !WasScopeAnnotation);
1480      return ANK_TemplateName;
1481    }
1482    // Fall through.
1483  case Sema::NC_VarTemplate:
1484  case Sema::NC_FunctionTemplate: {
1485    // We have a type, variable or function template followed by '<'.
1486    ConsumeToken();
1487    UnqualifiedId Id;
1488    Id.setIdentifier(Name, NameLoc);
1489    if (AnnotateTemplateIdToken(
1490            TemplateTy::make(Classification.getTemplateName()),
1491            Classification.getTemplateNameKind(), SS, SourceLocation(), Id))
1492      return ANK_Error;
1493    return ANK_Success;
1494  }
1495
1496  case Sema::NC_NestedNameSpecifier:
1497    llvm_unreachable("already parsed nested name specifier");
1498  }
1499
1500  // Unable to classify the name, but maybe we can annotate a scope specifier.
1501  if (SS.isNotEmpty())
1502    AnnotateScopeToken(SS, !WasScopeAnnotation);
1503  return ANK_Unresolved;
1504}
1505
1506bool Parser::TryKeywordIdentFallback(bool DisableKeyword) {
1507  assert(Tok.isNot(tok::identifier));
1508  Diag(Tok, diag::ext_keyword_as_ident)
1509    << PP.getSpelling(Tok)
1510    << DisableKeyword;
1511  if (DisableKeyword)
1512    Tok.getIdentifierInfo()->RevertTokenIDToIdentifier();
1513  Tok.setKind(tok::identifier);
1514  return true;
1515}
1516
1517/// TryAnnotateTypeOrScopeToken - If the current token position is on a
1518/// typename (possibly qualified in C++) or a C++ scope specifier not followed
1519/// by a typename, TryAnnotateTypeOrScopeToken will replace one or more tokens
1520/// with a single annotation token representing the typename or C++ scope
1521/// respectively.
1522/// This simplifies handling of C++ scope specifiers and allows efficient
1523/// backtracking without the need to re-parse and resolve nested-names and
1524/// typenames.
1525/// It will mainly be called when we expect to treat identifiers as typenames
1526/// (if they are typenames). For example, in C we do not expect identifiers
1527/// inside expressions to be treated as typenames so it will not be called
1528/// for expressions in C.
1529/// The benefit for C/ObjC is that a typename will be annotated and
1530/// Actions.getTypeName will not be needed to be called again (e.g. getTypeName
1531/// will not be called twice, once to check whether we have a declaration
1532/// specifier, and another one to get the actual type inside
1533/// ParseDeclarationSpecifiers).
1534///
1535/// This returns true if an error occurred.
1536///
1537/// Note that this routine emits an error if you call it with ::new or ::delete
1538/// as the current tokens, so only call it in contexts where these are invalid.
1539bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext, bool NeedType) {
1540  assert((Tok.is(tok::identifier) || Tok.is(tok::coloncolon)
1541          || Tok.is(tok::kw_typename) || Tok.is(tok::annot_cxxscope)
1542          || Tok.is(tok::kw_decltype) || Tok.is(tok::annot_template_id))
1543          && "Cannot be a type or scope token!");
1544
1545  if (Tok.is(tok::kw_typename)) {
1546    // MSVC lets you do stuff like:
1547    //   typename typedef T_::D D;
1548    //
1549    // We will consume the typedef token here and put it back after we have
1550    // parsed the first identifier, transforming it into something more like:
1551    //   typename T_::D typedef D;
1552    if (getLangOpts().MicrosoftMode && NextToken().is(tok::kw_typedef)) {
1553      Token TypedefToken;
1554      PP.Lex(TypedefToken);
1555      bool Result = TryAnnotateTypeOrScopeToken(EnteringContext, NeedType);
1556      PP.EnterToken(Tok);
1557      Tok = TypedefToken;
1558      if (!Result)
1559        Diag(Tok.getLocation(), diag::warn_expected_qualified_after_typename);
1560      return Result;
1561    }
1562
1563    // Parse a C++ typename-specifier, e.g., "typename T::type".
1564    //
1565    //   typename-specifier:
1566    //     'typename' '::' [opt] nested-name-specifier identifier
1567    //     'typename' '::' [opt] nested-name-specifier template [opt]
1568    //            simple-template-id
1569    SourceLocation TypenameLoc = ConsumeToken();
1570    CXXScopeSpec SS;
1571    if (ParseOptionalCXXScopeSpecifier(SS, /*ObjectType=*/ParsedType(),
1572                                       /*EnteringContext=*/false,
1573                                       0, /*IsTypename*/true))
1574      return true;
1575    if (!SS.isSet()) {
1576      if (Tok.is(tok::identifier) || Tok.is(tok::annot_template_id) ||
1577          Tok.is(tok::annot_decltype)) {
1578        // Attempt to recover by skipping the invalid 'typename'
1579        if (Tok.is(tok::annot_decltype) ||
1580            (!TryAnnotateTypeOrScopeToken(EnteringContext, NeedType) &&
1581             Tok.isAnnotation())) {
1582          unsigned DiagID = diag::err_expected_qualified_after_typename;
1583          // MS compatibility: MSVC permits using known types with typename.
1584          // e.g. "typedef typename T* pointer_type"
1585          if (getLangOpts().MicrosoftExt)
1586            DiagID = diag::warn_expected_qualified_after_typename;
1587          Diag(Tok.getLocation(), DiagID);
1588          return false;
1589        }
1590      }
1591
1592      Diag(Tok.getLocation(), diag::err_expected_qualified_after_typename);
1593      return true;
1594    }
1595
1596    TypeResult Ty;
1597    if (Tok.is(tok::identifier)) {
1598      // FIXME: check whether the next token is '<', first!
1599      Ty = Actions.ActOnTypenameType(getCurScope(), TypenameLoc, SS,
1600                                     *Tok.getIdentifierInfo(),
1601                                     Tok.getLocation());
1602    } else if (Tok.is(tok::annot_template_id)) {
1603      TemplateIdAnnotation *TemplateId = takeTemplateIdAnnotation(Tok);
1604      if (TemplateId->Kind == TNK_Function_template) {
1605        Diag(Tok, diag::err_typename_refers_to_non_type_template)
1606          << Tok.getAnnotationRange();
1607        return true;
1608      }
1609
1610      ASTTemplateArgsPtr TemplateArgsPtr(TemplateId->getTemplateArgs(),
1611                                         TemplateId->NumArgs);
1612
1613      Ty = Actions.ActOnTypenameType(getCurScope(), TypenameLoc, SS,
1614                                     TemplateId->TemplateKWLoc,
1615                                     TemplateId->Template,
1616                                     TemplateId->TemplateNameLoc,
1617                                     TemplateId->LAngleLoc,
1618                                     TemplateArgsPtr,
1619                                     TemplateId->RAngleLoc);
1620    } else {
1621      Diag(Tok, diag::err_expected_type_name_after_typename)
1622        << SS.getRange();
1623      return true;
1624    }
1625
1626    SourceLocation EndLoc = Tok.getLastLoc();
1627    Tok.setKind(tok::annot_typename);
1628    setTypeAnnotation(Tok, Ty.isInvalid() ? ParsedType() : Ty.get());
1629    Tok.setAnnotationEndLoc(EndLoc);
1630    Tok.setLocation(TypenameLoc);
1631    PP.AnnotateCachedTokens(Tok);
1632    return false;
1633  }
1634
1635  // Remembers whether the token was originally a scope annotation.
1636  bool WasScopeAnnotation = Tok.is(tok::annot_cxxscope);
1637
1638  CXXScopeSpec SS;
1639  if (getLangOpts().CPlusPlus)
1640    if (ParseOptionalCXXScopeSpecifier(SS, ParsedType(), EnteringContext))
1641      return true;
1642
1643  return TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, NeedType,
1644                                                   SS, !WasScopeAnnotation);
1645}
1646
1647/// \brief Try to annotate a type or scope token, having already parsed an
1648/// optional scope specifier. \p IsNewScope should be \c true unless the scope
1649/// specifier was extracted from an existing tok::annot_cxxscope annotation.
1650bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(bool EnteringContext,
1651                                                       bool NeedType,
1652                                                       CXXScopeSpec &SS,
1653                                                       bool IsNewScope) {
1654  if (Tok.is(tok::identifier)) {
1655    IdentifierInfo *CorrectedII = 0;
1656    // Determine whether the identifier is a type name.
1657    if (ParsedType Ty = Actions.getTypeName(*Tok.getIdentifierInfo(),
1658                                            Tok.getLocation(), getCurScope(),
1659                                            &SS, false,
1660                                            NextToken().is(tok::period),
1661                                            ParsedType(),
1662                                            /*IsCtorOrDtorName=*/false,
1663                                            /*NonTrivialTypeSourceInfo*/true,
1664                                            NeedType ? &CorrectedII : NULL)) {
1665      // A FixIt was applied as a result of typo correction
1666      if (CorrectedII)
1667        Tok.setIdentifierInfo(CorrectedII);
1668      // This is a typename. Replace the current token in-place with an
1669      // annotation type token.
1670      Tok.setKind(tok::annot_typename);
1671      setTypeAnnotation(Tok, Ty);
1672      Tok.setAnnotationEndLoc(Tok.getLocation());
1673      if (SS.isNotEmpty()) // it was a C++ qualified type name.
1674        Tok.setLocation(SS.getBeginLoc());
1675
1676      // In case the tokens were cached, have Preprocessor replace
1677      // them with the annotation token.
1678      PP.AnnotateCachedTokens(Tok);
1679      return false;
1680    }
1681
1682    if (!getLangOpts().CPlusPlus) {
1683      // If we're in C, we can't have :: tokens at all (the lexer won't return
1684      // them).  If the identifier is not a type, then it can't be scope either,
1685      // just early exit.
1686      return false;
1687    }
1688
1689    // If this is a template-id, annotate with a template-id or type token.
1690    if (NextToken().is(tok::less)) {
1691      TemplateTy Template;
1692      UnqualifiedId TemplateName;
1693      TemplateName.setIdentifier(Tok.getIdentifierInfo(), Tok.getLocation());
1694      bool MemberOfUnknownSpecialization;
1695      if (TemplateNameKind TNK
1696          = Actions.isTemplateName(getCurScope(), SS,
1697                                   /*hasTemplateKeyword=*/false, TemplateName,
1698                                   /*ObjectType=*/ ParsedType(),
1699                                   EnteringContext,
1700                                   Template, MemberOfUnknownSpecialization)) {
1701        // Consume the identifier.
1702        ConsumeToken();
1703        if (AnnotateTemplateIdToken(Template, TNK, SS, SourceLocation(),
1704                                    TemplateName)) {
1705          // If an unrecoverable error occurred, we need to return true here,
1706          // because the token stream is in a damaged state.  We may not return
1707          // a valid identifier.
1708          return true;
1709        }
1710      }
1711    }
1712
1713    // The current token, which is either an identifier or a
1714    // template-id, is not part of the annotation. Fall through to
1715    // push that token back into the stream and complete the C++ scope
1716    // specifier annotation.
1717  }
1718
1719  if (Tok.is(tok::annot_template_id)) {
1720    TemplateIdAnnotation *TemplateId = takeTemplateIdAnnotation(Tok);
1721    if (TemplateId->Kind == TNK_Type_template) {
1722      // A template-id that refers to a type was parsed into a
1723      // template-id annotation in a context where we weren't allowed
1724      // to produce a type annotation token. Update the template-id
1725      // annotation token to a type annotation token now.
1726      AnnotateTemplateIdTokenAsType();
1727      return false;
1728    } else if (TemplateId->Kind == TNK_Var_template)
1729      return false;
1730  }
1731
1732  if (SS.isEmpty())
1733    return false;
1734
1735  // A C++ scope specifier that isn't followed by a typename.
1736  AnnotateScopeToken(SS, IsNewScope);
1737  return false;
1738}
1739
1740/// TryAnnotateScopeToken - Like TryAnnotateTypeOrScopeToken but only
1741/// annotates C++ scope specifiers and template-ids.  This returns
1742/// true if there was an error that could not be recovered from.
1743///
1744/// Note that this routine emits an error if you call it with ::new or ::delete
1745/// as the current tokens, so only call it in contexts where these are invalid.
1746bool Parser::TryAnnotateCXXScopeToken(bool EnteringContext) {
1747  assert(getLangOpts().CPlusPlus &&
1748         "Call sites of this function should be guarded by checking for C++");
1749  assert((Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||
1750          (Tok.is(tok::annot_template_id) && NextToken().is(tok::coloncolon)) ||
1751         Tok.is(tok::kw_decltype)) && "Cannot be a type or scope token!");
1752
1753  CXXScopeSpec SS;
1754  if (ParseOptionalCXXScopeSpecifier(SS, ParsedType(), EnteringContext))
1755    return true;
1756  if (SS.isEmpty())
1757    return false;
1758
1759  AnnotateScopeToken(SS, true);
1760  return false;
1761}
1762
1763bool Parser::isTokenEqualOrEqualTypo() {
1764  tok::TokenKind Kind = Tok.getKind();
1765  switch (Kind) {
1766  default:
1767    return false;
1768  case tok::ampequal:            // &=
1769  case tok::starequal:           // *=
1770  case tok::plusequal:           // +=
1771  case tok::minusequal:          // -=
1772  case tok::exclaimequal:        // !=
1773  case tok::slashequal:          // /=
1774  case tok::percentequal:        // %=
1775  case tok::lessequal:           // <=
1776  case tok::lesslessequal:       // <<=
1777  case tok::greaterequal:        // >=
1778  case tok::greatergreaterequal: // >>=
1779  case tok::caretequal:          // ^=
1780  case tok::pipeequal:           // |=
1781  case tok::equalequal:          // ==
1782    Diag(Tok, diag::err_invalid_token_after_declarator_suggest_equal)
1783      << getTokenSimpleSpelling(Kind)
1784      << FixItHint::CreateReplacement(SourceRange(Tok.getLocation()), "=");
1785  case tok::equal:
1786    return true;
1787  }
1788}
1789
1790SourceLocation Parser::handleUnexpectedCodeCompletionToken() {
1791  assert(Tok.is(tok::code_completion));
1792  PrevTokLocation = Tok.getLocation();
1793
1794  for (Scope *S = getCurScope(); S; S = S->getParent()) {
1795    if (S->getFlags() & Scope::FnScope) {
1796      Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_RecoveryInFunction);
1797      cutOffParsing();
1798      return PrevTokLocation;
1799    }
1800
1801    if (S->getFlags() & Scope::ClassScope) {
1802      Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Class);
1803      cutOffParsing();
1804      return PrevTokLocation;
1805    }
1806  }
1807
1808  Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Namespace);
1809  cutOffParsing();
1810  return PrevTokLocation;
1811}
1812
1813// Anchor the Parser::FieldCallback vtable to this translation unit.
1814// We use a spurious method instead of the destructor because
1815// destroying FieldCallbacks can actually be slightly
1816// performance-sensitive.
1817void Parser::FieldCallback::_anchor() {
1818}
1819
1820// Code-completion pass-through functions
1821
1822void Parser::CodeCompleteDirective(bool InConditional) {
1823  Actions.CodeCompletePreprocessorDirective(InConditional);
1824}
1825
1826void Parser::CodeCompleteInConditionalExclusion() {
1827  Actions.CodeCompleteInPreprocessorConditionalExclusion(getCurScope());
1828}
1829
1830void Parser::CodeCompleteMacroName(bool IsDefinition) {
1831  Actions.CodeCompletePreprocessorMacroName(IsDefinition);
1832}
1833
1834void Parser::CodeCompletePreprocessorExpression() {
1835  Actions.CodeCompletePreprocessorExpression();
1836}
1837
1838void Parser::CodeCompleteMacroArgument(IdentifierInfo *Macro,
1839                                       MacroInfo *MacroInfo,
1840                                       unsigned ArgumentIndex) {
1841  Actions.CodeCompletePreprocessorMacroArgument(getCurScope(), Macro, MacroInfo,
1842                                                ArgumentIndex);
1843}
1844
1845void Parser::CodeCompleteNaturalLanguage() {
1846  Actions.CodeCompleteNaturalLanguage();
1847}
1848
1849bool Parser::ParseMicrosoftIfExistsCondition(IfExistsCondition& Result) {
1850  assert((Tok.is(tok::kw___if_exists) || Tok.is(tok::kw___if_not_exists)) &&
1851         "Expected '__if_exists' or '__if_not_exists'");
1852  Result.IsIfExists = Tok.is(tok::kw___if_exists);
1853  Result.KeywordLoc = ConsumeToken();
1854
1855  BalancedDelimiterTracker T(*this, tok::l_paren);
1856  if (T.consumeOpen()) {
1857    Diag(Tok, diag::err_expected_lparen_after)
1858      << (Result.IsIfExists? "__if_exists" : "__if_not_exists");
1859    return true;
1860  }
1861
1862  // Parse nested-name-specifier.
1863  ParseOptionalCXXScopeSpecifier(Result.SS, ParsedType(),
1864                                 /*EnteringContext=*/false);
1865
1866  // Check nested-name specifier.
1867  if (Result.SS.isInvalid()) {
1868    T.skipToEnd();
1869    return true;
1870  }
1871
1872  // Parse the unqualified-id.
1873  SourceLocation TemplateKWLoc; // FIXME: parsed, but unused.
1874  if (ParseUnqualifiedId(Result.SS, false, true, true, ParsedType(),
1875                         TemplateKWLoc, Result.Name)) {
1876    T.skipToEnd();
1877    return true;
1878  }
1879
1880  if (T.consumeClose())
1881    return true;
1882
1883  // Check if the symbol exists.
1884  switch (Actions.CheckMicrosoftIfExistsSymbol(getCurScope(), Result.KeywordLoc,
1885                                               Result.IsIfExists, Result.SS,
1886                                               Result.Name)) {
1887  case Sema::IER_Exists:
1888    Result.Behavior = Result.IsIfExists ? IEB_Parse : IEB_Skip;
1889    break;
1890
1891  case Sema::IER_DoesNotExist:
1892    Result.Behavior = !Result.IsIfExists ? IEB_Parse : IEB_Skip;
1893    break;
1894
1895  case Sema::IER_Dependent:
1896    Result.Behavior = IEB_Dependent;
1897    break;
1898
1899  case Sema::IER_Error:
1900    return true;
1901  }
1902
1903  return false;
1904}
1905
1906void Parser::ParseMicrosoftIfExistsExternalDeclaration() {
1907  IfExistsCondition Result;
1908  if (ParseMicrosoftIfExistsCondition(Result))
1909    return;
1910
1911  BalancedDelimiterTracker Braces(*this, tok::l_brace);
1912  if (Braces.consumeOpen()) {
1913    Diag(Tok, diag::err_expected_lbrace);
1914    return;
1915  }
1916
1917  switch (Result.Behavior) {
1918  case IEB_Parse:
1919    // Parse declarations below.
1920    break;
1921
1922  case IEB_Dependent:
1923    llvm_unreachable("Cannot have a dependent external declaration");
1924
1925  case IEB_Skip:
1926    Braces.skipToEnd();
1927    return;
1928  }
1929
1930  // Parse the declarations.
1931  while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {
1932    ParsedAttributesWithRange attrs(AttrFactory);
1933    MaybeParseCXX11Attributes(attrs);
1934    MaybeParseMicrosoftAttributes(attrs);
1935    DeclGroupPtrTy Result = ParseExternalDeclaration(attrs);
1936    if (Result && !getCurScope()->getParent())
1937      Actions.getASTConsumer().HandleTopLevelDecl(Result.get());
1938  }
1939  Braces.consumeClose();
1940}
1941
1942Parser::DeclGroupPtrTy Parser::ParseModuleImport(SourceLocation AtLoc) {
1943  assert(Tok.isObjCAtKeyword(tok::objc_import) &&
1944         "Improper start to module import");
1945  SourceLocation ImportLoc = ConsumeToken();
1946
1947  SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path;
1948
1949  // Parse the module path.
1950  do {
1951    if (!Tok.is(tok::identifier)) {
1952      if (Tok.is(tok::code_completion)) {
1953        Actions.CodeCompleteModuleImport(ImportLoc, Path);
1954        ConsumeCodeCompletionToken();
1955        SkipUntil(tok::semi);
1956        return DeclGroupPtrTy();
1957      }
1958
1959      Diag(Tok, diag::err_module_expected_ident);
1960      SkipUntil(tok::semi);
1961      return DeclGroupPtrTy();
1962    }
1963
1964    // Record this part of the module path.
1965    Path.push_back(std::make_pair(Tok.getIdentifierInfo(), Tok.getLocation()));
1966    ConsumeToken();
1967
1968    if (Tok.is(tok::period)) {
1969      ConsumeToken();
1970      continue;
1971    }
1972
1973    break;
1974  } while (true);
1975
1976  if (PP.hadModuleLoaderFatalFailure()) {
1977    // With a fatal failure in the module loader, we abort parsing.
1978    cutOffParsing();
1979    return DeclGroupPtrTy();
1980  }
1981
1982  DeclResult Import = Actions.ActOnModuleImport(AtLoc, ImportLoc, Path);
1983  ExpectAndConsumeSemi(diag::err_module_expected_semi);
1984  if (Import.isInvalid())
1985    return DeclGroupPtrTy();
1986
1987  return Actions.ConvertDeclToDeclGroup(Import.get());
1988}
1989
1990bool BalancedDelimiterTracker::diagnoseOverflow() {
1991  P.Diag(P.Tok, diag::err_bracket_depth_exceeded)
1992    << P.getLangOpts().BracketDepth;
1993  P.Diag(P.Tok, diag::note_bracket_depth);
1994  P.SkipUntil(tok::eof);
1995  return true;
1996}
1997
1998bool BalancedDelimiterTracker::expectAndConsume(unsigned DiagID,
1999                                            const char *Msg,
2000                                            tok::TokenKind SkipToToc ) {
2001  LOpen = P.Tok.getLocation();
2002  if (P.ExpectAndConsume(Kind, DiagID, Msg, SkipToToc))
2003    return true;
2004
2005  if (getDepth() < MaxDepth)
2006    return false;
2007
2008  return diagnoseOverflow();
2009}
2010
2011bool BalancedDelimiterTracker::diagnoseMissingClose() {
2012  assert(!P.Tok.is(Close) && "Should have consumed closing delimiter");
2013
2014  const char *LHSName = "unknown";
2015  diag::kind DID;
2016  switch (Close) {
2017  default: llvm_unreachable("Unexpected balanced token");
2018  case tok::r_paren : LHSName = "("; DID = diag::err_expected_rparen; break;
2019  case tok::r_brace : LHSName = "{"; DID = diag::err_expected_rbrace; break;
2020  case tok::r_square: LHSName = "["; DID = diag::err_expected_rsquare; break;
2021  }
2022  P.Diag(P.Tok, DID);
2023  P.Diag(LOpen, diag::note_matching) << LHSName;
2024
2025  // If we're not already at some kind of closing bracket, skip to our closing
2026  // token.
2027  if (P.Tok.isNot(tok::r_paren) && P.Tok.isNot(tok::r_brace) &&
2028      P.Tok.isNot(tok::r_square) &&
2029      P.SkipUntil(Close, FinalToken,
2030                  Parser::StopAtSemi | Parser::StopBeforeMatch) &&
2031      P.Tok.is(Close))
2032    LClose = P.ConsumeAnyToken();
2033  return true;
2034}
2035
2036void BalancedDelimiterTracker::skipToEnd() {
2037  P.SkipUntil(Close, Parser::StopBeforeMatch);
2038  consumeClose();
2039}
2040