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