1// run 2 3// Copyright 2019 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 7package main 8 9import ( 10 "runtime" 11 "strings" 12) 13 14func main() { 15 f(nil) 16} 17 18func f(p *int32) { 19 defer checkstack() 20 v := *p // panic should happen here, line 20 21 sink = int64(v) // not here, line 21 22} 23 24var sink int64 25 26func checkstack() { 27 _ = recover() 28 var buf [1024]byte 29 n := runtime.Stack(buf[:], false) 30 s := string(buf[:n]) 31 if strings.Contains(s, "issue27201.go:21 ") { 32 panic("panic at wrong location") 33 } 34 if !strings.Contains(s, "issue27201.go:20 ") { 35 panic("no panic at correct location") 36 } 37} 38