| // 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 |
| } |