[fpc-devel] Warning: Conversion between ordinals and pointers is	not portable
    Jonas Maebe 
    jonas.maebe at elis.ugent.be
       
    Thu Dec  6 13:06:14 CET 2012
    
    
  
On 02 Dec 2012, at 22:26, Martin wrote:
> If compiled, with PtrUint (as is below)
>
> Free Pascal Compiler version 2.6.0 [2012/01/04] for i386
> Compiling C:\Users\martin\AppData\Local\Temp\project1.lpr
> project1.lpr(11,28) Warning: Variable "p" does not seem to be  
> initialized
> project1.lpr(11,11) Warning: Conversion between ordinals and  
> pointers is not portable
> project1.lpr(9,5) Note: Local variable "darr" is assigned but never  
> used
> Linking C:\Users\martin\AppData\Local\Temp\project1.exe
That's because cardinal-cardinal results in an int64, because of a.o. http://bugs.freepascal.org/view.php?id=8321
> If replace the type
> type IPointer = PtrInt;
>
> Free Pascal Compiler version 2.6.0 [2012/01/04] for i386
> Compiling C:\Users\martin\AppData\Local\Temp\project1.lpr
> project1.lpr(11,28) Warning: Variable "p" does not seem to be  
> initialized
> project1.lpr(11,11) Hint: Conversion between ordinals and pointers  
> is not portable
> project1.lpr(9,5) Note: Local variable "darr" is assigned but never  
> used
> Linking C:\Users\martin\AppData\Local\Temp\project1.exe
>
> So actually the message is just downgraded from Warning to Hint.
Yes, that's by design. The compiler has no special knowledge about the  
ptrint or ptruint types. It is almost impossible to fix all hints for  
non-trivial programs, and they only exist to help find possibly  
suspicious locations in code (and typecasting an integer into a  
pointer is such an expression). You can always disable a particular  
hint with -vqXXX if you are not interested in it.
> and the full command line as issued by Lazarus:
> fpc.exe  -MObjFPC -Scghi -O1 -gw2 -godwarfsets -gl -gh -vewnhi -Filib 
> \i386-win32  -FUlib\i386-win32\ -l C:\Users\martin\AppData\Local\Temp 
> \project1.lpr"
>
> If I remove the " - PointerSize2" it is always a hint. But the  
> location (11,11) doe not point to thin, it points to the uppercase  
> "P" of this most outer "Pointer()"typecast
The typecast of the integer expression to a pointer is what triggers  
the warning/hint.
Jonas
    
    
More information about the fpc-devel
mailing list