|  | // run | 
|  |  | 
|  | // Copyright 2012 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. | 
|  |  | 
|  | // Issue 4167: inlining of a (*T).Method expression taking | 
|  | // its arguments from a multiple return breaks the compiler. | 
|  |  | 
|  | package main | 
|  |  | 
|  | type pa []int | 
|  |  | 
|  | type p int | 
|  |  | 
|  | func (this *pa) func1() (v *p, c int) { | 
|  | for _ = range *this { | 
|  | c++ | 
|  | } | 
|  | v = (*p)(&c) | 
|  | return | 
|  | } | 
|  |  | 
|  | func (this *pa) func2() p { | 
|  | return (*p).func3(this.func1()) | 
|  | } | 
|  |  | 
|  | func (this *p) func3(f int) p { | 
|  | return *this | 
|  | } | 
|  |  | 
|  | func (this *pa) func2dots() p { | 
|  | return (*p).func3(this.func1()) | 
|  | } | 
|  |  | 
|  | func (this *p) func3dots(f ...int) p { | 
|  | return *this | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | arr := make(pa, 13) | 
|  | length := arr.func2() | 
|  | if int(length) != len(arr) { | 
|  | panic("length != len(arr)") | 
|  | } | 
|  | length = arr.func2dots() | 
|  | if int(length) != len(arr) { | 
|  | panic("length != len(arr)") | 
|  | } | 
|  | } |