diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-01-20 01:26:23 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-01-20 01:26:23 +0000 |
commit | ef331b783bb96a0f0e34afdb7ef46677dc4764cb (patch) | |
tree | 76961cf2e3a83c1dedb9490266157be929dd64b4 /lib/Sema/SemaExprMember.cpp | |
parent | 2bf8fd84087231fd92dfdebe18895e01a6ae405c (diff) |
Remove PotentiallyPotentiallyEvaluated, and replace it with a much simpler and less error-prone way of handling the relevant cases. Towards marking of whether a declaration is used more accurately.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148522 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaExprMember.cpp')
-rw-r--r-- | lib/Sema/SemaExprMember.cpp | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/lib/Sema/SemaExprMember.cpp b/lib/Sema/SemaExprMember.cpp index 6bff219d1e..de35ce2bb3 100644 --- a/lib/Sema/SemaExprMember.cpp +++ b/lib/Sema/SemaExprMember.cpp @@ -74,14 +74,10 @@ enum IMAKind { /// context is not an instance method. IMA_Unresolved_StaticContext, - // The reference is an instance data member access, which is allowed - // because we're in C++11 mode and the context is unevaluated. - IMA_Field_Uneval_StaticContext, - - // The reference is an instance data member access, which may be allowed - // because we're in C++11 mode and the context may be unevaluated - // (i.e. the context is PotentiallyPotentiallyEvaluated). - IMA_Field_PPE_StaticContext, + // The reference refers to a field which is not a member of the containing + // class, which is allowed because we're in C++11 mode and the context is + // unevaluated. + IMA_Field_Uneval_Context, /// All possible referrents are instance members and the current /// context is not an instance method. @@ -158,9 +154,7 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef, const Sema::ExpressionEvaluationContextRecord& record = SemaRef.ExprEvalContexts.back(); if (record.Context == Sema::Unevaluated) - return IMA_Field_Uneval_StaticContext; - if (record.Context == Sema::PotentiallyPotentiallyEvaluated) - return IMA_Field_PPE_StaticContext; + return IMA_Field_Uneval_Context; } return IMA_Error_StaticContext; @@ -196,8 +190,7 @@ static IMAKind ClassifyImplicitMemberAccess(Sema &SemaRef, static void DiagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *rep, - const DeclarationNameInfo &nameInfo, - bool DelayPPEDiag = false) { + const DeclarationNameInfo &nameInfo) { SourceLocation Loc = nameInfo.getLoc(); SourceRange Range(Loc); if (SS.isSet()) Range.setBegin(SS.getRange().getBegin()); @@ -206,29 +199,17 @@ static void DiagnoseInstanceReference(Sema &SemaRef, if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(SemaRef.CurContext)) { if (MD->isStatic()) { // "invalid use of member 'x' in static member function" - if (DelayPPEDiag) - SemaRef.ExprEvalContexts.back().addDiagnostic(Loc, - SemaRef.PDiag(diag::err_invalid_member_use_in_static_method) - << Range << nameInfo.getName()); - else - SemaRef.Diag(Loc, diag::err_invalid_member_use_in_static_method) - << Range << nameInfo.getName(); + SemaRef.Diag(Loc, diag::err_invalid_member_use_in_static_method) + << Range << nameInfo.getName(); return; } } - if (DelayPPEDiag) - SemaRef.ExprEvalContexts.back().addDiagnostic(Loc, - SemaRef.PDiag(diag::err_invalid_non_static_member_use) - << nameInfo.getName() << Range); - else - SemaRef.Diag(Loc, diag::err_invalid_non_static_member_use) - << nameInfo.getName() << Range; + SemaRef.Diag(Loc, diag::err_invalid_non_static_member_use) + << nameInfo.getName() << Range; return; } - assert(!DelayPPEDiag && "Only need to delay diagnostic for fields"); - SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range; } @@ -246,15 +227,10 @@ Sema::BuildPossibleImplicitMemberExpr(const CXXScopeSpec &SS, case IMA_Unresolved: return BuildImplicitMemberExpr(SS, R, TemplateArgs, false); - case IMA_Field_PPE_StaticContext: - DiagnoseInstanceReference(*this, SS, R.getRepresentativeDecl(), - R.getLookupNameInfo(), /*DelayPPEDiag*/true); - // FALL-THROUGH - case IMA_Static: case IMA_Mixed_StaticContext: case IMA_Unresolved_StaticContext: - case IMA_Field_Uneval_StaticContext: + case IMA_Field_Uneval_Context: if (TemplateArgs) return BuildTemplateIdExpr(SS, R, false, *TemplateArgs); return BuildDeclarationNameExpr(SS, R, false); |