diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2015-02-03 04:49:42 +0200 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2015-02-02 21:49:42 -0500 |
commit | 879887f1d250f677eb22d9aec6714ce131fd995b (patch) | |
tree | fbd3dcc17bb1e58f29e78e17a2c5e8d6616018cb | |
parent | cf55ec5696f2cfff129869dbefab85a2866b80d3 (diff) | |
download | gcc-879887f1d250f677eb22d9aec6714ce131fd995b.zip gcc-879887f1d250f677eb22d9aec6714ce131fd995b.tar.gz gcc-879887f1d250f677eb22d9aec6714ce131fd995b.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/override1.C | 4 |
3 files changed, 12 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2e5e2a5..7c200d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5119964..d2b0814 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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 diff --git a/gcc/testsuite/g++.dg/cpp0x/override1.C b/gcc/testsuite/g++.dg/cpp0x/override1.C index 05d7290..7686a28 100644 --- a/gcc/testsuite/g++.dg/cpp0x/override1.C +++ b/gcc/testsuite/g++.dg/cpp0x/override1.C @@ -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 |