// run

// Copyright 2010 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.

// https://golang.org/issue/589

package main

var bug = false

var minus1 = -1
var five = 5
var big int64 = 10 | 1<<32

type block [1<<19]byte

var g1 []block

func shouldfail(f func(), desc string) {
	defer func() { recover() }()
	f()
	if !bug {
		println("BUG")
		bug = true
	}
	println("didn't crash: ", desc)
}

func badlen() {
	g1 = make([]block, minus1)
}

func biglen() {
	g1 = make([]block, big)
}

func badcap() {
	g1 = make([]block, 10, minus1)
}

func badcap1() {
	g1 = make([]block, 10, five)
}

func bigcap() {
	g1 = make([]block, 10, big)
}

type cblock [1<<16-1]byte

var g4 chan cblock
func badchancap() {
	g4 = make(chan cblock, minus1)
}

func bigchancap() {
	g4 = make(chan cblock, big)
}

func overflowchan() {
	g4 = make(chan cblock, 1<<30)
}

func main() {
	shouldfail(badlen, "badlen")
	shouldfail(biglen, "biglen")
	shouldfail(badcap, "badcap")
	shouldfail(badcap1, "badcap1")
	shouldfail(bigcap, "bigcap")
	shouldfail(badchancap, "badchancap")
	shouldfail(bigchancap, "bigchancap")
	shouldfail(overflowchan, "overflowchan")
}
