aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNigel Tao <nigeltao@golang.org>2011-07-18 15:54:11 +1000
committerNigel Tao <nigeltao@golang.org>2011-07-18 15:54:11 +1000
commit95323c59eaa6ffa8c76450c19a3831c88ecd19e3 (patch)
treeef855b6a2d7c7fb008b21c969dbb4517dd425082
parenta8e0035bd346beebb9d6bb5b43cb99ca901dd47a (diff)
downloadgo-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.c2
-rw-r--r--test/chan/zerosize.go16
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)
+}