// 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" | |
) | |
func f() { | |
var x *string | |
for _, i := range *x { // THIS IS LINE 17 | |
println(i) | |
} | |
} | |
func g() { | |
} | |
func main() { | |
defer func() { | |
for i := 0;; i++ { | |
pc, file, line, ok := runtime.Caller(i) | |
if !ok { | |
print("BUG: bug348: cannot find caller\n") | |
return | |
} | |
if !strings.Contains(file, "bug348.go") || runtime.FuncForPC(pc).Name() != "main.f" { | |
// walk past runtime frames | |
continue | |
} | |
if line != 17 { | |
print("BUG: bug348: panic at ", file, ":", line, " in ", runtime.FuncForPC(pc).Name(), "\n") | |
return | |
} | |
recover() | |
return | |
} | |
}() | |
f() | |
} |