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? 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