Replace the call to ParseOptionalCXX0XClassVirtSpecifierSeq with code to only parse an optional 'final' keyword.

llvm-svn: 128278
This commit is contained in:
Anders Carlsson 2011-03-25 14:46:08 +00:00
parent 30f29444c0
commit f9eb63beb7
2 changed files with 18 additions and 9 deletions

View File

@ -1758,8 +1758,24 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
if (TagDecl)
Actions.ActOnTagStartDefinition(getCurScope(), TagDecl);
ClassVirtSpecifiers CVS;
ParseOptionalCXX0XClassVirtSpecifierSeq(CVS);
SourceLocation FinalLoc;
// Parse the optional 'final' keyword.
if (getLang().CPlusPlus && Tok.is(tok::identifier)) {
IdentifierInfo *II = Tok.getIdentifierInfo();
// Initialize the contextual keywords.
if (!Ident_final) {
Ident_final = &PP.getIdentifierTable().get("final");
Ident_override = &PP.getIdentifierTable().get("override");
}
if (II == Ident_final)
FinalLoc = ConsumeToken();
if (!getLang().CPlusPlus0x)
Diag(FinalLoc, diag::ext_override_control_keyword) << "final";
}
if (Tok.is(tok::colon)) {
ParseBaseClause(TagDecl);
@ -1777,9 +1793,6 @@ void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc,
SourceLocation LBraceLoc = ConsumeBrace();
SourceLocation FinalLoc =
CVS.isFinalSpecified() ? CVS.getFinalLoc() : SourceLocation();
if (TagDecl)
Actions.ActOnStartCXXMemberDeclarations(getCurScope(), TagDecl, FinalLoc,
LBraceLoc);

View File

@ -2,9 +2,5 @@
namespace Test1 {
class A final { };
class B explicit { };
class C final explicit { };
class D final final { }; // expected-error {{class already marked 'final'}}
class E explicit explicit { }; // expected-error {{class already marked 'explicit'}}
}