diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 9d87f38ea1..386420f26b 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -1254,9 +1254,11 @@ func (s *state) expr(n *Node) *ssa.Value { f := n.Val().U.(*Mpflt) switch n.Type.Size() { case 4: - return s.constFloat32(n.Type, mpgetflt32(f)) + // -0.0 literals need to be treated as if they were 0.0, adding 0.0 here + // accomplishes this while not affecting other values. + return s.constFloat32(n.Type, mpgetflt32(f)+0.0) case 8: - return s.constFloat64(n.Type, mpgetflt(f)) + return s.constFloat64(n.Type, mpgetflt(f)+0.0) default: s.Fatalf("bad float size %d", n.Type.Size()) return nil @@ -1269,16 +1271,18 @@ func (s *state) expr(n *Node) *ssa.Value { case 8: { pt := Types[TFLOAT32] + // -0.0 literals need to be treated as if they were 0.0, adding 0.0 here + // accomplishes this while not affecting other values. return s.newValue2(ssa.OpComplexMake, n.Type, - s.constFloat32(pt, mpgetflt32(r)), - s.constFloat32(pt, mpgetflt32(i))) + s.constFloat32(pt, mpgetflt32(r)+0.0), + s.constFloat32(pt, mpgetflt32(i)+0.0)) } case 16: { pt := Types[TFLOAT64] return s.newValue2(ssa.OpComplexMake, n.Type, - s.constFloat64(pt, mpgetflt(r)), - s.constFloat64(pt, mpgetflt(i))) + s.constFloat64(pt, mpgetflt(r)+0.0), + s.constFloat64(pt, mpgetflt(i)+0.0)) } default: s.Fatalf("bad float size %d", n.Type.Size()) diff --git a/test/run.go b/test/run.go index 1f9b905ea3..de2044704c 100644 --- a/test/run.go +++ b/test/run.go @@ -636,13 +636,7 @@ func (t *test) run() { } case "run": - useTmp = false - switch t.gofile { - case "bug434.go": - // TODO fix this failure - default: - ssaMain = true - } + ssaMain = true out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...) if err != nil { t.err = err