github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/callgraph/vta/testdata/src/maps.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  	Foo() string
    11  }
    12  
    13  type J interface {
    14  	Foo() string
    15  	Bar()
    16  }
    17  
    18  type B struct {
    19  	p string
    20  }
    21  
    22  func (b B) Foo() string { return b.p }
    23  func (b B) Bar()        {}
    24  
    25  func Baz(m map[I]I, b1, b2 B, n map[string]*J) *J {
    26  	m[b1] = b2
    27  
    28  	return n[b1.Foo()]
    29  }
    30  
    31  // Relevant SSA:
    32  // func Baz(m map[I]I, b1 B, b2 B, n map[string]*J) *J:
    33  //   t0 = local B (b1)
    34  //   *t0 = b1
    35  //   t1 = local B (b2)
    36  //   *t1 = b2
    37  //   t2 = *t0
    38  //   t3 = make I <- B (t2)
    39  //   t4 = *t1
    40  //   t5 = make I <- B (t4)
    41  //   m[t3] = t5
    42  //   t6 = *t0
    43  //   t7 = (B).Foo(t6)
    44  //   t8 = n[t7]
    45  //   return t8
    46  
    47  // WANT:
    48  // Local(t4) -> Local(t5)
    49  // Local(t5) -> MapValue(testdata.I)
    50  // Local(t3) -> MapKey(testdata.I)
    51  // Local(t8) -> MapValue(*testdata.J)
    52  // MapValue(*testdata.J) -> Local(t8)