modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue22083.go (about)

     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  
    10  package main
    11  
    12  import (
    13  	"runtime/debug"
    14  	"strings"
    15  )
    16  
    17  type Wrapper struct {
    18  	a []int
    19  }
    20  
    21  func (w Wrapper) Get(i int) int {
    22  	return w.a[i]
    23  }
    24  
    25  func 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  }