OSDN Git Service

Update to current Go testsuite.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / go.test / test / fixedbugs / bug148.go
1 // $G $D/$F.go && $L $F.$A && ./$A.out
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 */