Commit adba6c4f authored by Todd Neal's avatar Todd Neal

[dev.ssa] cmd/compile/internal/ssa: treat -0.0 literal as 0.0

This matches existing behavior, see issue #2196

Change-Id: Ifa9359b7c821115389f337a57de355c5ec23be8f
Reviewed-on: https://go-review.googlesource.com/14261Reviewed-by: default avatarKeith Randall <khr@golang.org>
parent 2a295765
...@@ -1254,9 +1254,11 @@ func (s *state) expr(n *Node) *ssa.Value { ...@@ -1254,9 +1254,11 @@ func (s *state) expr(n *Node) *ssa.Value {
f := n.Val().U.(*Mpflt) f := n.Val().U.(*Mpflt)
switch n.Type.Size() { switch n.Type.Size() {
case 4: 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: case 8:
return s.constFloat64(n.Type, mpgetflt(f)) return s.constFloat64(n.Type, mpgetflt(f)+0.0)
default: default:
s.Fatalf("bad float size %d", n.Type.Size()) s.Fatalf("bad float size %d", n.Type.Size())
return nil return nil
...@@ -1269,16 +1271,18 @@ func (s *state) expr(n *Node) *ssa.Value { ...@@ -1269,16 +1271,18 @@ func (s *state) expr(n *Node) *ssa.Value {
case 8: case 8:
{ {
pt := Types[TFLOAT32] 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, return s.newValue2(ssa.OpComplexMake, n.Type,
s.constFloat32(pt, mpgetflt32(r)), s.constFloat32(pt, mpgetflt32(r)+0.0),
s.constFloat32(pt, mpgetflt32(i))) s.constFloat32(pt, mpgetflt32(i)+0.0))
} }
case 16: case 16:
{ {
pt := Types[TFLOAT64] pt := Types[TFLOAT64]
return s.newValue2(ssa.OpComplexMake, n.Type, return s.newValue2(ssa.OpComplexMake, n.Type,
s.constFloat64(pt, mpgetflt(r)), s.constFloat64(pt, mpgetflt(r)+0.0),
s.constFloat64(pt, mpgetflt(i))) s.constFloat64(pt, mpgetflt(i)+0.0))
} }
default: default:
s.Fatalf("bad float size %d", n.Type.Size()) s.Fatalf("bad float size %d", n.Type.Size())
......
...@@ -636,13 +636,7 @@ func (t *test) run() { ...@@ -636,13 +636,7 @@ func (t *test) run() {
} }
case "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...)...) out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
if err != nil { if err != nil {
t.err = err t.err = err
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment