| 
									
										
										
										
											2012-02-16 23:48:57 -05:00
										 |  |  | // run | 
					
						
							| 
									
										
										
										
											2011-09-02 15:11:28 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-10 14:32:26 -07:00
										 |  |  | // Copyright 2011 The Go Authors. All rights reserved. | 
					
						
							| 
									
										
										
										
											2011-09-02 15:11:28 -04:00
										 |  |  | // Use of this source code is governed by a BSD-style | 
					
						
							|  |  |  | // license that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-19 14:28:53 +11:00
										 |  |  | // Test the run-time behavior of escape analysis-related optimizations. | 
					
						
							| 
									
										
										
										
											2011-09-02 15:11:28 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | package main | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func main() { | 
					
						
							|  |  |  | 	test1() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func test1() { | 
					
						
							|  |  |  | 	check1(0) | 
					
						
							|  |  |  | 	check1(1) | 
					
						
							|  |  |  | 	check1(2) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type T1 struct { | 
					
						
							|  |  |  | 	X, Y, Z int | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func f() int { | 
					
						
							|  |  |  | 	return 1 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func check1(pass int) T1 { | 
					
						
							|  |  |  | 	v := []T1{{X: f(), Z: f()}} | 
					
						
							|  |  |  | 	if v[0].Y != 0 { | 
					
						
							|  |  |  | 		panic("nonzero init") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	v[0].Y = pass | 
					
						
							|  |  |  | 	return v[0] | 
					
						
							|  |  |  | } |