diff options
author | Simon Martin <simartin@users.sourceforge.net> | 2007-03-02 22:09:20 +0000 |
---|---|---|
committer | Simon Martin <simartin@gcc.gnu.org> | 2007-03-02 22:09:20 +0000 |
commit | 49fedf5af48d844f32b942fc00f4de155e736f34 (patch) | |
tree | b77c456838fb371a3b3e6a4b05400e587472c033 | |
parent | f9dedbe3f17b9b349674f51b6338ef2c0dd112b6 (diff) | |
download | gcc-49fedf5af48d844f32b942fc00f4de155e736f34.zip gcc-49fedf5af48d844f32b942fc00f4de155e736f34.tar.gz gcc-49fedf5af48d844f32b942fc00f4de155e736f34.tar.bz2 |
re PR c++/28253 (ICE with invalid covariant return)
2007-03-02 Simon Martin <simartin@users.sourceforge.net>
PR c++/28253
* class.c (update_vtable_entry_for_fn): Properly handle invalid overriders
for thunks.
From-SVN: r122490
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/class.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/covariant16.C | 17 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a45c866..3319d7b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-03-02 Simon Martin <simartin@users.sourceforge.net> + + PR c++/28253 + * class.c (update_vtable_entry_for_fn): Properly handle invalid overriders + for thunks. + 2007-03-02 Geoffrey Keating <geoffk@apple.com> * g++spec.c (lang_specific_driver): Add -lstdc++ when compiling diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f24a2fe..b39f532 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -2097,7 +2097,8 @@ update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals, fixed_offset, virtual_offset); } else - gcc_assert (!DECL_THUNK_P (fn)); + gcc_assert (DECL_INVALID_OVERRIDER_P (overrider_target) || + !DECL_THUNK_P (fn)); /* Assume that we will produce a thunk that convert all the way to the final overrider, and not to an intermediate virtual base. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 10c9487..cc6e940 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-03-02 Simon Martin <simartin@users.sourceforge.net> + + PR c++/28253 + * g++.dg/inherit/covariant16.C: New test. + 2007-03-02 Geoffrey Keating <geoffk@apple.com> * g++.dg/other/darwin-minversion-1.C: New. diff --git a/gcc/testsuite/g++.dg/inherit/covariant16.C b/gcc/testsuite/g++.dg/inherit/covariant16.C new file mode 100644 index 0000000..828b5b8 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/covariant16.C @@ -0,0 +1,17 @@ +/* PR c++/28253 This used to ICE. */ +/* { dg-do "compile" } */ + +struct A +{ + virtual A* foo(); +}; + +struct B : virtual A +{ + virtual B* foo(); /* { dg-error "overriding" } */ +}; + +struct C : B +{ + virtual C& foo(); /* { dg-error "conflicting return type" } */ +}; |