diff options
| author | Nigel Tao <nigeltao@golang.org> | 2011-07-18 15:54:11 +1000 |
|---|---|---|
| committer | Nigel Tao <nigeltao@golang.org> | 2011-07-18 15:54:11 +1000 |
| commit | 95323c59eaa6ffa8c76450c19a3831c88ecd19e3 (patch) | |
| tree | ef855b6a2d7c7fb008b21c969dbb4517dd425082 | |
| parent | a8e0035bd346beebb9d6bb5b43cb99ca901dd47a (diff) | |
| download | go-95323c59eaa6ffa8c76450c19a3831c88ecd19e3.tar.xz | |
runtime: fix panic for make(chan [0]byte).
I suspect that this was introduced by
http://code.google.com/p/go/source/detail?r=6e4ee32fffd1
R=r
CC=golang-dev
https://golang.org/cl/4764045
| -rw-r--r-- | src/pkg/runtime/chan.c | 2 | ||||
| -rw-r--r-- | test/chan/zerosize.go | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/pkg/runtime/chan.c b/src/pkg/runtime/chan.c index 78f67b817c..efaceebf5a 100644 --- a/src/pkg/runtime/chan.c +++ b/src/pkg/runtime/chan.c @@ -97,7 +97,7 @@ runtime·makechan_c(Type *elem, int64 hint) int32 n; byte *by; - if(hint < 0 || (int32)hint != hint || hint > ((uintptr)-1) / elem->size) + if(hint < 0 || (int32)hint != hint || (elem->size > 0 && hint > ((uintptr)-1) / elem->size)) runtime·panicstring("makechan: size out of range"); if(elem->alg >= nelem(runtime·algarray)) { diff --git a/test/chan/zerosize.go b/test/chan/zerosize.go new file mode 100644 index 0000000000..617c9dab34 --- /dev/null +++ b/test/chan/zerosize.go @@ -0,0 +1,16 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2011 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. + +// Making channels of a zero-sized type should not panic. + +package main + +func main() { + _ = make(chan [0]byte) + _ = make(chan [0]byte, 1) + _ = make(chan struct{}) + _ = make(chan struct{}, 1) +} |
