2013-08-15 14:38:32 -04:00
// run
2016-04-10 14:32:26 -07:00
// Copyright 2013 The Go Authors. All rights reserved.
2013-08-15 14:38:32 -04:00
// 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
2019-05-10 15:08:17 -04:00
var V interface { }
func use ( x interface { } ) {
V = x
2013-08-15 14:38:32 -04:00
}
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 ] ) } } ,
2013-08-16 21:14:38 +04:00
{ "bigstructp.x[100<<20]" , func ( ) { println ( bigstructp . x [ 100 << 20 ] ) } } ,
{ "&bigstructp.x[100<<20]" , func ( ) { println ( & bigstructp . x [ 100 << 20 ] ) } } ,
2013-08-15 14:38:32 -04:00
{ "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
2013-08-16 21:14:38 +04:00
x [ 128 << 20 ] byte
2013-08-15 14:38:32 -04:00
l [ ] byte
}
type M struct {
}
func ( m * M ) F ( ) int { return 0 }
type M1 struct {
M
}
type M2 struct {
x int
M
}