// run

// 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 println(x, y 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);

	shouldPanic(p1)
}

func p1() {
	outer_T := T{5, 7};
	f(outer_T);
}

func shouldPanic(f func()) {
	defer func() {
		if recover() == nil {
			panic("function should panic")
		}
	}()
	f()
}

/*
This prints:

2 3
5 7

but it should crash: The type assertion on line 18 should fail
for the 2nd call to f with outer_T.
*/
