// run // Copyright 2019 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 ( "runtime" "strings" ) func main() { f(nil) } func f(p *int32) { defer checkstack() v := *p // panic should happen here, line 20 sink = int64(v) // not here, line 21 } var sink int64 func checkstack() { _ = recover() var buf [1024]byte n := runtime.Stack(buf[:], false) s := string(buf[:n]) if strings.Contains(s, "issue27201.go:21 ") { panic("panic at wrong location") } if !strings.Contains(s, "issue27201.go:20 ") { panic("no panic at correct location") } }