// run // Copyright 2013 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. package main func main() { ok := true for _, tt := range tests { func() { defer func() { if err := recover(); err == nil { println(tt.name, "did not panic") ok = false } }() tt.fn() }() } if !ok { println("BUG") } } var intp *int var slicep *[]byte var a10p *[10]int var a10Mp *[1<<20]int var structp *Struct var bigstructp *BigStruct var i int var m *M var m1 *M1 var m2 *M2 var V interface{} func use(x interface{}) { V = x } var tests = []struct{ name string fn func() }{ // Edit .+1,/^}/s/^[^ ].+/ {"&", func() { println(&) }},\n {"\&&", func() { println(\&&) }},/g {"*intp", func() { println(*intp) }}, {"&*intp", func() { println(&*intp) }}, {"*slicep", func() { println(*slicep) }}, {"&*slicep", func() { println(&*slicep) }}, {"(*slicep)[0]", func() { println((*slicep)[0]) }}, {"&(*slicep)[0]", func() { println(&(*slicep)[0]) }}, {"(*slicep)[i]", func() { println((*slicep)[i]) }}, {"&(*slicep)[i]", func() { println(&(*slicep)[i]) }}, {"*a10p", func() { use(*a10p) }}, {"&*a10p", func() { println(&*a10p) }}, {"a10p[0]", func() { println(a10p[0]) }}, {"&a10p[0]", func() { println(&a10p[0]) }}, {"a10p[i]", func() { println(a10p[i]) }}, {"&a10p[i]", func() { println(&a10p[i]) }}, {"*structp", func() { use(*structp) }}, {"&*structp", func() { println(&*structp) }}, {"structp.i", func() { println(structp.i) }}, {"&structp.i", func() { println(&structp.i) }}, {"structp.j", func() { println(structp.j) }}, {"&structp.j", func() { println(&structp.j) }}, {"structp.k", func() { println(structp.k) }}, {"&structp.k", func() { println(&structp.k) }}, {"structp.x[0]", func() { println(structp.x[0]) }}, {"&structp.x[0]", func() { println(&structp.x[0]) }}, {"structp.x[i]", func() { println(structp.x[i]) }}, {"&structp.x[i]", func() { println(&structp.x[i]) }}, {"structp.x[9]", func() { println(structp.x[9]) }}, {"&structp.x[9]", func() { println(&structp.x[9]) }}, {"structp.l", func() { println(structp.l) }}, {"&structp.l", func() { println(&structp.l) }}, {"*bigstructp", func() { use(*bigstructp) }}, {"&*bigstructp", func() { println(&*bigstructp) }}, {"bigstructp.i", func() { println(bigstructp.i) }}, {"&bigstructp.i", func() { println(&bigstructp.i) }}, {"bigstructp.j", func() { println(bigstructp.j) }}, {"&bigstructp.j", func() { println(&bigstructp.j) }}, {"bigstructp.k", func() { println(bigstructp.k) }}, {"&bigstructp.k", func() { println(&bigstructp.k) }}, {"bigstructp.x[0]", func() { println(bigstructp.x[0]) }}, {"&bigstructp.x[0]", func() { println(&bigstructp.x[0]) }}, {"bigstructp.x[i]", func() { println(bigstructp.x[i]) }}, {"&bigstructp.x[i]", func() { println(&bigstructp.x[i]) }}, {"bigstructp.x[9]", func() { println(bigstructp.x[9]) }}, {"&bigstructp.x[9]", func() { println(&bigstructp.x[9]) }}, {"bigstructp.x[100<<20]", func() { println(bigstructp.x[100<<20]) }}, {"&bigstructp.x[100<<20]", func() { println(&bigstructp.x[100<<20]) }}, {"bigstructp.l", func() { println(bigstructp.l) }}, {"&bigstructp.l", func() { println(&bigstructp.l) }}, {"m1.F()", func() { println(m1.F()) }}, {"m1.M.F()", func() { println(m1.M.F()) }}, {"m2.F()", func() { println(m2.F()) }}, {"m2.M.F()", func() { println(m2.M.F()) }}, } type Struct struct { i int j float64 k string x [10]int l []byte } type BigStruct struct { i int j float64 k string x [128<<20]byte l []byte } type M struct { } func (m *M) F() int {return 0} type M1 struct { M } type M2 struct { x int M }