| // $G $D/$F.go && $L $F.$A && ! ./$A.out || echo BUG: should crash | |
| // Copyright 2009 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 | |
| type T struct {a, b int}; | |
| func f(x interface{}) interface{} { | |
| type T struct {a, b int}; | |
| if x == nil { | |
| return T{2, 3}; | |
| } | |
| t := x.(T); | |
| println(t.a, t.b); | |
| return x; | |
| } | |
| func main() { | |
| inner_T := f(nil); | |
| f(inner_T); | |
| outer_T := T{5, 7}; | |
| f(outer_T); | |
| } | |
| /* | |
| This prints: | |
| 2 3 | |
| 5 7 | |
| but it should crash: The type assertion on line 14 should fail | |
| for the 2nd call to f with outer_T. | |
| */ |