call.c (build_new_op): Strip leading REF_BIND from first operand to builtin operator.
authorJason Merrill <jason@yorick.cygnus.com>
Mon, 1 Sep 1997 21:01:30 +0000 (21:01 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 1 Sep 1997 21:01:30 +0000 (17:01 -0400)
* call.c (build_new_op): Strip leading REF_BIND from first operand
to builtin operator.

* decl2.c (mark_vtable_entries): Mark abort_fndecl as used when we
use its RTL.

From-SVN: r15023

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/cp/decl2.c

index 472affb2e375cf33fbb391f1f09d910d44a0d8e7..46ede9667c4b8e608d9e5fb49a5426c1e1379fde 100644 (file)
@@ -1,3 +1,11 @@
+Mon Sep  1 13:19:04 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * call.c (build_new_op): Strip leading REF_BIND from first operand
+       to builtin operator.
+
+       * decl2.c (mark_vtable_entries): Mark abort_fndecl as used when we
+       use its RTL.
+
 Thu Aug 28 09:45:23 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * call.c (null_ptr_cst_p): Remove support for (void*)0.
index 26319f61d6d8d984fc52c0164f75cb5c6ecf7ce8..c6b28846db86c1d6c5bd6f1c5fe80332bd8494a0 100644 (file)
@@ -4579,6 +4579,7 @@ build_new_op (code, flags, arg1, arg2, arg3)
   tree fns, mem_arglist, arglist, fnname;
   enum tree_code code2 = NOP_EXPR;
   tree templates = NULL_TREE;
+  tree conv;
 
   if (arg1 == error_mark_node
       || arg2 == error_mark_node
@@ -4860,8 +4861,13 @@ build_new_op (code, flags, arg1, arg2, arg3)
        }
     }
 
-  arg1 = convert_from_reference
-    (convert_like (TREE_VEC_ELT (cand->convs, 0), arg1));
+  /* We need to strip any leading REF_BIND so that bitfields don't cause
+     errors.  This should not remove any important conversions, because
+     builtins don't apply to class objects directly.  */
+  conv = TREE_VEC_ELT (cand->convs, 0);
+  if (TREE_CODE (conv) == REF_BIND)
+    conv = TREE_OPERAND (conv, 0);
+  arg1 = convert_like (conv, arg1);
   if (arg2)
     arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
   if (arg3)
index 701489e974bb74afc6cdbd81759a6bc7342caec9..a8975ecd4d4f0bcf2c0b480b30318a9626d2fdfb 100644 (file)
@@ -2343,6 +2343,7 @@ mark_vtable_entries (decl)
        {
          TREE_OPERAND (fnaddr, 0) = fn = copy_node (fn);
          DECL_RTL (fn) = DECL_RTL (abort_fndecl);
+         mark_used (abort_fndecl);
        }
       if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn))
        {