Commit 7a3e01c4 by John David Anglin Committed by John David Anglin

re PR c++/12007 (Multiple inheritance float pass by value fails)

        PR c++/12007
	* dbxout.c (dbxout_parms): Check that DECL_RTL and DECL_INCOMING_RTL
	are set for parameters before outputing debugging information.
	* cp/method.c (use_thunk): Always clone function argument tree.

From-SVN: r78192
parent 0fed9ec7
2004-02-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR c++/12007
* dbxout.c (dbxout_parms): Check that DECL_RTL and DECL_INCOMING_RTL
are set for parameters before outputing debugging information.
2004-02-20 Falk Hueffner <falk@debian.org> 2004-02-20 Falk Hueffner <falk@debian.org>
PR target/14201 PR target/14201
......
2004-02-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR c++/12007
* method.c (use_thunk): Always clone function argument tree.
2004-02-20 Mark Mitchell <mark@codesourcery.com> 2004-02-20 Mark Mitchell <mark@codesourcery.com>
PR c++/14199 PR c++/14199
......
...@@ -331,7 +331,7 @@ make_alias_for_thunk (tree function) ...@@ -331,7 +331,7 @@ make_alias_for_thunk (tree function)
void void
use_thunk (tree thunk_fndecl, bool emit_p) use_thunk (tree thunk_fndecl, bool emit_p)
{ {
tree function, alias; tree a, t, function, alias;
tree virtual_offset; tree virtual_offset;
HOST_WIDE_INT fixed_offset, virtual_value; HOST_WIDE_INT fixed_offset, virtual_value;
bool this_adjusting = DECL_THIS_THUNK_P (thunk_fndecl); bool this_adjusting = DECL_THIS_THUNK_P (thunk_fndecl);
...@@ -417,7 +417,20 @@ use_thunk (tree thunk_fndecl, bool emit_p) ...@@ -417,7 +417,20 @@ use_thunk (tree thunk_fndecl, bool emit_p)
/* The back-end expects DECL_INITIAL to contain a BLOCK, so we /* The back-end expects DECL_INITIAL to contain a BLOCK, so we
create one. */ create one. */
DECL_INITIAL (thunk_fndecl) = make_node (BLOCK); DECL_INITIAL (thunk_fndecl) = make_node (BLOCK);
BLOCK_VARS (DECL_INITIAL (thunk_fndecl)) = DECL_ARGUMENTS (thunk_fndecl);
/* Set up cloned argument trees for the thunk. */
t = NULL_TREE;
for (a = DECL_ARGUMENTS (function); a; a = TREE_CHAIN (a))
{
tree x = copy_node (a);
TREE_CHAIN (x) = t;
DECL_CONTEXT (x) = thunk_fndecl;
SET_DECL_RTL (x, NULL_RTX);
t = x;
}
a = nreverse (t);
DECL_ARGUMENTS (thunk_fndecl) = a;
BLOCK_VARS (DECL_INITIAL (thunk_fndecl)) = a;
if (this_adjusting if (this_adjusting
&& targetm.asm_out.can_output_mi_thunk (thunk_fndecl, fixed_offset, && targetm.asm_out.can_output_mi_thunk (thunk_fndecl, fixed_offset,
...@@ -450,24 +463,10 @@ use_thunk (tree thunk_fndecl, bool emit_p) ...@@ -450,24 +463,10 @@ use_thunk (tree thunk_fndecl, bool emit_p)
just makes a call to the real function. Unfortunately, this just makes a call to the real function. Unfortunately, this
doesn't work for varargs. */ doesn't work for varargs. */
tree a, t;
if (varargs_function_p (function)) if (varargs_function_p (function))
error ("generic thunk code fails for method `%#D' which uses `...'", error ("generic thunk code fails for method `%#D' which uses `...'",
function); function);
/* Set up cloned argument trees for the thunk. */
t = NULL_TREE;
for (a = DECL_ARGUMENTS (function); a; a = TREE_CHAIN (a))
{
tree x = copy_node (a);
TREE_CHAIN (x) = t;
DECL_CONTEXT (x) = thunk_fndecl;
SET_DECL_RTL (x, NULL_RTX);
t = x;
}
a = nreverse (t);
DECL_ARGUMENTS (thunk_fndecl) = a;
DECL_RESULT (thunk_fndecl) = NULL_TREE; DECL_RESULT (thunk_fndecl) = NULL_TREE;
start_function (NULL_TREE, thunk_fndecl, NULL_TREE, SF_PRE_PARSED); start_function (NULL_TREE, thunk_fndecl, NULL_TREE, SF_PRE_PARSED);
......
...@@ -2750,7 +2750,10 @@ dbxout_parms (tree parms) ...@@ -2750,7 +2750,10 @@ dbxout_parms (tree parms)
emit_pending_bincls_if_required (); emit_pending_bincls_if_required ();
for (; parms; parms = TREE_CHAIN (parms)) for (; parms; parms = TREE_CHAIN (parms))
if (DECL_NAME (parms) && TREE_TYPE (parms) != error_mark_node) if (DECL_NAME (parms)
&& TREE_TYPE (parms) != error_mark_node
&& DECL_RTL_SET_P (parms)
&& DECL_INCOMING_RTL (parms))
{ {
dbxout_prepare_symbol (parms); dbxout_prepare_symbol (parms);
......
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