http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59905

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Created attachment 31977
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31977&action=edit
patch

I am testing the following.  The middle-end now properly calls a function via
the ABI as specified by the function type used for the indirect call and the
inliner refrains from inlining function with "too much" mismatch.  If that
doesn't
end up working we have to fix that (I positively believe it does work).

Btw, a workaround for you is to simply go through a temporary:

#define bar_get_x \
  ({ bar_get_x_func *f = (bar_get_x_func*) foo_get_x; f; })

that way the frontend doesn't detect the mismatch and thus simply emits
an indirect call (later optimized to a direct one).

Reply via email to