mirror of https://github.com/golang/go.git
cmd/compile: unwrap fewer CONVNOPs in staticassign
staticassign unwraps all CONVNOPs. However, in the included test, we need the CONVNOP for everything to typecheck. Stop unwrapping unnecessarily. The code we generate for this example is suboptimal, but that's not new; see #17113. Fixes #17111. Change-Id: I29532787a074a6fe19a5cc53271eb9c84bf1b576 Reviewed-on: https://go-review.googlesource.com/29213 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
d7012ca282
commit
df2b63f09b
|
|
@ -286,7 +286,7 @@ func staticcopy(l *Node, r *Node, out *[]*Node) bool {
|
|||
orig := r
|
||||
r = r.Name.Defn.Right
|
||||
|
||||
for r.Op == OCONVNOP {
|
||||
for r.Op == OCONVNOP && !Eqtype(r.Type, l.Type) {
|
||||
r = r.Left
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
// compile
|
||||
|
||||
// Copyright 2016 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
|
||||
|
||||
type I int
|
||||
|
||||
var (
|
||||
i int
|
||||
x = I(i)
|
||||
|
||||
e interface{} = x
|
||||
)
|
||||
Loading…
Reference in New Issue