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:
Josh Bleecher Snyder 2016-09-14 20:07:13 -07:00
parent d7012ca282
commit df2b63f09b
2 changed files with 17 additions and 1 deletions

View file

@ -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
}

View file

@ -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
)