decl.c (copy_args_p): Handle copy elision for types with virtual bases.
authorJason Merrill <jason@yorick.cygnus.com>
Tue, 9 Dec 1997 07:26:26 +0000 (07:26 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 9 Dec 1997 07:26:26 +0000 (02:26 -0500)
* decl.c (copy_args_p): Handle copy elision for types with virtual
  bases.
   * call.c (build_over_call): Likewise.

From-SVN: r17022

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/decl.c

index 2b9a24f24350ad26ce63a05414c23402585dd01b..66df1a767779625abf8482d15084df243a354393 100644 (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,
index 827e904022742aa59d5286d57894313fcf801178..64f3a97531d1cb88a4f2aa26910fa1667d0fc2c3 100644 (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;
index 4bcb79c6420663bda5c01abaea96bbced0ee8f84..7ece1d33d38d82f5cb1ade17206cf5d871e33159 100644 (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))