Commit 93bca632 authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

cmd/compile: preserve type information in inrange

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: 's avatarMatthew Dempsky <mdempsky@google.com>
parent b55cee18
......@@ -3561,7 +3561,10 @@ func walkinrange(n *Node, init *Nodes) *Node {
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
}
......
// 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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment