https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874
--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #3) > (In reply to Ian Lance Taylor from comment #2) > > The patch is committed so this bug may be fixed. I haven't tested it on > > Alpha, though. > > The testcase recover.go doesn't fail outright with not-implemented error. > However, tests test11reflect2, test13reflect2 and test14reflect2 currently > fail. The problem with test11reflect2 was due to unhandled FFI_TYPE_VOID case in ffi_closure_osf_inner, fixed by following patch: --cut here- Index: src/alpha/ffi.c =================================================================== --- src/alpha/ffi.c (revision 212882) +++ src/alpha/ffi.c (working copy) @@ -237,6 +237,7 @@ ffi_closure_osf_inner(ffi_closure *closure, void * switch (arg_types[i]->type) { + case FFI_TYPE_VOID: case FFI_TYPE_SINT8: case FFI_TYPE_UINT8: case FFI_TYPE_SINT16: --cut here-- It looks that test13reflect2 and test14reflect2 tests fail on non-split stack targets, since everything works OK with slightly modified testcase: --cut here-- Index: testsuite/go.test/test/recover.go =================================================================== --- testsuite/go.test/test/recover.go (revision 212882) +++ testsuite/go.test/test/recover.go (working copy) @@ -432,7 +432,7 @@ } // enormous receiver, so wrapper splits stack to call M -type T5 [8192]byte +type T5 [2048]byte func (T5) M() { mustRecoverBody(doubleRecover(), recover(), recover(), 13) @@ -459,12 +459,12 @@ // enormous receiver + enormous method frame, so wrapper splits stack to call M, // and then M splits stack to allocate its frame. // recover must look back two frames to find the panic. -type T6 [8192]byte +type T6 [2048]byte var global byte func (T6) M() { - var x [8192]byte + var x [2048]byte x[0] = 1 x[1] = 2 for i := range x { --cut here-- It looks that the later problem points to a generic problem with non split-stack targets.