blob: 08edf0f4ffb9a81e662f9fbef9d816fb92124c83 [file] [log] [blame]
Bill Yi7fb3c4c2015-03-23 09:04:07 -07001// 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}