// 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" "&i escapes to heap"
	p1 := &p0  // ERROR "moved to heap: p1" "&p0 escapes to heap"
	p2 := &p1  // ERROR "moved to heap: p2" "&p1 escapes to heap"
	sink = &p2 // ERROR "&p2 escapes to heap"
}

func level1() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "moved to heap: p0" "&i escapes to heap"
	p1 := &p0 // ERROR "moved to heap: p1" "&p0 escapes to heap"
	p2 := &p1 // ERROR "&p1 escapes to heap"
	sink = p2
}

func level2() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "moved to heap: p0" "&i escapes to heap"
	p1 := &p0 // ERROR "&p0 escapes to heap"
	p2 := &p1 // ERROR "&p1 does not escape"
	sink = *p2
}

func level3() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "&i escapes to heap"
	p1 := &p0 // ERROR "&p0 does not escape"
	p2 := &p1 // ERROR "&p1 does not escape"
	sink = **p2
}

func level4() {
	i := 0     // ERROR "moved to heap: i"
	p0 := &i   // ERROR "moved to heap: p0" "&i escapes to heap"
	p1 := &p0  // ERROR "&p0 escapes to heap"
	p2 := p1   // ERROR "moved to heap: p2"
	sink = &p2 // ERROR "&p2 escapes to heap"
}

func level5() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "moved to heap: p0" "&i escapes to heap"
	p1 := &p0 // ERROR "&p0 escapes to heap"
	p2 := p1
	sink = p2
}

func level6() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "&i escapes to heap"
	p1 := &p0 // ERROR "&p0 does not escape"
	p2 := p1
	sink = *p2
}

func level7() {
	i := 0     // ERROR "moved to heap: i"
	p0 := &i   // ERROR "moved to heap: p0" "&i escapes to heap"
	// BAD: p0 should not escape here
	p1 := &p0  // ERROR "&p0 escapes to heap"
	p2 := *p1  // ERROR "moved to heap: p2"
	sink = &p2 // ERROR "&p2 escapes to heap"
}

func level8() {
	i := 0    // ERROR "moved to heap: i"
	p0 := &i  // ERROR "&i escapes to heap"
	p1 := &p0 // ERROR "&p0 does not escape"
	p2 := *p1
	sink = p2
}

func level9() {
	i := 0
	p0 := &i  // ERROR "&i does not escape"
	p1 := &p0 // ERROR "&p0 does not escape"
	p2 := *p1
	sink = *p2
}

func level10() {
	i := 0
	p0 := &i // ERROR "&i does not escape"
	p1 := *p0
	p2 := &p1 // ERROR "&p1 does not escape"
	sink = *p2
}

func level11() {
	i := 0
	p0 := &i   // ERROR "&i does not escape"
	p1 := &p0  // ERROR "&p0 does not escape"
	p2 := **p1 // ERROR "moved to heap: p2"
	sink = &p2 // ERROR "&p2 escapes to heap"
}
