From: Jason Merrill Date: Mon, 18 Mar 2002 16:55:11 +0000 (-0500) Subject: PR c++/4222, c++/5995 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b663bcf33f3ea2b7b6a4cf60da9c9c76b1a82255;p=gcc.git PR c++/4222, c++/5995 PR c++/4222, c++/5995 * call.c (build_over_call): Fix empty class logic. From-SVN: r50978 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c5b30b7dd94..12d865e8bb8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2002-03-18 Jason Merrill + 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 0cb7dfce5c8..9d26861cdec 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 a876ce84a9f..b54490c9579 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 *, ...);