// run // Copyright 2011 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" ) var t *struct { c chan int } var c chan int func f() { select { case <-t.c: // THIS IS LINE 22 break case <-c: break } } func main() { defer func() { recover() for i := 0;; i++ { pc, file, line, ok := runtime.Caller(i) if !ok { print("BUG: bug347: cannot find caller\n") return } if !strings.Contains(file, "bug347.go") || runtime.FuncForPC(pc).Name() != "main.f" { // walk past runtime frames continue } if line != 22 { print("BUG: bug347: panic at ", file, ":", line, " in ", runtime.FuncForPC(pc).Name(), "\n") } return } }() f() }