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

--- Comment #16 from Andreas Krebbel <krebbel at gcc dot gnu.org> 2011-10-11 
11:41:12 UTC ---
(In reply to comment #15)
> Andreas, can I have your feedback about this? Is it safe or not to compare 
> s390
> pointers with memcmp?

On s390 with 31 bit addressing the uppermost bit indicates to the hardware that
31 bit addressing is used instead of just 24 bit. This indeed is a problem when
creating pointers from integers, what is anyway not backed by the C standard,
or when using __builtin_return_address without masking the bits.

However GCC does *not* mask the bits when comparing two pointer values.  So
(void*)0x00000000 == (void*)0x80000000 does *not* evaluate to true on s390. To
my understanding using a memcmp would not break things for s390. If it is
broken with memcmp it was broken before as well.

I don't know how this works with ARM. I think they put their THUMB markers into
the lower order bits of an address and perhaps we should better check how they
implement a pointer compare.

Reply via email to