From df2b63f09be280544e58c8d17fe34c863521ed10 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Wed, 14 Sep 2016 20:07:13 -0700 Subject: [PATCH] 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 --- src/cmd/compile/internal/gc/sinit.go | 2 +- test/fixedbugs/issue17111.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue17111.go 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 +) -- 2.48.1