sHi,

On Thu, Jun 20, 2013 at 03:47:11PM +0100, Marcus Shawcroft wrote:
> 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?

Hm, the reason why I did this was that I misremembered that each
branch, the one for virtual calls and the one for direct calls.  But
when I checked dumps, I realized it was not so, there is only one call
when the branches join.  I'll fix this promptly.

Thanks for the report,

Martin

Reply via email to