On Wed, Jun 1, 2011 at 5:36 PM, Michael Matz <[email protected]> wrote:
> Hi,
>
> I noticed this a while ago while working on early merging of decls. When
> we build thunk decls ourself we give RESULT_DECL of it integer_type, even
> when the thunk decl itself says something else. (In particular thunks can
> very well return void or a pointer type). This fixes that glitch.
>
> Regstrapping in progress (on top the wpa[2/n] patch) on x86_64-linux.
> Okay for trunk?
Ok.
Thanks,
Richard.
>
> Ciao,
> Michael.
> ---------------------------------
> * cgraphunit.c (assemble_thunk): Use correct return type.
>
> Index: cgraphunit.c
> ===================================================================
> *** cgraphunit.c (revision 174523)
> --- cgraphunit.c (working copy)
> *************** assemble_thunk (struct cgraph_node *node
> *** 1412,1421 ****
> {
> const char *fnname;
> tree fn_block;
>
> DECL_RESULT (thunk_fndecl)
> ! = build_decl (DECL_SOURCE_LOCATION (thunk_fndecl),
> ! RESULT_DECL, 0, integer_type_node);
> fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (thunk_fndecl));
>
> /* The back end expects DECL_INITIAL to contain a BLOCK, so we
> --- 1412,1422 ----
> {
> const char *fnname;
> tree fn_block;
> + tree restype = TREE_TYPE (TREE_TYPE (thunk_fndecl));
>
> DECL_RESULT (thunk_fndecl)
> ! = build_decl (DECL_SOURCE_LOCATION (thunk_fndecl),
> ! RESULT_DECL, 0, restype);
> fnname = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (thunk_fndecl));
>
> /* The back end expects DECL_INITIAL to contain a BLOCK, so we
>