| // run |
| |
| // Copyright 2025 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 "fmt" |
| |
| //go:noinline |
| func bug1(a []int, i int) int { |
| if i < 0 || i > 20-len(a) { |
| return 0 |
| } |
| diff := len(a) - i |
| if diff < 10 { |
| return 1 |
| } |
| return 2 |
| } |
| |
| //go:noinline |
| func bug2(s []int, i int) int { |
| if i < 0 { |
| return 0 |
| } |
| if i <= 10-len(s) { |
| x := len(s) - i |
| return x / 2 |
| } |
| return 0 |
| } |
| |
| func main() { |
| if got := bug1(make([]int, 5), 15); got != 1 { |
| panic(fmt.Sprintf("bug1: got %d, want 1", got)) |
| } |
| if got := bug2(make([]int, 3), 7); got != -2 { |
| panic(fmt.Sprintf("bug2: got %d, want -2", got)) |
| } |
| } |