The following invalid code snippet causes an ICE since GCC 4.0.3: ================================= struct A {}; class B : A { virtual A* foo(); }; struct C : virtual B { virtual C* foo(); }; C* C::foo() { return 0; } struct D : C {}; ================================= bug.cc:10: error: invalid covariant return type for 'virtual C* C::foo()' bug.cc:5: error: overriding 'virtual A* B::foo()' bug.cc:15: internal compiler error: in make_thunk, at cp/method.c:129 Please submit a full bug report, [etc.]
Confirmed.
Will not be fixed in 4.1.1; adjust target milestone to 4.1.2.
I am testing a patch for this one.
Subject: Bug number PR c++/27492 A patch for this bug has been added to the patch tracker. The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-01/msg01124.html
Subject: Bug 27492 Author: simartin Date: Tue Jan 23 22:33:51 2007 New Revision: 121089 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=121089 Log: 2007-01-23 Simon Martin <simartin@users.sourceforge.net> PR c++/27492 * decl.c (duplicate_decls): Don't reset DECL_INVALID_OVERRIDER_P for function decls. Added: trunk/gcc/testsuite/g++.dg/inherit/covariant15.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/decl.c trunk/gcc/testsuite/ChangeLog
Fixed on the mainline
Subject: Bug 27492 Author: simartin Date: Wed Jun 27 19:53:45 2007 New Revision: 126061 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=126061 Log: gcc/cp/ 2007-06-27 Simon Martin <simartin@users.sourceforge.net> PR c++/27492 * decl.c (duplicate_decls): Don't reset DECL_INVALID_OVERRIDER_P for function decls. gcc/testsuite/ 2007-06-27 Simon Martin <simartin@users.sourceforge.net> PR c++/27492 * g++.dg/inherit/covariant15.C: New test. Added: branches/gcc-4_2-branch/gcc/testsuite/g++.dg/inherit/covariant15.C Modified: branches/gcc-4_2-branch/gcc/cp/ChangeLog branches/gcc-4_2-branch/gcc/cp/decl.c branches/gcc-4_2-branch/gcc/testsuite/ChangeLog
Fixed in 4.2 as well.
Closing 4.1 branch.