| // 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") | 
 | 	} | 
 | } |