--- src/libffi-3.2.1/src/x86/ffi.c.orig 2016-07-20 21:24:49.000771900 +0100 +++ src/libffi-3.2.1/src/x86/ffi.c 2016-07-20 21:25:09.918786700 +0100 @@ -65,7 +65,8 @@ if ((ecif->cif->flags == FFI_TYPE_STRUCT || ecif->cif->flags == FFI_TYPE_MS_STRUCT) #ifdef X86_WIN64 - && ((ecif->cif->rtype->size & (1 | 2 | 4 | 8)) == 0) + && (ecif->cif->rtype->size != 1 && ecif->cif->rtype->size != 2 + && ecif->cif->rtype->size != 4 && ecif->cif->rtype->size != 8) #endif ) { @@ -108,7 +109,7 @@ #ifdef X86_WIN64 if (z > FFI_SIZEOF_ARG || ((*p_arg)->type == FFI_TYPE_STRUCT - && (z & (1 | 2 | 4 | 8)) == 0) + && (z != 1 && z != 2 && z != 4 && z != 8)) #if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) #endif @@ -360,7 +361,8 @@ #ifdef X86_WIN64 if (rvalue == NULL && cif->flags == FFI_TYPE_STRUCT - && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0)) + && cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8) { ecif.rvalue = alloca((cif->rtype->size + 0xF) & ~0xF); } @@ -545,7 +547,8 @@ if ((cif->flags == FFI_TYPE_STRUCT || cif->flags == FFI_TYPE_MS_STRUCT) #ifdef X86_WIN64 - && ((cif->rtype->size & (1 | 2 | 4 | 8)) == 0) + && ((cif->rtype->size != 1 && cif->rtype->size != 2 + && cif->rtype->size != 4 && cif->rtype->size != 8)) #endif ) { @@ -608,7 +611,7 @@ #ifdef X86_WIN64 if (z > FFI_SIZEOF_ARG || ((*p_arg)->type == FFI_TYPE_STRUCT - && (z & (1 | 2 | 4 | 8)) == 0) + && (z != 1 && z != 2 && z != 4 && z != 8)) #if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE || ((*p_arg)->type == FFI_TYPE_LONGDOUBLE) #endif