1// run
2
3// Copyright 2011 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
14var t *struct {
15	c chan int
16}
17
18var c chan int
19
20func f() {
21	select {
22	case <-t.c:  // THIS IS LINE 22
23		break
24	case <-c:
25		break
26	}
27}
28
29func main() {
30	defer func() {
31		recover()
32		for i := 0;; i++ {
33			pc, file, line, ok := runtime.Caller(i)
34			if !ok {
35				print("BUG: bug347: cannot find caller\n")
36				return
37			}
38			if !strings.Contains(file, "bug347.go") || runtime.FuncForPC(pc).Name() != "main.f" {
39				// walk past runtime frames
40				continue
41			}
42			if line != 22 {
43				print("BUG: bug347: panic at ", file, ":", line, " in ", runtime.FuncForPC(pc).Name(), "\n")
44			}
45			return
46		}
47	}()
48	f()
49}
50