Fixes #17551.
Change-Id: I84b7d82654cda3559c119aa56b07f30d0d224865
Reviewed-on: https://go-review.googlesource.com/31857
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
cmp.Lineno = n.Lineno
cmp = addinit(cmp, l.Ninit.Slice())
cmp = addinit(cmp, r.Ninit.Slice())
+ // Typecheck the AST rooted at cmp...
cmp = typecheck(cmp, Erv)
+ // ...but then reset cmp's type to match n's type.
+ cmp.Type = n.Type
cmp = walkexpr(cmp, init)
return cmp
}
--- /dev/null
+// 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.
+
+// Issue 17551: inrange optimization failed to preserve type information.
+
+package main
+
+import "fmt"
+
+func main() {
+ _, x := X()
+ fmt.Printf("x = %v\n", x)
+}
+
+func X() (i int, ok bool) {
+ ii := int(1)
+ return ii, 0 <= ii && ii <= 0x7fffffff
+}