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.