re PR c++/64901 (overriding final function defined out of line does not lead to an error)
PR c++/64901 * decl.c (duplicate_decls): Also duplicate DECL_FINAL_P and DECL_OVERRIDE_P. From-SVN: r220363
This commit is contained in:
parent
cf55ec5696
commit
879887f1d2
@ -1,3 +1,9 @@
|
||||
2015-02-02 Ville Voutilainen <ville.voutilainen@gmail.com>
|
||||
|
||||
PR c++/64901
|
||||
* decl.c (duplicate_decls): Also duplicate DECL_FINAL_P and
|
||||
DECL_OVERRIDE_P.
|
||||
|
||||
2015-02-02 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* tree.c (handle_abi_tag_attribute): Diagnose invalid arguments.
|
||||
|
@ -1813,6 +1813,8 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
|
||||
DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
|
||||
DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
|
||||
DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
|
||||
DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
|
||||
DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
|
||||
DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
|
||||
if (DECL_OVERLOADED_OPERATOR_P (olddecl) != ERROR_MARK)
|
||||
SET_OVERLOADED_OPERATOR_CODE
|
||||
|
@ -4,8 +4,11 @@ struct B
|
||||
virtual void f() final {}
|
||||
virtual void g() {}
|
||||
virtual void x() const {}
|
||||
virtual void y() final;
|
||||
};
|
||||
|
||||
void B::y() {} // { dg-error "overriding" }
|
||||
|
||||
struct B2
|
||||
{
|
||||
virtual void h() {}
|
||||
@ -14,6 +17,7 @@ struct B2
|
||||
struct D : B
|
||||
{
|
||||
virtual void g() override final {} // { dg-error "overriding" }
|
||||
virtual void y() override final {} // { dg-error "virtual" }
|
||||
};
|
||||
|
||||
template <class T> struct D2 : T
|
||||
|
Loading…
x
Reference in New Issue
Block a user