diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
| -rw-r--r-- | gcc/cp/call.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/empty1.C | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c5b30b7..12d865e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2002-03-18 Jason Merrill <jason@redhat.com> + PR c++/4222, c++/5995 + * call.c (build_over_call): Fix empty class logic. + PR c++/3870 * cp-tree.h (struct saved_scope): Add last_parms field. * decl.c (maybe_push_to_top_level): Save last_function_parms. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 0cb7dfc..9d26861 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4256,7 +4256,8 @@ build_over_call (cand, args, flags) be touched as it might overlay things. When the gcc core learns about empty classes, we can treat it like other classes. */ - && !is_empty_class (DECL_CONTEXT (fn))) + && !(is_empty_class (DECL_CONTEXT (fn)) + && TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))) { tree address; tree to = stabilize_reference diff --git a/gcc/testsuite/g++.old-deja/g++.other/empty1.C b/gcc/testsuite/g++.old-deja/g++.other/empty1.C index a876ce8..b54490c 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/empty1.C +++ b/gcc/testsuite/g++.old-deja/g++.other/empty1.C @@ -2,9 +2,7 @@ // This test case checks that the return value optimization works for // empty classes. -// xfailed because empty classes clobbering what they overlay as the -// backend treats them as single byte objects. See bug 4222 -// execution test - XFAIL *-*-* +// PR c++/5995 extern "C" void abort(); extern "C" int printf (const char *, ...); |
