On Fri, 2 Mar 2018, Jakub Jelinek wrote: > On Fri, Mar 02, 2018 at 08:58:34AM +0100, Richard Biener wrote: > > 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? > > No, expr.c doesn't test anything like that (and adding it might regress > other things, TREE_NO_WARNING is way too overloaded now). > > I was also considering an alternative to add something like: > struct cgraph_node *node = cgraph_node::get (current_function_decl); > and add > && (!node || !node->thunk.thunk_p) > to the two conditions for error/warning attribute: > if (fndecl > && (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)))); > if (fndecl > && (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)))); > I've tried to come up with a testcase where generic thunks are used for C++, > but failed to do something that would trigger an invalid warning or error.
You probably need a virtual return thunk as otherwise we expand them directly to asm? > Would you prefer just being silent in all thunks? Yes, I think all warnings from thunks are ultimately going to be bogus... > That said, wonder about thunks (the non-ICF ones) from false-negative > diagnostic point as well, if I have some method with error/warning attribute > and call a thunk instead, wonder if we get the diagnostic or not, thunks > likely don't have the attribute copied over to them. True... I guess we should not warn from thunks but instead move those attributes to the thunks so see if those get called in the end. Richard.