mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
cmd/compile: fix register allocation for == operator
The issue 12226 has been caused by the allocation of the same register for the equality check of two byte values. The code in cgen.go freed the register for the second operand before the allocation of the register for the first operand. Fixes #12226 Change-Id: Ie4dc33a488bd48a17f8ae9b497fd63c1ae390555 Reviewed-on: https://go-review.googlesource.com/13771 Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
parent
05a3b1fce5
commit
6ec1809b83
|
@ -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' {
|
||||
|
|
15
test/fixedbugs/issue12226.go
Normal file
15
test/fixedbugs/issue12226.go
Normal file
|
@ -0,0 +1,15 @@
|
|||
// run
|
||||
|
||||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
if []byte("foo")[0] == []byte("b")[0] {
|
||||
fmt.Println("BUG: \"foo\" and \"b\" appear to have the same first byte")
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue