The following code does not generate any warning when compiled with g++ 4.0.x and 4.1.x on a x86_64 platform:
/* #include <cstdio> int f(void); int f(void) { return (long) &std::printf; } */ typedef unsigned long mysize_t; void *mymmap(void *start, mysize_t length, int prot , int flags, int fd, int offset); //typedef unsigned long DWORD; typedef unsigned int DWORD; struct UDA { DWORD UserDirectAddr; DWORD TransAddr; DWORD Bytes; }; void f(UDA *puda); void f(UDA *puda) { puda->UserDirectAddr = (unsigned long) mymmap((void *) puda->TransAddr, puda->Bytes, 0, 0, 0, 0); } When compiled with g++ 3.4.6 on the same platform, the following warning is issued: g++ -c test.cpp test.cpp: In function `void f(UDA*)': test.cpp:30: warning: cast to pointer from integer of different size -- Summary: Cast to pointer from integer of different size [gcc 4.0.x and 4.1.x on x86_64] Product: gcc Version: 4.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: denis dot charland at imi dot cnrc-nrc dot gc dot ca http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28584