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
14func f() {
15	var x *string
16
17	for _, i := range *x {  // THIS IS LINE 17
18		println(i)
19	}
20}
21
22func g() {
23}
24
25func main() {
26	defer func() {
27		for i := 0;; i++ {
28			pc, file, line, ok := runtime.Caller(i)
29			if !ok {
30				print("BUG: bug348: cannot find caller\n")
31				return
32			}
33			if !strings.Contains(file, "bug348.go") || runtime.FuncForPC(pc).Name() != "main.f" {
34				// walk past runtime frames
35				continue
36			}
37			if line != 17 {
38				print("BUG: bug348: panic at ", file, ":", line, " in ", runtime.FuncForPC(pc).Name(), "\n")
39				return
40			}
41			recover()
42			return
43		}
44	}()
45	f()
46}
47