From e52a5db606c4225c41e77dcfb6e18ebb17b67cac Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 5 Nov 2010 21:44:31 -0400 Subject: [PATCH] re PR c++/45473 (ICE: in dfs_walk_once, at cp/search.c:1659) PR c++/45473 * search.c (look_for_overrides): A constructor is never virtual. From-SVN: r166391 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/search.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/inherit/virtual6.C | 15 +++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/g++.dg/inherit/virtual6.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 939b05a..cab1040 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-11-05 Jason Merrill + + PR c++/45473 + * search.c (look_for_overrides): A constructor is never virtual. + 2010-11-05 Jakub Jelinek PR c++/46160 diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 0249fb0..370ddf6 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1935,6 +1935,11 @@ look_for_overrides (tree type, tree fndecl) int ix; int found = 0; + /* A constructor for a class T does not override a function T + in a base class. */ + if (DECL_CONSTRUCTOR_P (fndecl)) + return 0; + for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++) { tree basetype = BINFO_TYPE (base_binfo); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0cc58bf..dbde831 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-05 Jason Merrill + + PR c++/45473 + * g++.dg/inherit/virtual6.C: New. + 2010-11-05 Jakub Jelinek PR c/44772 diff --git a/gcc/testsuite/g++.dg/inherit/virtual6.C b/gcc/testsuite/g++.dg/inherit/virtual6.C new file mode 100644 index 0000000..f036969 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/virtual6.C @@ -0,0 +1,15 @@ +// PR c++/45473 + +struct A +{ + virtual void B (); +}; + +struct B : A +{ + B (); +}; + +struct C : B +{ +}; -- 2.7.4