On Fri, 2 Mar 2018, Jakub Jelinek wrote: > Hi! > > If we need to use thunks for ICF to functions with warning or error > attribute, their expansion will warn or error. This patch just punts > in those cases instead. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
Looks ok but I wonder if marking the call in the thunk with no-warning would work as well? Richard. > 2018-03-02 Jakub Jelinek <ja...@redhat.com> > > PR ipa/84628 > * ipa-icf.c (sem_function::merge): Don't create wrappers for > functions with warning or error attributes. > > * gcc.dg/pr84628.c: New test. > > --- gcc/ipa-icf.c.jj 2018-01-04 12:37:25.365487352 +0100 > +++ gcc/ipa-icf.c 2018-03-01 11:48:54.023107823 +0100 > @@ -1213,6 +1213,15 @@ sem_function::merge (sem_item *alias_ite > if (dump_file) > fprintf (dump_file, "Wrappers are not created for noinline.\n"); > } > + /* Calls in the thunks would warn or error if we create a wrapper > + for functions with warning or error attribute. */ > + else if (lookup_attribute ("warning", DECL_ATTRIBUTES (original->decl)) > + || lookup_attribute ("error", DECL_ATTRIBUTES (original->decl))) > + { > + if (dump_file) > + fprintf (dump_file, "Wrappers are not created for error/warning " > + "attribute.\n"); > + } > else > create_wrapper = true; > > --- gcc/testsuite/gcc.dg/pr84628.c.jj 2018-03-01 11:30:39.121021498 +0100 > +++ gcc/testsuite/gcc.dg/pr84628.c 2018-03-01 11:28:41.383127588 +0100 > @@ -0,0 +1,8 @@ > +/* PR ipa/84628 */ > +/* { dg-do compile } */ > +/* { dg-options "-O2" } */ > + > +int f0 (void); > +__attribute__((error ("err"))) void f1 (void) { f0 (); f0 (); } > +__attribute__((error ("err"))) void f2 (void) { f0 (); f0 (); } > +/* { dg-bogus "declared with attribute error" "" { target *-*-* } 0 } */ > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)