]> Cypherpunks.ru repositories - gostls13.git/blob - test/fixedbugs/bug286.go
all: make copyright headers consistent with one space after period
[gostls13.git] / test / fixedbugs / bug286.go
1 // run
2
3 // Copyright 2010 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 // Test case for issue 849.
8
9 package main
10
11 type I interface {
12         f()
13 }
14
15 var callee string
16 var error_ bool
17
18 type T int
19
20 func (t *T) f() { callee = "f" }
21 func (i *T) g() { callee = "g" }
22
23 // test1 and test2 are the same except that in the interface J
24 // the entries are swapped. test2 and test3 are the same except
25 // that in test3 the interface J is declared outside the function.
26 //
27 // Error: test2 calls g instead of f
28
29 func test1(x I) {
30         type J interface {
31                 I
32                 g()
33         }
34         x.(J).f()
35         if callee != "f" {
36                 println("test1 called", callee)
37                 error_ = true
38         }
39 }
40
41 func test2(x I) {
42         type J interface {
43                 g()
44                 I
45         }
46         x.(J).f()
47         if callee != "f" {
48                 println("test2 called", callee)
49                 error_ = true
50         }
51 }
52
53 type J interface {
54         g()
55         I
56 }
57
58 func test3(x I) {
59         x.(J).f()
60         if callee != "f" {
61                 println("test3 called", callee)
62                 error_ = true
63         }
64 }
65
66 func main() {
67         x := new(T)
68         test1(x)
69         test2(x)
70         test3(x)
71         if error_ {
72                 panic("wrong method called")
73         }
74 }
75
76 /*
77 6g bug286.go && 6l bug286.6 && 6.out
78 test2 called g
79 panic: wrong method called
80
81 panic PC=0x24e040
82 runtime.panic+0x7c /home/gri/go1/src/pkg/runtime/proc.c:1012
83         runtime.panic(0x0, 0x24e0a0)
84 main.main+0xef /home/gri/go1/test/bugs/bug286.go:76
85         main.main()
86 mainstart+0xf /home/gri/go1/src/pkg/runtime/amd64/asm.s:60
87         mainstart()
88 goexit /home/gri/go1/src/pkg/runtime/proc.c:145
89         goexit()
90 */