blob: a5c036999a74802f3e1da363e5b09ca5a10343ad [file] [log] [blame]
Russ Cox999a36f2013-08-15 14:38:32 -04001// run
2
Emmanuel Odeke53fd5222016-04-10 14:32:26 -07003// Copyright 2013 The Go Authors. All rights reserved.
Russ Cox999a36f2013-08-15 14:38:32 -04004// 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
38func use(interface{}) {
39}
40
41var tests = []struct{
42 name string
43 fn func()
44}{
45 // Edit .+1,/^}/s/^[^ ].+/ {"&", func() { println(&) }},\n {"\&&", func() { println(\&&) }},/g
46 {"*intp", func() { println(*intp) }},
47 {"&*intp", func() { println(&*intp) }},
48 {"*slicep", func() { println(*slicep) }},
49 {"&*slicep", func() { println(&*slicep) }},
50 {"(*slicep)[0]", func() { println((*slicep)[0]) }},
51 {"&(*slicep)[0]", func() { println(&(*slicep)[0]) }},
52 {"(*slicep)[i]", func() { println((*slicep)[i]) }},
53 {"&(*slicep)[i]", func() { println(&(*slicep)[i]) }},
54 {"*a10p", func() { use(*a10p) }},
55 {"&*a10p", func() { println(&*a10p) }},
56 {"a10p[0]", func() { println(a10p[0]) }},
57 {"&a10p[0]", func() { println(&a10p[0]) }},
58 {"a10p[i]", func() { println(a10p[i]) }},
59 {"&a10p[i]", func() { println(&a10p[i]) }},
60 {"*structp", func() { use(*structp) }},
61 {"&*structp", func() { println(&*structp) }},
62 {"structp.i", func() { println(structp.i) }},
63 {"&structp.i", func() { println(&structp.i) }},
64 {"structp.j", func() { println(structp.j) }},
65 {"&structp.j", func() { println(&structp.j) }},
66 {"structp.k", func() { println(structp.k) }},
67 {"&structp.k", func() { println(&structp.k) }},
68 {"structp.x[0]", func() { println(structp.x[0]) }},
69 {"&structp.x[0]", func() { println(&structp.x[0]) }},
70 {"structp.x[i]", func() { println(structp.x[i]) }},
71 {"&structp.x[i]", func() { println(&structp.x[i]) }},
72 {"structp.x[9]", func() { println(structp.x[9]) }},
73 {"&structp.x[9]", func() { println(&structp.x[9]) }},
74 {"structp.l", func() { println(structp.l) }},
75 {"&structp.l", func() { println(&structp.l) }},
76 {"*bigstructp", func() { use(*bigstructp) }},
77 {"&*bigstructp", func() { println(&*bigstructp) }},
78 {"bigstructp.i", func() { println(bigstructp.i) }},
79 {"&bigstructp.i", func() { println(&bigstructp.i) }},
80 {"bigstructp.j", func() { println(bigstructp.j) }},
81 {"&bigstructp.j", func() { println(&bigstructp.j) }},
82 {"bigstructp.k", func() { println(bigstructp.k) }},
83 {"&bigstructp.k", func() { println(&bigstructp.k) }},
84 {"bigstructp.x[0]", func() { println(bigstructp.x[0]) }},
85 {"&bigstructp.x[0]", func() { println(&bigstructp.x[0]) }},
86 {"bigstructp.x[i]", func() { println(bigstructp.x[i]) }},
87 {"&bigstructp.x[i]", func() { println(&bigstructp.x[i]) }},
88 {"bigstructp.x[9]", func() { println(bigstructp.x[9]) }},
89 {"&bigstructp.x[9]", func() { println(&bigstructp.x[9]) }},
Dmitriy Vyukoveaa07042013-08-16 21:14:38 +040090 {"bigstructp.x[100<<20]", func() { println(bigstructp.x[100<<20]) }},
91 {"&bigstructp.x[100<<20]", func() { println(&bigstructp.x[100<<20]) }},
Russ Cox999a36f2013-08-15 14:38:32 -040092 {"bigstructp.l", func() { println(bigstructp.l) }},
93 {"&bigstructp.l", func() { println(&bigstructp.l) }},
94 {"m1.F()", func() { println(m1.F()) }},
95 {"m1.M.F()", func() { println(m1.M.F()) }},
96 {"m2.F()", func() { println(m2.F()) }},
97 {"m2.M.F()", func() { println(m2.M.F()) }},
98}
99
100type Struct struct {
101 i int
102 j float64
103 k string
104 x [10]int
105 l []byte
106}
107
108type BigStruct struct {
109 i int
110 j float64
111 k string
Dmitriy Vyukoveaa07042013-08-16 21:14:38 +0400112 x [128<<20]byte
Russ Cox999a36f2013-08-15 14:38:32 -0400113 l []byte
114}
115
116type M struct {
117}
118
119func (m *M) F() int {return 0}
120
121type M1 struct {
122 M
123}
124
125type M2 struct {
126 x int
127 M
128}