Go1.5严重Bug,Go粉们慎用!

自己测试一下会发生什么?

if []byte("aaa")[0] == []byte("ccc")[0] {
    fmt.Println([]byte("aaa")[0])
    fmt.Println([]byte("ccc")[0])
    fmt.Println("ok")
}

issues:https://github.com/golang/go/issues/12226

下一个版本1.5.1预计9月19日发布。

共 10 个回复


CodyGuo

果然很严重

# 0

jikai507

我擦 这BUG有点严重啊。。。

# 2

mengzhuo

用下面这个patch重新编译一次就好了
貌似是过早地Regfree了CMP 中的 R2?
src/cmd/compile/internal/gc/cgen.go

diff --git a/src/cmd/compile/internal/gc/cgen.go b/src/cmd/compile/internal/gc/cgen.go
index 4160ae9..b6a3e5b 100644
--- a/src/cmd/compile/internal/gc/cgen.go
+++ b/src/cmd/compile/internal/gc/cgen.go
@@ -2018,11 +2018,11 @@ func bgenx(n, res *Node, wantTrue bool, likely int, to *obj.Prog) {
        Regalloc(&n2, nr.Type, nil)
        Cgen(nr, &n2)
        nr = &n2
-       Regfree(&n2)

        Regalloc(&n1, nl.Type, nil)
        Cgen(&tmp, &n1)
        Regfree(&n1)
+       Regfree(&n2)
    } else {
        var n1 Node
        if !nl.Addable && Ctxt.Arch.Thechar == '8' {
# 3

vagary

net包
net.Interfaces()
相关的都跪了

# 4

haohuoyao

鄙视下.
发布前的测试很重要啊

# 5

bigbear

是编译器文件么? 谁有编译好的mac64的文件, 发个用下, 重新编译,怕搞出很多事

# 6

ThoseFlowers

package main

import (
    "fmt"
)

func main() {
    if []byte("aaa")[0] == []byte("ccc")[0] {
        fmt.Println([]byte("aaa")[0])
        fmt.Println([]byte("ccc")[0])
        fmt.Println("ok")
    } else {
        fmt.Println("在Go 1.5.1中,此荒唐BUG已修复")
    }
}
# 7

stevewang

1.5.1已经发布了。

# 8

qkevin123

我们每个人都知道,测试很重要,发布前的测试不充分,就会给用户带来很大的困扰.

当我们做为用户对别人的产品挑毛病都很擅长.

可是当我们转换角色成为产品的生产者的时候,还有多少人对于给自己的产品挑毛病也很擅长?

# 9