On Fri, 2 Mar 2018, Jakub Jelinek wrote: > Hi! > > On Fri, Mar 02, 2018 at 10:54:36AM +0100, Jakub Jelinek wrote: > > On Fri, Mar 02, 2018 at 09:31:16AM +0100, Richard Biener wrote: > > > On Fri, 2 Mar 2018, Jakub Jelinek wrote: > > > > > > > On Fri, Mar 02, 2018 at 09:15:07AM +0100, Richard Biener wrote: > > > > > You probably need a virtual return thunk as otherwise we expand them > > > > > directly to asm? > > > > > > > > I was trying x86_64 -m32 -fpic regparm (3) method with thunks so that > > > > the asm isn't emitted. But the thunk was still using call to .LTHUNKN > > > > rather than the actual method FUNCTION_DECL. Perhaps on targets without > > > > proper alias support... > > > > > > > > > > Would you prefer just being silent in all thunks? > > > > > > > > > > Yes, I think all warnings from thunks are ultimately going to be > > > > > bogus... > > > > > > > > Ok, I'll change the patch. > > > > Unfortunately it doesn't work, see patch below. > > But this works, ok if it passes bootstrap/regtest?
Ok. Thanks, Richard. > 2018-03-02 Jakub Jelinek <ja...@redhat.com> > Richard Biener <rguent...@suse.de> > > PR ipa/84628 > * expr.c (expand_expr_real_1) <case CALL_EXPR>: Don't emit diagnostics > for error or warning attributes if CALL_FROM_THUNK_P is set. > Formatting fixes. > > * gcc.dg/pr84628.c: New test. > > --- gcc/expr.c.jj 2018-02-09 19:11:29.094068531 +0100 > +++ gcc/expr.c 2018-03-02 11:12:19.299665926 +0100 > @@ -10963,18 +10963,30 @@ expand_expr_real_1 (tree exp, rtx target > tree fndecl = get_callee_fndecl (exp), attr; > > if (fndecl > + /* Don't diagnose the error attribute in thunks, those are > + artificially created. */ > + && !CALL_FROM_THUNK_P (exp) > && (attr = lookup_attribute ("error", > DECL_ATTRIBUTES (fndecl))) != NULL) > - error ("%Kcall to %qs declared with attribute error: %s", > - exp, identifier_to_locale (lang_hooks.decl_printable_name > (fndecl, 1)), > - TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); > + { > + const char *ident = lang_hooks.decl_printable_name (fndecl, 1); > + error ("%Kcall to %qs declared with attribute error: %s", exp, > + identifier_to_locale (ident), > + TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); > + } > if (fndecl > + /* Don't diagnose the warning attribute in thunks, those are > + artificially created. */ > + && !CALL_FROM_THUNK_P (exp) > && (attr = lookup_attribute ("warning", > DECL_ATTRIBUTES (fndecl))) != NULL) > - warning_at (tree_nonartificial_location (exp), > - 0, "%Kcall to %qs declared with attribute warning: %s", > - exp, identifier_to_locale (lang_hooks.decl_printable_name > (fndecl, 1)), > - TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); > + { > + const char *ident = lang_hooks.decl_printable_name (fndecl, 1); > + warning_at (tree_nonartificial_location (exp), 0, > + "%Kcall to %qs declared with attribute warning: %s", > + exp, identifier_to_locale (ident), > + TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr)))); > + } > > /* Check for a built-in function. */ > if (fndecl && DECL_BUILT_IN (fndecl)) > --- gcc/testsuite/gcc.dg/pr84628.c.jj 2018-03-02 10:24:08.975815667 +0100 > +++ gcc/testsuite/gcc.dg/pr84628.c 2018-03-02 10:24:08.975815667 +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)