| // 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) | |
| } | |
| var g3 map[block]block | |
| func badmapcap() { | |
| g3 = make(map[block]block, minus1) | |
| } | |
| func bigmapcap() { | |
| g3 = make(map[block]block, 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(badmapcap, "badmapcap") | |
| shouldfail(bigmapcap, "bigmapcap") | |
| shouldfail(badchancap, "badchancap") | |
| shouldfail(bigchancap, "bigchancap") | |
| shouldfail(overflowchan, "overflowchan") | |
| } |