This is because the system Linux 64-bit pointer type occupies 8 bytes, and an int 4 bytes, so there will loses precision (conversion accuracy is lost).
May be first converted to long int * type, long type can be converted implicitly to an int type, as follows:
int FUNC () { int * P; P = // Assignment return ( Long) P;}
This will not compile reported mistake.