go/test/fixedbugs/issue53600.go
Keith Randall 2acd3646fc cmd/compile: rework induction variable detector
Induction variable detection is still not quite right. I've added
another failing test.

Redo the overflow/underflow detector so it is more obviously correct.

Update #53600
Fixes #53653
Fixes #53663

Change-Id: Id95228e282fdbf6bd80b26e1c41d62e935ba08ff
Reviewed-on: https://go-review.googlesource.com/c/go/+/415874
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: David Chase <drchase@google.com>
2022-07-06 17:00:37 +00:00

54 lines
802 B
Go

// run
// Copyright 2022 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
import "math"
func main() {
f()
g()
h()
j(math.MinInt64)
}
func f() {
for i := int64(math.MaxInt64); i <= math.MaxInt64; i++ {
if i < 0 {
println("done")
return
}
println(i, i < 0)
}
}
func g() {
for i := int64(math.MaxInt64) - 1; i <= math.MaxInt64; i++ {
if i < 0 {
println("done")
return
}
println(i, i < 0)
}
}
func h() {
for i := int64(math.MaxInt64) - 2; i <= math.MaxInt64; i += 2 {
if i < 0 {
println("done")
return
}
println(i, i < 0)
}
}
//go:noinline
func j(i int64) {
for j := int64(math.MaxInt64); j <= i-1; j++ {
if j < 0 {
break
}
println(j)
}
}