diff options
Diffstat (limited to 'lib/Sema/SemaCXXScopeSpec.cpp')
| -rw-r--r-- | lib/Sema/SemaCXXScopeSpec.cpp | 35 | 
1 files changed, 18 insertions, 17 deletions
diff --git a/lib/Sema/SemaCXXScopeSpec.cpp b/lib/Sema/SemaCXXScopeSpec.cpp index d8971c0d37eb..57471de78d3e 100644 --- a/lib/Sema/SemaCXXScopeSpec.cpp +++ b/lib/Sema/SemaCXXScopeSpec.cpp @@ -461,6 +461,7 @@ class NestedNameSpecifierValidatorCCC : public CorrectionCandidateCallback {  ///        are allowed.  The bool value pointed by this parameter is set to  ///       'true' if the identifier is treated as if it was followed by ':',  ///        not '::'. +/// \param OnlyNamespace If true, only considers namespaces in lookup.  ///  /// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in  /// that it contains an extra parameter \p ScopeLookupResult, which provides @@ -473,15 +474,15 @@ class NestedNameSpecifierValidatorCCC : public CorrectionCandidateCallback {  /// scope if it *knows* that the result is correct.  It should not return in a  /// dependent context, for example. Nor will it extend \p SS with the scope  /// specifier. -bool Sema::BuildCXXNestedNameSpecifier(Scope *S, -                                       NestedNameSpecInfo &IdInfo, -                                       bool EnteringContext, -                                       CXXScopeSpec &SS, +bool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, +                                       bool EnteringContext, CXXScopeSpec &SS,                                         NamedDecl *ScopeLookupResult,                                         bool ErrorRecoveryLookup, -                                       bool *IsCorrectedToColon) { +                                       bool *IsCorrectedToColon, +                                       bool OnlyNamespace) {    LookupResult Found(*this, IdInfo.Identifier, IdInfo.IdentifierLoc, -                     LookupNestedNameSpecifierName); +                     OnlyNamespace ? LookupNamespaceName +                                   : LookupNestedNameSpecifierName);    QualType ObjectType = GetTypeFromParser(IdInfo.ObjectType);    // Determine where to perform name lookup @@ -594,7 +595,9 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,          return true;        }        // Replacement '::' -> ':' is not allowed, just issue respective error. -      Diag(R.getNameLoc(), diag::err_expected_class_or_namespace) +      Diag(R.getNameLoc(), OnlyNamespace +                               ? unsigned(diag::err_expected_namespace_name) +                               : unsigned(diag::err_expected_class_or_namespace))            << IdInfo.Identifier << getLangOpts().CPlusPlus;        if (NamedDecl *ND = R.getAsSingle<NamedDecl>())          Diag(ND->getLocation(), diag::note_entity_declared_at) @@ -819,19 +822,17 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,    return true;  } -bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, -                                       NestedNameSpecInfo &IdInfo, -                                       bool EnteringContext, -                                       CXXScopeSpec &SS, +bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, +                                       bool EnteringContext, CXXScopeSpec &SS,                                         bool ErrorRecoveryLookup, -                                       bool *IsCorrectedToColon) { +                                       bool *IsCorrectedToColon, +                                       bool OnlyNamespace) {    if (SS.isInvalid())      return true; -  return BuildCXXNestedNameSpecifier(S, IdInfo, -                                     EnteringContext, SS, +  return BuildCXXNestedNameSpecifier(S, IdInfo, EnteringContext, SS,                                       /*ScopeLookupResult=*/nullptr, false, -                                     IsCorrectedToColon); +                                     IsCorrectedToColon, OnlyNamespace);  }  bool Sema::ActOnCXXNestedNameSpecifierDecltype(CXXScopeSpec &SS, @@ -933,8 +934,8 @@ bool Sema::ActOnCXXNestedNameSpecifier(Scope *S,    // We were able to resolve the template name to an actual template.     // Build an appropriate nested-name-specifier. -  QualType T = CheckTemplateIdType(Template.get(), TemplateNameLoc,  -                                   TemplateArgs); +  QualType T = +      CheckTemplateIdType(Template.get(), TemplateNameLoc, TemplateArgs);    if (T.isNull())      return true;  | 
