Skip to content

cmd/compile: bad compilation with inlined math functions #23522

@ianlancetaylor

Description

@ianlancetaylor

This test case is miscompiled with devel +9745eed4fd Fri Jan 12 05:25:55 2018. The programs panics when it should not. This passes with Go 1.9 and gccgo.

CC @randall77

package main

import (
	"math"
)

type S struct {
	u int64
	n int32
}

func F1(f float64) *S {
	s := f
	pf := math.Copysign(f, 1)
	u := math.Floor(pf)
	return &S{
		u: int64(math.Copysign(u, s)),
		n: int32(math.Copysign((pf-u)*1e9, s)),
	}
}

func F2(f float64) *S {
	s := f
	f = math.Copysign(f, 1)
	u := math.Floor(f)
	return &S{
		u: int64(math.Copysign(u, s)),
		n: int32(math.Copysign((f-u)*1e9, s)),
	}
}

func main() {
	s1 := F1(-1)
	s2 := F2(-1)
	if *s1 != *s2 {
		println("F1:", s1.u, s1.n)
		println("F2:", s2.u, s2.n)
		panic("different")
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.release-blocker

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions