github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/callgraph/vta/testdata/src/phi.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 A struct{}
    10  type B struct{}
    11  
    12  type I interface{ foo() }
    13  
    14  func (a A) foo() {}
    15  func (b B) foo() {}
    16  
    17  func Baz(b B, c bool) {
    18  	var i I
    19  	if c {
    20  		i = b
    21  	} else {
    22  		a := A{}
    23  		i = a
    24  	}
    25  	i.foo()
    26  }
    27  
    28  // Relevant SSA:
    29  // func Baz(b B, c bool):
    30  // 0:
    31  //  t0 = local B (b)
    32  //  *t0 = b
    33  //  if c goto 1 else 3
    34  //
    35  // 1:
    36  //  t1 = *t0
    37  //  t2 = make I <- B (t1)
    38  //  jump 2
    39  //
    40  // 2:
    41  //  t3 = phi [1: t2, 3: t7] #i
    42  //  t4 = invoke t3.foo()
    43  //  return
    44  //
    45  // 3:
    46  //  t5 = local A (a)
    47  //  t6 = *t5
    48  //  t7 = make I <- A (t6)
    49  //  jump 2
    50  
    51  // WANT:
    52  // Local(t1) -> Local(t2)
    53  // Local(t2) -> Local(t3)
    54  // Local(t7) -> Local(t3)
    55  // Local(t6) -> Local(t7)