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 {
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())
......
......@@ -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
}
out, err := runcmd(append([]string{"go", "run", t.goFileName()}, args...)...)
if err != nil {
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