modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/bug148.go (about) 1 // run 2 3 // Copyright 2009 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 7 package main 8 9 type T struct {a, b int}; 10 11 func println(x, y int) { } 12 13 func f(x interface{}) interface{} { 14 type T struct {a, b int}; 15 16 if x == nil { 17 return T{2, 3}; 18 } 19 20 t := x.(T); 21 println(t.a, t.b); 22 return x; 23 } 24 25 func main() { 26 inner_T := f(nil); 27 f(inner_T); 28 29 shouldPanic(p1) 30 } 31 32 func p1() { 33 outer_T := T{5, 7}; 34 f(outer_T); 35 } 36 37 func shouldPanic(f func()) { 38 defer func() { 39 if recover() == nil { 40 panic("function should panic") 41 } 42 }() 43 f() 44 } 45 46 /* 47 This prints: 48 49 2 3 50 5 7 51 52 but it should crash: The type assertion on line 18 should fail 53 for the 2nd call to f with outer_T. 54 */