From b663bcf33f3ea2b7b6a4cf60da9c9c76b1a82255 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 18 Mar 2002 11:55:11 -0500 Subject: [PATCH] PR c++/4222, c++/5995 PR c++/4222, c++/5995 * call.c (build_over_call): Fix empty class logic. From-SVN: r50978 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/call.c | 3 ++- 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 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 *, ...); -- 2.30.2