// run // Copyright 2012 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 ( "fmt" "runtime" "strings" ) type T struct { val int } func main() { defer expectError(22) var pT *T switch pT.val { // error should be here - line 22 case 0: fmt.Println("0") case 1: // used to show up here instead fmt.Println("1") case 2: fmt.Println("2") } fmt.Println("finished") } func expectError(expectLine int) { if recover() == nil { panic("did not crash") } for i := 1;; i++ { _, file, line, ok := runtime.Caller(i) if !ok { panic("cannot find issue4562.go on stack") } if strings.HasSuffix(file, "issue4562.go") { if line != expectLine { panic(fmt.Sprintf("crashed at line %d, wanted line %d", line, expectLine)) } break } } }