------- Comment #12 from ebotcazou at gcc dot gnu dot org  2005-10-11 14:41 
-------
> This certainly is a bug in the back-end, not a bug in the default
> location of the v-bit.  You shouldn't need to break the C++ ABI on SPARC
> to fix this bug.

Right, I was confused, I thought __pfn was dereferenced itself.

> However, I'm not sure why you're seeing a 4-byte load from an unaligned
> address.

Because p is a pointer to Class and Class has alignment 1.  I guess the first
branch of the expression works when Class contains a pointer to the vtable,
hence has alignment 4.

> One possibility is that in rtx_addr_can_trap_p:
> 
>     case PLUS:
>       /* An address is assumed not to trap if it is an address that
> can't
>          trap plus a constant integer or it is the pic register plus a
> 
>          constant.  */
>       return ! ((! rtx_addr_can_trap_p (XEXP (x, 0))
>                  && GET_CODE (XEXP (x, 1)) == CONST_INT)
>                 || (XEXP (x, 0) == pic_offset_table_rtx
>                     && CONSTANT_P (XEXP (x, 1))));
> 
> we should consider the address as unsafe if the CONST_INT is not a
> multiple of the size of the mode, on a STRICT_ALIGNMENT target.

Yes, but that's not enough, as MEM_NO_TRAP_P might come into play.


-- 


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

Reply via email to