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