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
This commit is contained in:
Jason Merrill 1997-12-09 07:26:26 +00:00 committed by Jason Merrill
parent 25b76cc193
commit 67437d5b5d
3 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,9 @@
Mon Dec 8 23:17:13 1997 Jason Merrill <jason@yorick.cygnus.com>
* 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 <mmitchell@usa.net>
* pt.c (lookup_template_function): Copy the template arguments,

View File

@ -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;

View File

@ -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))