Wireshark mailing list archives

Re: MSVC 2015 failures


From: Guy Harris <guy () alum mit edu>
Date: Fri, 5 Jun 2015 12:22:10 -0700


On Jun 5, 2015, at 3:50 AM, Anders Broman <anders.broman () ericsson com> wrote:
 
in_cksum.c(92): error C2220: warning treated as error - no 'object' file generated
in_cksum.c(92): warning C4311: 'type cast': pointer truncation from 'const guint16 *' to 'unsigned long'

This is trying to do 2-byte operations with word loads/stores/arithmetic instructions, but to do it safely, so that we 
don't do those with unaligned pointers.  It's testing the low-order bit of the pointer.

On ILP32 platforms, such as 32-bit UN*Xes and 32-bit Windows, an int, a long, and a pointer are all 32 bits, so you can 
just cast a pointer to an int or a long.

On LP64 platforms, such as all the 64-bit UN*Xes we support, a long and a pointer are both 64 bits, so you can just 
cast a pointer to a long.

On LLP64 platforms, such as 64-bit Windows, an int and a long are both 32 bits, and a long long and a pointer are both 
64 bits, so you can't just cast a pointer to a long without throwing away bits.  Those bits don't actually *matter* in 
this case, but the compiler still warns.

C99 has an intptr_t type, but C90 doesn't.  MSVC has it at least as far back as Visual Studio .NET 2003:

        https://msdn.microsoft.com/en-us/library/323b6b3k(v=vs.71).aspx

I don't know whether any UN*X platforms we support don't have it; I suspect most if not all of them have adopted it.

Alternatively, GLib 2.18 and later have gintptr, although configure.ac currently only requires 2.16 or later.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe


Current thread: