// run
// Copyright 2017 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.
// The compiler was panicking on the wrong line number, where
// the panic was occurring in an inlined call.
package main
import (
"runtime/debug"
"strings"
)
type Wrapper struct {
a []int
}
func (w Wrapper) Get(i int) int {
return w.a[i]
}
func main() {
defer func() {
e := recover()
if e == nil {
panic("bounds check didn't fail")
}
stk := string(debug.Stack())
if !strings.Contains(stk, "issue22083.go:40") {
panic("wrong stack trace: " + stk)
}
}()
foo := Wrapper{a: []int{0, 1, 2}}
_ = foo.Get(0)
_ = foo.Get(1)
_ = foo.Get(2)
_ = foo.Get(3) // stack trace should mention this line
}