Replace the call to ParseOptionalCXX0XClassVirtSpecifierSeq with code to only parse an optional 'final' keyword.
llvm-svn: 128278
This commit is contained in:
parent
30f29444c0
commit
f9eb63beb7
|
@ -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);
|
||||
|
|
|
@ -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'}}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue