mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
0fed9ec7f3
commit
7a3e01c408
|
|
@ -1,3 +1,9 @@
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
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)
|
||||||
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)
|
||||||
/* 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)
|
||||||
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)
|
||||||
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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue