https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587
--- Comment #13 from rguenther at suse dot de <rguenther at suse dot de> --- On Fri, 24 Oct 2014, mliska at suse dot cz wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587 > > --- Comment #12 from Martin Liška <mliska at suse dot cz> --- > On 10/24/2014 10:44 AM, rguenther at suse dot de wrote: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587 > > > > --- Comment #10 from rguenther at suse dot de <rguenther at suse dot de> --- > > On Thu, 23 Oct 2014, marxin at gcc dot gnu.org wrote: > > > >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587 > >> > >> --- Comment #8 from Martin Liška <marxin at gcc dot gnu.org> --- > >> I added assert to cgraphunit.c (expand_thunk):1547: > >> > >> /* Build call to the function being thunked. */ > >> if (!VOID_TYPE_P (restype)) > >> { > >> if (DECL_BY_REFERENCE (resdecl)) > >> restmp = gimple_fold_indirect_ref (resdecl); > >> else if (!is_gimple_reg_type (restype)) > >> { > >> restmp = resdecl; > >> gcc_assert (TREE_CODE (restmp) == VAR_DECL); > >> add_local_decl (cfun, restmp); > >> BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp; > >> } > >> else > >> restmp = create_tmp_reg (restype, "retval"); > >> } > >> > >> It's triggered quite often, one example of a thunk created by IPA ICF: > > > > Well, the bug is the add_local_decl being called with a RESULT_DECL. > > Thus you should try placing an assert into add_local_decl instead > > (need to move it out-of-line for that). > > You are right, it would be good to place assert to add_local_decl function, > attachment contains suggested patch > that I will regtest. > > Problematic is that one would like to place assert to function.h, but gengtype > does not include tree.h > for gencondmd.c: > > In file included from build/gencondmd.c:5:0: > ../../gcc/function.h: In function ‘void add_local_decl(function*, tree)’: > ../../gcc/function.h:674:27: error: ‘TREE_CODE’ was not declared in this scope > gcc_assert (TREE_CODE (d) == VAR_DECL); > > Is it acceptable to put the implementation to function.c? Yes. Richard.