Hi,  I've been looking at an issue in mysql compilation which appears
to be due to this patch.

On 10 May 2013 18:27, Martin Jambor <mjam...@suse.cz> wrote:
> Hi,
>
> as we discover targets of previously indirect calls in ipa-inline and
> ipa-cp, we sometimes figure out that the targets are not a function.
> One typical example is when NULL is passed as a function pointer

OK, this part makes sense to me.

> parameter, another is when C++ member-pointer points to a virtual
> function and the overloaded field of the structure which can also hold
> pointers to non-virtual methods contains odd integer constants.

I'm struggling to understand why such a member-pointer call would be
illegal in a well formed program.

Attached is a fragment of code that demonstrates the issue I've been
looking at.  When compiled at -O3 the 047i.inline dump tells me that:

ipa-prop: Discovered direct call to non-function in unsigned int
A::foo(unsigned int (H::*)() const) const/11, making it unreachable.
  not inlinable: unsigned int A::foo(unsigned int (H::*)() const)
const/11 -> void __builtin_unreachable()/12, function body not
available

This behavior appears to be the explicit intent of the original patch,
the call to the member function pointer has been replaced with
__builtin_unreachable, but that looks like a legitimate  call to me.
What am I missing?

Thanks
/Marcus

Attachment: foo.cc
Description: Binary data

Reply via email to