Stelian Pop <stel...@popies.net> writes:

> I did spent a few hours looking but haven't had much luck.
>
> I tried tracing this one:
>> >    6 long i = s.f-&s.b;
> and noticed that the pointers gets casted to 'long' (so they become integers
> and no longer pointers) before the actual substraction is made.
>
> Of course, replacing the 'long' with 'int' (on the incriminated targets,
> where the real size of the pointer is 16 bit, the size of an 'int') makes
> the code compile as a charm.

I took a quick look at a similar case for x86, and the key step seems to
be a call to ptr_difference_const.  It converts the difference of two
ADDR_EXPRs to a constant.

Ian

Reply via email to