mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
![Cherry Zhang](/assets/img/avatar_default.png)
CL 280456 introduced a new store combining rule. On the LHS some of the Aux and AuxInt of the stores are not specified, therefore ignored during the matching. The rule is only correct if they match. This CL adds explict match. TODO: maybe we want the rule matcher require Aux/AuxInt to be always specified on the LHS (using _ to explicitly ignore)? Or maybe we want it to match the zero value if not specified? The current approach is error-prone. Fixes #44823. Change-Id: Ic12b4a0de63117f2f070039737f0c905f28561bc Reviewed-on: https://go-review.googlesource.com/c/go/+/299289 Trust: Cherry Zhang <cherryyz@google.com> Trust: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
27 lines
492 B
Go
27 lines
492 B
Go
// run
|
|
|
|
// Copyright 2021 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.
|
|
|
|
// Issue 44823: miscompilation with store combining.
|
|
|
|
package main
|
|
|
|
import "encoding/binary"
|
|
|
|
//go:noinline
|
|
func Id(a [8]byte) (x [8]byte) {
|
|
binary.LittleEndian.PutUint64(x[:], binary.LittleEndian.Uint64(a[:]))
|
|
return
|
|
}
|
|
|
|
var a = [8]byte{1, 2, 3, 4, 5, 6, 7, 8}
|
|
|
|
func main() {
|
|
x := Id(a)
|
|
if x != a {
|
|
panic("FAIL")
|
|
}
|
|
}
|