diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Parse/Parser.cpp')
| -rw-r--r-- | contrib/llvm/tools/clang/lib/Parse/Parser.cpp | 42 | 
1 files changed, 15 insertions, 27 deletions
diff --git a/contrib/llvm/tools/clang/lib/Parse/Parser.cpp b/contrib/llvm/tools/clang/lib/Parse/Parser.cpp index d8a4ea63153a..52e5194e6236 100644 --- a/contrib/llvm/tools/clang/lib/Parse/Parser.cpp +++ b/contrib/llvm/tools/clang/lib/Parse/Parser.cpp @@ -938,7 +938,7 @@ Parser::ParseDeclOrFunctionDefInternal(ParsedAttributesWithRange &attrs,        Actions.setCurrentOpenCLExtensionForDecl(TheDecl);      if (AnonRecord) {        Decl* decls[] = {AnonRecord, TheDecl}; -      return Actions.BuildDeclaratorGroup(decls, /*TypeMayContainAuto=*/false); +      return Actions.BuildDeclaratorGroup(decls);      }      return Actions.ConvertDeclToDeclGroup(TheDecl);    } @@ -1472,8 +1472,7 @@ Parser::TryAnnotateName(bool IsAddressOfOperand,      return ANK_Error;    if (Tok.isNot(tok::identifier) || SS.isInvalid()) { -    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, false, SS, -                                                  !WasScopeAnnotation)) +    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(SS, !WasScopeAnnotation))        return ANK_Error;      return ANK_Unresolved;    } @@ -1486,8 +1485,7 @@ Parser::TryAnnotateName(bool IsAddressOfOperand,    if (isTentativelyDeclared(Name)) {      // Identifier has been tentatively declared, and thus cannot be resolved as      // an expression. Fall back to annotating it as a type. -    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, false, SS, -                                                  !WasScopeAnnotation)) +    if (TryAnnotateTypeOrScopeTokenAfterScopeSpec(SS, !WasScopeAnnotation))        return ANK_Error;      return Tok.is(tok::annot_typename) ? ANK_Success : ANK_TentativeDecl;    } @@ -1625,7 +1623,7 @@ bool Parser::TryKeywordIdentFallback(bool DisableKeyword) {  ///  /// Note that this routine emits an error if you call it with ::new or ::delete  /// as the current tokens, so only call it in contexts where these are invalid. -bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext, bool NeedType) { +bool Parser::TryAnnotateTypeOrScopeToken() {    assert((Tok.is(tok::identifier) || Tok.is(tok::coloncolon) ||            Tok.is(tok::kw_typename) || Tok.is(tok::annot_cxxscope) ||            Tok.is(tok::kw_decltype) || Tok.is(tok::annot_template_id) || @@ -1642,7 +1640,7 @@ bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext, bool NeedType) {      if (getLangOpts().MSVCCompat && NextToken().is(tok::kw_typedef)) {        Token TypedefToken;        PP.Lex(TypedefToken); -      bool Result = TryAnnotateTypeOrScopeToken(EnteringContext, NeedType); +      bool Result = TryAnnotateTypeOrScopeToken();        PP.EnterToken(Tok);        Tok = TypedefToken;        if (!Result) @@ -1667,8 +1665,7 @@ bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext, bool NeedType) {            Tok.is(tok::annot_decltype)) {          // Attempt to recover by skipping the invalid 'typename'          if (Tok.is(tok::annot_decltype) || -            (!TryAnnotateTypeOrScopeToken(EnteringContext, NeedType) && -             Tok.isAnnotation())) { +            (!TryAnnotateTypeOrScopeToken() && Tok.isAnnotation())) {            unsigned DiagID = diag::err_expected_qualified_after_typename;            // MS compatibility: MSVC permits using known types with typename.            // e.g. "typedef typename T* pointer_type" @@ -1728,33 +1725,24 @@ bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext, bool NeedType) {    CXXScopeSpec SS;    if (getLangOpts().CPlusPlus) -    if (ParseOptionalCXXScopeSpecifier(SS, nullptr, EnteringContext)) +    if (ParseOptionalCXXScopeSpecifier(SS, nullptr, /*EnteringContext*/false))        return true; -  return TryAnnotateTypeOrScopeTokenAfterScopeSpec(EnteringContext, NeedType, -                                                   SS, !WasScopeAnnotation); +  return TryAnnotateTypeOrScopeTokenAfterScopeSpec(SS, !WasScopeAnnotation);  }  /// \brief Try to annotate a type or scope token, having already parsed an  /// optional scope specifier. \p IsNewScope should be \c true unless the scope  /// specifier was extracted from an existing tok::annot_cxxscope annotation. -bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(bool EnteringContext, -                                                       bool NeedType, -                                                       CXXScopeSpec &SS, +bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(CXXScopeSpec &SS,                                                         bool IsNewScope) {    if (Tok.is(tok::identifier)) { -    IdentifierInfo *CorrectedII = nullptr;      // Determine whether the identifier is a type name.      if (ParsedType Ty = Actions.getTypeName(              *Tok.getIdentifierInfo(), Tok.getLocation(), getCurScope(), &SS,              false, NextToken().is(tok::period), nullptr,              /*IsCtorOrDtorName=*/false, -            /*NonTrivialTypeSourceInfo*/ true, -            NeedType ? &CorrectedII : nullptr)) { -      // A FixIt was applied as a result of typo correction -      if (CorrectedII) -        Tok.setIdentifierInfo(CorrectedII); - +            /*NonTrivialTypeSourceInfo*/ true)) {        SourceLocation BeginLoc = Tok.getLocation();        if (SS.isNotEmpty()) // it was a C++ qualified type name.          BeginLoc = SS.getBeginLoc(); @@ -1803,11 +1791,11 @@ bool Parser::TryAnnotateTypeOrScopeTokenAfterScopeSpec(bool EnteringContext,        UnqualifiedId TemplateName;        TemplateName.setIdentifier(Tok.getIdentifierInfo(), Tok.getLocation());        bool MemberOfUnknownSpecialization; -      if (TemplateNameKind TNK = -              Actions.isTemplateName(getCurScope(), SS, -                                     /*hasTemplateKeyword=*/false, TemplateName, -                                     /*ObjectType=*/nullptr, EnteringContext, -                                     Template, MemberOfUnknownSpecialization)) { +      if (TemplateNameKind TNK = Actions.isTemplateName( +              getCurScope(), SS, +              /*hasTemplateKeyword=*/false, TemplateName, +              /*ObjectType=*/nullptr, /*EnteringContext*/false, Template, +              MemberOfUnknownSpecialization)) {          // Consume the identifier.          ConsumeToken();          if (AnnotateTemplateIdToken(Template, TNK, SS, SourceLocation(),  | 
