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