[fpc-devel] Warning: Conversion between ordinals and pointers is not portable

Martin lazarus at mfriebe.de
Thu Dec 6 14:27:46 CET 2012


On 06/12/2012 13:16, Jonas Maebe wrote:
>
> On 06 Dec 2012, at 14:03, Martin wrote:
>
>> Yet what I do not understand, is why I get that message as warning 
>> (as opposed to a hint). If I understand it right (I have not tested, 
>> maybe it gives a warning on 64 bit target too, if so ignore the 
>> rest), and I compile for  a 64bit target, then it downgrades to a 
>> hint again?
>
> Yes. If you typecast an integer to a pointer and both have the same 
> size, you get a hint. If they have a different size, you get a warning.
>
>> The only difference is, that in the above example, if compiled for a 
>> 32 bit system, I already may have broken code. But then what it 
>> actually means is that I should get warning about  a truncating the 
>> value.
>>
>>  b := byte(a);
>> Gives no warning at all.
>
> That's because truncating integers cannot result in invalid addresses. 
> The warning was added to help people moving from 32 bit to 64 bit 
> systems and using longint typecasts in their programs to convert 
> between addresses and integers. There are very few cases whereby 
> discarding the upper 32 bit of a pointer is intended or results in 
> valid code.
>

Ok, thanks.

It was only that I was working on 3cd party code, with many pointer 
casts. And some did warn, some not (add to that that the IDE did hide 
the hints. And I couldn't work out why I only got some warnings, and not 
others.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20121206/35c40177/attachment.html>


More information about the fpc-devel mailing list