github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/callgraph/vta/testdata/src/returns.go (about)

     1  // Copyright 2021 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // go:build ignore
     6  
     7  package testdata
     8  
     9  type I interface{}
    10  
    11  func Bar(ii I) (I, I) {
    12  	return Foo(ii)
    13  }
    14  
    15  func Foo(iii I) (I, I) {
    16  	return iii, iii
    17  }
    18  
    19  func Do(j I) *I {
    20  	return &j
    21  }
    22  
    23  func Baz(i I) *I {
    24  	Bar(i)
    25  	return Do(i)
    26  }
    27  
    28  // Relevant SSA:
    29  // func Bar(ii I) (I, I):
    30  //   t0 = Foo(ii)
    31  //   t1 = extract t0 #0
    32  //   t2 = extract t0 #1
    33  //   return t1, t2
    34  //
    35  // func Foo(iii I) (I, I):
    36  //   return iii, iii
    37  //
    38  // func Do(j I) *I:
    39  //   t0 = new I (j)
    40  //   *t0 = j
    41  //   return t0
    42  //
    43  // func Baz(i I):
    44  //   t0 = Bar(i)
    45  //   t1 = Do(i)
    46  //   return t1
    47  
    48  // t0 and t1 in the last edge correspond to the nodes
    49  // of Do and Baz. This edge is induced by Do(i).
    50  
    51  // WANT:
    52  // Local(i) -> Local(ii), Local(j)
    53  // Local(ii) -> Local(iii)
    54  // Local(iii) -> Local(t0[0]), Local(t0[1])
    55  // Local(t1) -> Local(t0[0])
    56  // Local(t2) -> Local(t0[1])
    57  // Local(t0) -> Local(t1)