github.com/likebike/go--@v0.0.0-20190911215757-0bd925d16e96/go/test/fixedbugs/bug273.go (about)

     1  // run
     2  
     3  // Copyright 2010 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // https://golang.org/issue/589
     8  
     9  package main
    10  
    11  var bug = false
    12  
    13  var minus1 = -1
    14  var five = 5
    15  var big int64 = 10 | 1<<32
    16  
    17  type block [1<<19]byte
    18  
    19  var g1 []block
    20  
    21  func shouldfail(f func(), desc string) {
    22  	defer func() { recover() }()
    23  	f()
    24  	if !bug {
    25  		println("BUG")
    26  		bug = true
    27  	}
    28  	println("didn't crash: ", desc)
    29  }
    30  
    31  func badlen() {
    32  	g1 = make([]block, minus1)
    33  }
    34  
    35  func biglen() {
    36  	g1 = make([]block, big)
    37  }
    38  
    39  func badcap() {
    40  	g1 = make([]block, 10, minus1)
    41  }
    42  
    43  func badcap1() {
    44  	g1 = make([]block, 10, five)
    45  }
    46  
    47  func bigcap() {
    48  	g1 = make([]block, 10, big)
    49  }
    50  
    51  type cblock [1<<16-1]byte
    52  
    53  var g4 chan cblock
    54  func badchancap() {
    55  	g4 = make(chan cblock, minus1)
    56  }
    57  
    58  func bigchancap() {
    59  	g4 = make(chan cblock, big)
    60  }
    61  
    62  func overflowchan() {
    63  	g4 = make(chan cblock, 1<<30)
    64  }
    65  
    66  func main() {
    67  	shouldfail(badlen, "badlen")
    68  	shouldfail(biglen, "biglen")
    69  	shouldfail(badcap, "badcap")
    70  	shouldfail(badcap1, "badcap1")
    71  	shouldfail(bigcap, "bigcap")
    72  	shouldfail(badchancap, "badchancap")
    73  	shouldfail(bigchancap, "bigchancap")
    74  	shouldfail(overflowchan, "overflowchan")
    75  }