aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/go/constant/value.go4
-rw-r--r--test/fixedbugs/issue43908.go21
2 files changed, 23 insertions, 2 deletions
diff --git a/src/go/constant/value.go b/src/go/constant/value.go
index 223c363d9b..2ed6115d1b 100644
--- a/src/go/constant/value.go
+++ b/src/go/constant/value.go
@@ -871,9 +871,9 @@ func ToInt(x Value) Value {
func ToFloat(x Value) Value {
switch x := x.(type) {
case int64Val:
- return i64tof(x)
+ return i64tor(x)
case intVal:
- return itof(x)
+ return itor(x)
case ratVal, floatVal:
return x
case complexVal:
diff --git a/test/fixedbugs/issue43908.go b/test/fixedbugs/issue43908.go
new file mode 100644
index 0000000000..47709eb191
--- /dev/null
+++ b/test/fixedbugs/issue43908.go
@@ -0,0 +1,21 @@
+// run
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify exact constant evaluation independent of
+// (mathematically equivalent) expression form.
+
+package main
+
+import "fmt"
+
+const ulp1 = imag(1i + 2i / 3 - 5i / 3)
+const ulp2 = imag(1i + complex(0, 2) / 3 - 5i / 3)
+
+func main() {
+ if ulp1 != ulp2 {
+ panic(fmt.Sprintf("%g != %g\n", ulp1, ulp2))
+ }
+}