| // errorcheck -0 -m -l | 
 |  | 
 | // Copyright 2015 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. | 
 |  | 
 | // Test indirection level computation in escape analysis. | 
 |  | 
 | package escape | 
 |  | 
 | var sink interface{} | 
 |  | 
 | func level0() { | 
 | 	i := 0     // ERROR "moved to heap: i" | 
 | 	p0 := &i   // ERROR "moved to heap: p0" | 
 | 	p1 := &p0  // ERROR "moved to heap: p1" | 
 | 	p2 := &p1  // ERROR "moved to heap: p2" | 
 | 	sink = &p2 | 
 | } | 
 |  | 
 | func level1() { | 
 | 	i := 0    // ERROR "moved to heap: i" | 
 | 	p0 := &i  // ERROR "moved to heap: p0" | 
 | 	p1 := &p0 // ERROR "moved to heap: p1" | 
 | 	p2 := &p1 | 
 | 	sink = p2 | 
 | } | 
 |  | 
 | func level2() { | 
 | 	i := 0     // ERROR "moved to heap: i" | 
 | 	p0 := &i   // ERROR "moved to heap: p0" | 
 | 	p1 := &p0 | 
 | 	p2 := &p1 | 
 | 	sink = *p2 | 
 | } | 
 |  | 
 | func level3() { | 
 | 	i := 0      // ERROR "moved to heap: i" | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	p2 := &p1 | 
 | 	sink = **p2 | 
 | } | 
 |  | 
 | func level4() { | 
 | 	i := 0     // ERROR "moved to heap: i" | 
 | 	p0 := &i   // ERROR "moved to heap: p0" | 
 | 	p1 := &p0 | 
 | 	p2 := p1   // ERROR "moved to heap: p2" | 
 | 	sink = &p2 | 
 | } | 
 |  | 
 | func level5() { | 
 | 	i := 0    // ERROR "moved to heap: i" | 
 | 	p0 := &i  // ERROR "moved to heap: p0" | 
 | 	p1 := &p0 | 
 | 	p2 := p1 | 
 | 	sink = p2 | 
 | } | 
 |  | 
 | func level6() { | 
 | 	i := 0    // ERROR "moved to heap: i" | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	p2 := p1 | 
 | 	sink = *p2 | 
 | } | 
 |  | 
 | func level7() { | 
 | 	i := 0    // ERROR "moved to heap: i" | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	// note *p1 == &i | 
 | 	p2 := *p1  // ERROR "moved to heap: p2" | 
 | 	sink = &p2 | 
 | } | 
 |  | 
 | func level8() { | 
 | 	i := 0    // ERROR "moved to heap: i" | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	p2 := *p1 | 
 | 	sink = p2 | 
 | } | 
 |  | 
 | func level9() { | 
 | 	i := 0 | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	p2 := *p1 | 
 | 	sink = *p2 // ERROR "\*p2 escapes to heap" | 
 | } | 
 |  | 
 | func level10() { | 
 | 	i := 0 | 
 | 	p0 := &i | 
 | 	p1 := *p0 | 
 | 	p2 := &p1 | 
 | 	sink = *p2 // ERROR "\*p2 escapes to heap" | 
 | } | 
 |  | 
 | func level11() { | 
 | 	i := 0 | 
 | 	p0 := &i | 
 | 	p1 := &p0 | 
 | 	p2 := **p1 // ERROR "moved to heap: p2" | 
 | 	sink = &p2 | 
 | } |