runtime, testing/quick: libffi doesn't handle complex on Alpha.
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 1 Mar 2013 19:26:43 +0000 (19:26 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 1 Mar 2013 19:26:43 +0000 (19:26 +0000)
From Uros Bizjak.

From-SVN: r196389

libgo/go/testing/quick/quick_test.go
libgo/runtime/go-reflect-call.c

index a6cf0dc3968b4cec9f865e65f639038412223172..a178ec28e6902dce2b2a9b315df833da41cb4a3c 100644 (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)
index 06edae45026d9363d428412715db019086afd6dc..a66f92868f87fa367b9cfe9c30b8d9f94875e935 100644 (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: