]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix panic for make(chan [0]byte).
authorNigel Tao <nigeltao@golang.org>
Mon, 18 Jul 2011 05:54:11 +0000 (15:54 +1000)
committerNigel Tao <nigeltao@golang.org>
Mon, 18 Jul 2011 05:54:11 +0000 (15:54 +1000)
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

src/pkg/runtime/chan.c
test/chan/zerosize.go [new file with mode: 0644]

index 78f67b817c0002439046653ca82ee7932c4aa6e4..efaceebf5a346a1c25e654e895dc77d16374fa3f 100644 (file)
@@ -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 (file)
index 0000000..617c9da
--- /dev/null
@@ -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)
+}