From patchwork Fri Feb 22 10:03:12 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: PR target/52555: attribute optimize is overriding command line options Date: Fri, 22 Feb 2013 00:03:12 -0000 From: Jakub Jelinek X-Patchwork-Id: 222497 Message-Id: <20130222100311.GJ1215@tucnak.zalov.cz> To: Steve Ellcey , Aldy Hernandez Cc: gcc-patches , "rdsandiford@googlemail.com" On Thu, Feb 21, 2013 at 11:02:56PM +0000, Steve Ellcey wrote: > Have you gotten any reports of problems with this patch? It seems to be sending cc1 into an infinite > loop during the GCC testsuite for me. I am testing the mips-mti-linux-gnu target and tests like > gcc.target/mips/call-saved-1.c are causing cc1 to suck up all my memory and swap space before the > test times out. > > I will keep digging and see if I can figure out what is going on but I wanted to see if anyone else has > reported this problem. I think this should fix this (but totally untested except for call-saved-1.c, and it doesn't make any sense to test on non-mips). The problem I believe is that Aldy has changed init_optabs and insn-opinit.c to use this_fn_optabs instead of this_target_optabs, but it is only set in invoke_set_current_function_hook. During save_target_globals we want to init this_target_optabs, so we need to temporarily switch this_fn_optabs to make that happen. 2013-02-22 Jakub Jelinek PR target/52555 * target-globals.c (save_target_globals): For init_reg_sets and target_reinit remporarily set this_fn_optabs to this_target_optabs. Jakub --- gcc/target-globals.c.jj 2013-02-19 07:40:03.000000000 +0100 +++ gcc/target-globals.c 2013-02-22 10:55:36.725435859 +0100 @@ -67,6 +67,7 @@ struct target_globals * save_target_globals (void) { struct target_globals *g; + struct target_optabs *saved_this_fn_optabs = this_fn_optabs; g = ggc_alloc_target_globals (); g->flag_state = XCNEW (struct target_flag_state); @@ -86,8 +87,10 @@ save_target_globals (void) g->bb_reorder = XCNEW (struct target_bb_reorder); g->lower_subreg = XCNEW (struct target_lower_subreg); restore_target_globals (g); + this_fn_optabs = this_target_optabs; init_reg_sets (); target_reinit (); + this_fn_optabs = saved_this_fn_optabs; return g; }