This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: malloc attributes and realloc

Bruce Korb <> writes:

> Andreas Schwab wrote:
>> This is by no means theoretical only.  Think of a segmented
>> architecture, where loading an invalid value into a segment register
>> generates a trap.
> On such an architecture, is it necessary to load that segment register
> in order to compare a pointer value?

Not necessarily, but the point is that the standard does not forbid

> Does that mean that in order to do a pointer comparison you must
> first cast with (uintptr_t) or similar?

You can always compare pointers to valid objects, at least with == and

> Even on an segmented architecture it needs to be possible to compare
> pointers.  If it were not necessary, why would realloc() docs talk about
> "(possibly moved) block".

The standard actually says "(which may have the same value as a
pointer to the old object)".  You can test for a subset of the "same
value" condition by comparing the representation, and on an
implementation where the indeterminate value of a pointer is never a
trap representation you can even use == or !=, but that is not
strictly compliant.

> [[otherwise, your friendly compiler may delete
> code that references your outdated but bitwise identical pointers]].

Such pointers with identical representations would be
indistinguishable from each other, but the only way to find that out
is to compare with memcmp.


Andreas Schwab, SuSE Labs,
SuSE Linux AG, MaxfeldstraÃe 5, 90409 NÃrnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]