mirror of
https://github.com/golang/go
synced 2024-11-23 05:50:05 -07: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.Lineno = n.Lineno
|
||||||
cmp = addinit(cmp, l.Ninit.Slice())
|
cmp = addinit(cmp, l.Ninit.Slice())
|
||||||
cmp = addinit(cmp, r.Ninit.Slice())
|
cmp = addinit(cmp, r.Ninit.Slice())
|
||||||
|
// Typecheck the AST rooted at cmp...
|
||||||
cmp = typecheck(cmp, Erv)
|
cmp = typecheck(cmp, Erv)
|
||||||
|
// ...but then reset cmp's type to match n's type.
|
||||||
|
cmp.Type = n.Type
|
||||||
cmp = walkexpr(cmp, init)
|
cmp = walkexpr(cmp, init)
|
||||||
return cmp
|
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 New Issue
Block a user