From: Jason Merrill Date: Tue, 9 Dec 1997 07:26:26 +0000 (+0000) Subject: decl.c (copy_args_p): Handle copy elision for types with virtual bases. X-Git-Tag: releases/libf2c-0.5.21~411 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=67437d5b5df323841758f4fecd2ed28f8c1f68a2;p=thirdparty%2Fgcc.git decl.c (copy_args_p): Handle copy elision for types with virtual bases. * decl.c (copy_args_p): Handle copy elision for types with virtual bases. * call.c (build_over_call): Likewise. From-SVN: r17022 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2b9a24f24350..66df1a767779 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +Mon Dec 8 23:17:13 1997 Jason Merrill + + * decl.c (copy_args_p): Handle copy elision for types with virtual + bases. + * call.c (build_over_call): Likewise. + Sun Dec 7 22:38:12 1997 Mark Mitchell * pt.c (lookup_template_function): Copy the template arguments, diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 827e90402274..64f3a97531d1 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5502,7 +5502,10 @@ build_over_call (fn, convs, args, flags) && copy_args_p (fn)) { tree targ; - arg = TREE_VALUE (TREE_CHAIN (converted_args)); + arg = TREE_CHAIN (converted_args); + if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn))) + arg = TREE_CHAIN (arg); + arg = TREE_VALUE (arg); /* Pull out the real argument, disregarding const-correctness. */ targ = arg; diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4bcb79c64206..7ece1d33d38d 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10280,6 +10280,9 @@ copy_args_p (d) tree d; { tree t = FUNCTION_ARG_CHAIN (d); + if (DECL_CONSTRUCTOR_P (d) + && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d))) + t = TREE_CHAIN (t); if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t))) == DECL_CLASS_CONTEXT (d))