From: Josh Bleecher Snyder Date: Thu, 15 Sep 2016 03:07:13 +0000 (-0700) Subject: cmd/compile: unwrap fewer CONVNOPs in staticassign X-Git-Tag: go1.8beta1~1303 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=df2b63f09be280544e58c8d17fe34c863521ed10;p=gostls13.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 TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/sinit.go b/src/cmd/compile/internal/gc/sinit.go index 8ca0acde51..5dcb29ea05 100644 --- a/src/cmd/compile/internal/gc/sinit.go +++ b/src/cmd/compile/internal/gc/sinit.go @@ -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 } diff --git a/test/fixedbugs/issue17111.go b/test/fixedbugs/issue17111.go new file mode 100644 index 0000000000..05284a785f --- /dev/null +++ b/test/fixedbugs/issue17111.go @@ -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 +)