runtime, testing/quick: libffi doesn't handle complex on Alpha.

From Uros Bizjak.

From-SVN: r196389
This commit is contained in:
Ian Lance Taylor 2013-03-01 19:26:43 +00:00
parent 40bf31ed08
commit 73e0b984b3
2 changed files with 16 additions and 3 deletions

View File

@ -7,6 +7,7 @@ package quick
import (
"math/rand"
"reflect"
"runtime"
"testing"
)
@ -72,8 +73,10 @@ func TestCheckEqual(t *testing.T) {
reportError("fBool", CheckEqual(fBool, fBool, nil), t)
reportError("fFloat32", CheckEqual(fFloat32, fFloat32, nil), t)
reportError("fFloat64", CheckEqual(fFloat64, fFloat64, nil), t)
reportError("fComplex64", CheckEqual(fComplex64, fComplex64, nil), t)
reportError("fComplex128", CheckEqual(fComplex128, fComplex128, nil), t)
if runtime.GOARCH != "alpha" {
reportError("fComplex64", CheckEqual(fComplex64, fComplex64, nil), t)
reportError("fComplex128", CheckEqual(fComplex128, fComplex128, nil), t)
}
reportError("fInt16", CheckEqual(fInt16, fInt16, nil), t)
reportError("fInt32", CheckEqual(fInt32, fInt32, nil), t)
reportError("fInt64", CheckEqual(fInt64, fInt64, nil), t)

View File

@ -30,7 +30,7 @@ static ffi_type *go_struct_to_ffi (const struct __go_struct_type *)
static ffi_type *go_string_to_ffi (void) __attribute__ ((no_split_stack));
static ffi_type *go_interface_to_ffi (void) __attribute__ ((no_split_stack));
static ffi_type *go_complex_to_ffi (ffi_type *)
__attribute__ ((no_split_stack));
__attribute__ ((no_split_stack, unused));
static ffi_type *go_type_to_ffi (const struct __go_type_descriptor *)
__attribute__ ((no_split_stack));
static ffi_type *go_func_return_ffi (const struct __go_func_type *)
@ -185,13 +185,23 @@ go_type_to_ffi (const struct __go_type_descriptor *descriptor)
return &ffi_type_double;
abort ();
case GO_COMPLEX64:
#ifdef __alpha__
runtime_throw("the libffi library does not support Complex64 type with "
"reflect.Call or runtime.SetFinalizer");
#else
if (sizeof (float) == 4)
return go_complex_to_ffi (&ffi_type_float);
abort ();
#endif
case GO_COMPLEX128:
#ifdef __alpha__
runtime_throw("the libffi library does not support Complex128 type with "
"reflect.Call or runtime.SetFinalizer");
#else
if (sizeof (double) == 8)
return go_complex_to_ffi (&ffi_type_double);
abort ();
#endif
case GO_INT16:
return &ffi_type_sint16;
case GO_INT32: