// $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. | |
*/ |