Hello! Attached patch fixes libgo reflect test failure with libffi closures. The gccgo compiler started to use FFI closures recently; the compiler passes ffi_type_void for structures with zero members.
ffi_call form src/alpha/ffi.c allows FFI_TYPE_VOID arguments in non-debug mode through the default: case, but ffi_closure_osf_inner aborts with this type of argument. The patch changes the default case in ffi_closure_osf_inner from abort to FFI_ASSERT, an this way synchronizes argument handling in both cases. 2014-07-21 Uros Bizjak <ubiz...@gmail.com> * src/alpha/ffi.c: Do not include stdlib.h. (ffi_closure_osf_inner) <default>: Use FFI_ASSERT instead of abort. Patch was tested with libffi testsuite on alphaev6-linux-gnu. Additionally, the patch fixed reflect test from the libgo testsuite and go.test/test/recover.go test from the gcc testsuite. Uros.
Index: src/alpha/ffi.c =================================================================== --- src/alpha/ffi.c (revision 212882) +++ src/alpha/ffi.c (working copy) @@ -27,7 +27,6 @@ #include <ffi.h> #include <ffi_common.h> -#include <stdlib.h> /* Force FFI_TYPE_LONGDOUBLE to be different than FFI_TYPE_DOUBLE; all further uses in this file will refer to the 128-bit type. */ @@ -273,7 +272,7 @@ ffi_closure_osf_inner(ffi_closure *closure, void * break; default: - abort (); + FFI_ASSERT (0); } argn += ALIGN(size, FFI_SIZEOF_ARG) / FFI_SIZEOF_ARG;