Commit 7e3af374 by Jason Merrill Committed by Jason Merrill

call.c (build_new_op): Strip leading REF_BIND from first operand to builtin operator.

	* 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
parent 8e69329a
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> Thu Aug 28 09:45:23 1997 Jason Merrill <jason@yorick.cygnus.com>
* call.c (null_ptr_cst_p): Remove support for (void*)0. * call.c (null_ptr_cst_p): Remove support for (void*)0.
......
...@@ -4579,6 +4579,7 @@ build_new_op (code, flags, arg1, arg2, arg3) ...@@ -4579,6 +4579,7 @@ build_new_op (code, flags, arg1, arg2, arg3)
tree fns, mem_arglist, arglist, fnname; tree fns, mem_arglist, arglist, fnname;
enum tree_code code2 = NOP_EXPR; enum tree_code code2 = NOP_EXPR;
tree templates = NULL_TREE; tree templates = NULL_TREE;
tree conv;
if (arg1 == error_mark_node if (arg1 == error_mark_node
|| arg2 == error_mark_node || arg2 == error_mark_node
...@@ -4860,8 +4861,13 @@ build_new_op (code, flags, arg1, arg2, arg3) ...@@ -4860,8 +4861,13 @@ build_new_op (code, flags, arg1, arg2, arg3)
} }
} }
arg1 = convert_from_reference /* We need to strip any leading REF_BIND so that bitfields don't cause
(convert_like (TREE_VEC_ELT (cand->convs, 0), arg1)); 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) if (arg2)
arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2); arg2 = convert_like (TREE_VEC_ELT (cand->convs, 1), arg2);
if (arg3) if (arg3)
......
...@@ -2343,6 +2343,7 @@ mark_vtable_entries (decl) ...@@ -2343,6 +2343,7 @@ mark_vtable_entries (decl)
{ {
TREE_OPERAND (fnaddr, 0) = fn = copy_node (fn); TREE_OPERAND (fnaddr, 0) = fn = copy_node (fn);
DECL_RTL (fn) = DECL_RTL (abort_fndecl); DECL_RTL (fn) = DECL_RTL (abort_fndecl);
mark_used (abort_fndecl);
} }
if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn)) if (TREE_CODE (fn) == THUNK_DECL && DECL_EXTERNAL (fn))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment