| // 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. |
| |
| // http://code.google.com/p/go/issues/detail?id=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") |
| } |