mirror of
https://github.com/golang/go
synced 2024-11-23 22:20:02 -07:00
Revert "reflect: when Converting between float32s, don't lose signal NaNs"
This reverts commit 7485050c0f
.
Reason for revert: Breaking some builders (387, mips, mips64)
Change-Id: I33e5125b7a9a96b55bc5e71880fca4ee30d226a7
Reviewed-on: https://go-review.googlesource.com/c/go/+/220695
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
0d4fa27fd7
commit
0d6b317ee6
@ -4163,17 +4163,6 @@ func TestConvert(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConvertNaNs(t *testing.T) {
|
|
||||||
const snan uint32 = 0x7f800001
|
|
||||||
type myFloat32 float32
|
|
||||||
x := V(myFloat32(math.Float32frombits(snan)))
|
|
||||||
y := x.Convert(TypeOf(float32(0)))
|
|
||||||
z := y.Interface().(float32)
|
|
||||||
if got := math.Float32bits(z); got != snan {
|
|
||||||
t.Errorf("signaling nan conversion got %x, want %x", got, snan)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type ComparableStruct struct {
|
type ComparableStruct struct {
|
||||||
X int
|
X int
|
||||||
}
|
}
|
||||||
|
@ -2541,14 +2541,6 @@ func makeFloat(f flag, v float64, t Type) Value {
|
|||||||
return Value{typ, ptr, f | flagIndir | flag(typ.Kind())}
|
return Value{typ, ptr, f | flagIndir | flag(typ.Kind())}
|
||||||
}
|
}
|
||||||
|
|
||||||
// makeFloat returns a Value of type t equal to v, where t is a float32 type.
|
|
||||||
func makeFloat32(f flag, v float32, t Type) Value {
|
|
||||||
typ := t.common()
|
|
||||||
ptr := unsafe_New(typ)
|
|
||||||
*(*float32)(ptr) = v
|
|
||||||
return Value{typ, ptr, f | flagIndir | flag(typ.Kind())}
|
|
||||||
}
|
|
||||||
|
|
||||||
// makeComplex returns a Value of type t equal to v (possibly truncated to complex64),
|
// makeComplex returns a Value of type t equal to v (possibly truncated to complex64),
|
||||||
// where t is a complex64 or complex128 type.
|
// where t is a complex64 or complex128 type.
|
||||||
func makeComplex(f flag, v complex128, t Type) Value {
|
func makeComplex(f flag, v complex128, t Type) Value {
|
||||||
@ -2621,12 +2613,6 @@ func cvtUintFloat(v Value, t Type) Value {
|
|||||||
|
|
||||||
// convertOp: floatXX -> floatXX
|
// convertOp: floatXX -> floatXX
|
||||||
func cvtFloat(v Value, t Type) Value {
|
func cvtFloat(v Value, t Type) Value {
|
||||||
if v.Type().Kind() == Float32 && t.Kind() == Float32 {
|
|
||||||
// Don't do any conversion if both types have underlying type float32.
|
|
||||||
// This avoids converting to float64 and back, which will
|
|
||||||
// convert a signaling NaN to a quiet NaN. See issue 36400.
|
|
||||||
return makeFloat32(v.flag.ro(), *(*float32)(v.ptr), t)
|
|
||||||
}
|
|
||||||
return makeFloat(v.flag.ro(), v.Float(), t)
|
return makeFloat(v.flag.ro(), v.Float(), t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user