diff -r e3a773fefddf Modules/_ctypes/libffi_msvc/ffi.c --- a/Modules/_ctypes/libffi_msvc/ffi.c Sat Jul 23 15:17:19 2011 +0200 +++ b/Modules/_ctypes/libffi_msvc/ffi.c Sun Aug 14 13:45:21 2011 -0700 @@ -65,6 +65,15 @@ argp = (char *) ALIGN(argp, sizeof(void *)); z = (*p_arg)->size; + +#ifdef _WIN64 + // MSVC on x64 will always pass arguments larger than 8 bytes by reference + if (z > sizeof(void *)) + { + z = sizeof(void *); + } +#endif + if (z < sizeof(int)) { z = sizeof(int);