| // run | |
| // Copyright 2010 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 | |
| import "errors" | |
| // Issue 481: closures and var declarations | |
| // with multiple variables assigned from one | |
| // function call. | |
| func main() { | |
| var listen, _ = Listen("tcp", "127.0.0.1:0") | |
| go func() { | |
| for { | |
| var conn, _ = listen.Accept() | |
| _ = conn | |
| } | |
| }() | |
| var conn, _ = Dial("tcp", "", listen.Addr().Error()) | |
| _ = conn | |
| } | |
| // Simulated net interface to exercise bug | |
| // without involving a real network. | |
| type T chan int | |
| var global T | |
| func Listen(x, y string) (T, string) { | |
| global = make(chan int) | |
| return global, y | |
| } | |
| func (t T) Addr() error { | |
| return errors.New("stringer") | |
| } | |
| func (t T) Accept() (int, string) { | |
| return <-t, "" | |
| } | |
| func Dial(x, y, z string) (int, string) { | |
| global <- 1 | |
| return 0, "" | |
| } |