| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func use(interface{}) { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | } |