On Tue, Aug 21, 2012 at 1:27 PM, Martin Jambor <mjam...@suse.cz> wrote: > On Wed, Aug 15, 2012 at 05:21:04PM +0200, Martin Jambor wrote: >> Hi, >> >> On Fri, Aug 10, 2012 at 04:57:41PM +0200, Eric Botcazou wrote: >> > > - ada/gcc-interface/utils.c:rest_of_subprog_body_compilation calls >> > > dump_function which in turns calls dump_function_to_file which calls >> > > push_cfun. But Ada front end has its idea of the >> > > current_function_decl and there is no cfun which is an inconsistency >> > > which makes push_cfun assert fail. I "solved" it by temporarily >> > > setting current_function_decl to NULL_TREE. It's just dumping and I >> > > thought that dump_function should be considered middle-end and thus >> > > middle-end invariants should apply. >> > >> > If you think that calling dump_function from >> > rest_of_subprog_body_compilation >> > is a layering violation, I don't have a problem with replacing it with a >> > more >> > "manual" scheme like the one in c-family/c-gimplify.c:c_genericize, >> > provided >> > that this yields roughly the same output. >> >> Richi suggested on IRC that I remove the push/pop_cfun calls from >> dump_function_to_file. The only problem seems to be >> dump_histograms_for_stmt > > Yesterday I actually tried and it is not the only problem. Another > one is dump_function_to_file->dump_bb->maybe_hot_bb_p which uses cfun > to read profile_status. There may be others, this one just blew up > first when I set cfun to NULL. And in future someone is quite likely > to need cfun to dump something new too. > > At the same time, re-implementing dumping > c-family/c-gimplify.c:c_genericize when dump_function suffices seems > ugly to me. > > So I am going to declare dump_function a front-end interface and use > set_cfun in my original patch in dump_function_to_file like we do in > other such functions. > > I hope that will be OK. Thanks,
Setting cfun has side-effects of switching target stuff which might have code-generation side-effects because of implementation issues we have with target/optimize attributes. So I don't think cfun should be changed just for dumping. Can you instead just set current_function_decl and access struct function via DECL_STRUCT_FUNCTION in the dumpers then? After all, it it is a front-end interface, the frontend way of saying "this is the current function" is to set current_function_decl, not the middle-end cfun. Richard. > Martin > > PS: Each of various alternatives proposed in this thread had someone > who opposed it. If there is a consensus that some of them should be > implemented anyway (like global value profiling hash), I am willing to > do that, I just do not want to end up bickering about the result.