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.

Would you prefer just being silent in all thunks?

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.

        Jakub

Reply via email to