1// run
2
3// Copyright 2017 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// The compiler was panicking on the wrong line number, where
8// the panic was occurring in an inlined call.
9
10package main
11
12import (
13	"runtime/debug"
14	"strings"
15)
16
17type Wrapper struct {
18	a []int
19}
20
21func (w Wrapper) Get(i int) int {
22	return w.a[i]
23}
24
25func main() {
26	defer func() {
27		e := recover()
28		if e == nil {
29			panic("bounds check didn't fail")
30		}
31		stk := string(debug.Stack())
32		if !strings.Contains(stk, "issue22083.go:40") {
33			panic("wrong stack trace: " + stk)
34		}
35	}()
36	foo := Wrapper{a: []int{0, 1, 2}}
37	_ = foo.Get(0)
38	_ = foo.Get(1)
39	_ = foo.Get(2)
40	_ = foo.Get(3) // stack trace should mention this line
41}
42