diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-06-30 01:28:56 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-06-30 01:28:56 +0000 |
commit | 9ba0fec83e7f2eb76cbe53c899126a69827fa78d (patch) | |
tree | 72acb0a28b854a9e0f43ecd9365b388255f7e02f /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | a5cb3893378f7ea78bc8c9bd727809b0976207aa (diff) | |
download | bcm5719-llvm-9ba0fec83e7f2eb76cbe53c899126a69827fa78d.tar.gz bcm5719-llvm-9ba0fec83e7f2eb76cbe53c899126a69827fa78d.zip |
Rework parsing of pure-specifiers. Perform the grammar matching and
disambiguation in the parser rather than trying to do it in Sema.
llvm-svn: 241032
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 7ed9bfcb979..672fc894f1a 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2186,9 +2186,6 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, assert(Member && "HandleField never returns null"); } } else { - assert(InitStyle == ICIS_NoInit || - D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static); - Member = HandleDeclarator(S, D, TemplateParameterLists); if (!Member) return nullptr; @@ -13060,6 +13057,15 @@ bool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) { return true; } +void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) { + if (D->getFriendObjectKind()) + Diag(D->getLocation(), diag::err_pure_friend); + else if (auto *M = dyn_cast<CXXMethodDecl>(D)) + CheckPureMethod(M, ZeroLoc); + else + Diag(D->getLocation(), diag::err_illegal_initializer); +} + /// \brief Determine whether the given declaration is a static data member. static bool isStaticDataMember(const Decl *D) { if (const VarDecl *Var = dyn_cast_or_null<VarDecl>(D)) |