mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
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: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
b55cee1893
commit
93bca632d9
|
@ -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
|
||||
}
|
||||
|
|
21
test/fixedbugs/issue17551.go
Normal file
21
test/fixedbugs/issue17551.go
Normal file
|
@ -0,0 +1,21 @@
|
|||
// 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
|
||||
}
|
Loading…
Reference in a new issue