1// run 2 3// Copyright 2013 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 7package main 8 9func main() { 10 ok := true 11 for _, tt := range tests { 12 func() { 13 defer func() { 14 if err := recover(); err == nil { 15 println(tt.name, "did not panic") 16 ok = false 17 } 18 }() 19 tt.fn() 20 }() 21 } 22 if !ok { 23 println("BUG") 24 } 25} 26 27var intp *int 28var slicep *[]byte 29var a10p *[10]int 30var a10Mp *[1<<20]int 31var structp *Struct 32var bigstructp *BigStruct 33var i int 34var m *M 35var m1 *M1 36var m2 *M2 37 38var V interface{} 39 40func use(x interface{}) { 41 V = x 42} 43 44var tests = []struct{ 45 name string 46 fn func() 47}{ 48 // Edit .+1,/^}/s/^[^ ].+/ {"&", func() { println(&) }},\n {"\&&", func() { println(\&&) }},/g 49 {"*intp", func() { println(*intp) }}, 50 {"&*intp", func() { println(&*intp) }}, 51 {"*slicep", func() { println(*slicep) }}, 52 {"&*slicep", func() { println(&*slicep) }}, 53 {"(*slicep)[0]", func() { println((*slicep)[0]) }}, 54 {"&(*slicep)[0]", func() { println(&(*slicep)[0]) }}, 55 {"(*slicep)[i]", func() { println((*slicep)[i]) }}, 56 {"&(*slicep)[i]", func() { println(&(*slicep)[i]) }}, 57 {"*a10p", func() { use(*a10p) }}, 58 {"&*a10p", func() { println(&*a10p) }}, 59 {"a10p[0]", func() { println(a10p[0]) }}, 60 {"&a10p[0]", func() { println(&a10p[0]) }}, 61 {"a10p[i]", func() { println(a10p[i]) }}, 62 {"&a10p[i]", func() { println(&a10p[i]) }}, 63 {"*structp", func() { use(*structp) }}, 64 {"&*structp", func() { println(&*structp) }}, 65 {"structp.i", func() { println(structp.i) }}, 66 {"&structp.i", func() { println(&structp.i) }}, 67 {"structp.j", func() { println(structp.j) }}, 68 {"&structp.j", func() { println(&structp.j) }}, 69 {"structp.k", func() { println(structp.k) }}, 70 {"&structp.k", func() { println(&structp.k) }}, 71 {"structp.x[0]", func() { println(structp.x[0]) }}, 72 {"&structp.x[0]", func() { println(&structp.x[0]) }}, 73 {"structp.x[i]", func() { println(structp.x[i]) }}, 74 {"&structp.x[i]", func() { println(&structp.x[i]) }}, 75 {"structp.x[9]", func() { println(structp.x[9]) }}, 76 {"&structp.x[9]", func() { println(&structp.x[9]) }}, 77 {"structp.l", func() { println(structp.l) }}, 78 {"&structp.l", func() { println(&structp.l) }}, 79 {"*bigstructp", func() { use(*bigstructp) }}, 80 {"&*bigstructp", func() { println(&*bigstructp) }}, 81 {"bigstructp.i", func() { println(bigstructp.i) }}, 82 {"&bigstructp.i", func() { println(&bigstructp.i) }}, 83 {"bigstructp.j", func() { println(bigstructp.j) }}, 84 {"&bigstructp.j", func() { println(&bigstructp.j) }}, 85 {"bigstructp.k", func() { println(bigstructp.k) }}, 86 {"&bigstructp.k", func() { println(&bigstructp.k) }}, 87 {"bigstructp.x[0]", func() { println(bigstructp.x[0]) }}, 88 {"&bigstructp.x[0]", func() { println(&bigstructp.x[0]) }}, 89 {"bigstructp.x[i]", func() { println(bigstructp.x[i]) }}, 90 {"&bigstructp.x[i]", func() { println(&bigstructp.x[i]) }}, 91 {"bigstructp.x[9]", func() { println(bigstructp.x[9]) }}, 92 {"&bigstructp.x[9]", func() { println(&bigstructp.x[9]) }}, 93 {"bigstructp.x[100<<20]", func() { println(bigstructp.x[100<<20]) }}, 94 {"&bigstructp.x[100<<20]", func() { println(&bigstructp.x[100<<20]) }}, 95 {"bigstructp.l", func() { println(bigstructp.l) }}, 96 {"&bigstructp.l", func() { println(&bigstructp.l) }}, 97 {"m1.F()", func() { println(m1.F()) }}, 98 {"m1.M.F()", func() { println(m1.M.F()) }}, 99 {"m2.F()", func() { println(m2.F()) }}, 100 {"m2.M.F()", func() { println(m2.M.F()) }}, 101} 102 103type Struct struct { 104 i int 105 j float64 106 k string 107 x [10]int 108 l []byte 109} 110 111type BigStruct struct { 112 i int 113 j float64 114 k string 115 x [128<<20]byte 116 l []byte 117} 118 119type M struct { 120} 121 122func (m *M) F() int {return 0} 123 124type M1 struct { 125 M 126} 127 128type M2 struct { 129 x int 130 M 131} 132