From 95323c59eaa6ffa8c76450c19a3831c88ecd19e3 Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Mon, 18 Jul 2011 15:54:11 +1000 Subject: [PATCH] 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 --- src/pkg/runtime/chan.c | 2 +- test/chan/zerosize.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/chan/zerosize.go diff --git a/src/pkg/runtime/chan.c b/src/pkg/runtime/chan.c index 78f67b817c0..efaceebf5a3 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 00000000000..617c9dab341 --- /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) +}