On Wed, Nov 19, 2014 at 5:35 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
> On Wed, Nov 19, 2014 at 5:23 PM, Andrew Pinski <pins...@gmail.com> wrote:
>> On Wed, Nov 19, 2014 at 5:11 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Wed, Nov 19, 2014 at 4:54 PM, Andrew Pinski <pins...@gmail.com> wrote:
>>>> Hi,
>>>>   For ILP32 on AARCH64, we have ptr_mode != Pmode (we have ptr_mode
>>>> being SImode while Pmode is DImode and POINTER_SIZE is 32).  This
>>>> breaks ipa-polymorphic-call assumption that Pmode is the correct mode
>>>> for pointers.  Right now before this patch we get many testcase
>>>> failures in the C++ testsuite due to this.  Some of the tests fail due
>>>> to the wrong devirtualization happening (using the base class rather
>>>> the current class).
>>>>
>>>> This patch fixes the issue by using POINTER_SIZE in place of
>>>> GET_MODE_BITSIZE (Pmode) all over the file.
>>>>
>>>> OK?  Bootstrapped and tested on x86_64 and cross built and tested for
>>>> aarch64-elf with no regressions.
>>>>
>>>> Thanks,
>>>> Andrew Pinski
>>>>
>>>> ChangeLog:
>>>> ipa/63981
>>>> * ipa-polymorphic-call.c (possible_placement_new):
>>>> Use POINTER_SIZE instead of GET_MODE_BITSIZE (Pmode).
>>>> (ipa_polymorphic_call_context::restrict_to_inner_class): Likewise.
>>>> (extr_type_from_vtbl_ptr_store): Likewise.
>>>
>>> Does Pmode affect class layout?
>>
>> No only POINTER_SIZE.  ILP32 is one of the few ABIs where Pmode !=
>> ptr_mode (sizeof(ptr_mode) == POINTER_SIZE always).
>>
>> x32 has a similar issue with -maddress-mode=long but the default for
>> x32 is -maddress-mode=short.
>
> Pmode shouldn't change class layout, which is determined by ptr_mode.
> You can mix  object files compiled by -maddress-mode=long with
> -maddress-mode=short.  Do those tests fail with -maddress-mode=long
> under x32?


I suspect they do fail with -maddress-mode=long but I did not try as I
don't have x32 testing setup right now.

Thanks,
Andrew

>
> --
> H.J.

Reply via email to