runtime: return zero value in x, ok = <-c when ok == false

Fixes #401.

R=ken2
https://golang.org/cl/180053
This commit is contained in:
Russ Cox 2009-12-15 16:59:23 -08:00
parent c715b58dad
commit d16bc7a9f2
2 changed files with 22 additions and 0 deletions

View File

@ -307,6 +307,7 @@ loop:
if(pres != nil) {
unlock(c);
c->elemalg->copy(c->elemsize, ep, nil);
*pres = false;
return;
}
@ -335,6 +336,7 @@ asynch:
if(pres != nil) {
unlock(c);
c->elemalg->copy(c->elemsize, ep, nil);
*pres = false;
return;
}

20
test/fixedbugs/bug234.go Normal file
View File

@ -0,0 +1,20 @@
// $G $D/$F.go && $L $F.$A && ./$A.out
// 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
func main() {
c := make(chan int, 1)
c <- 100
x, ok := <-c
if x != 100 || !ok {
panic("x=", x, " ok=", ok, " want 100, true")
}
x, ok = <-c
if x != 0 || ok {
panic("x=", x, " ok=", ok, " want 0, false")
}
}