github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/callgraph/vta/testdata/src/go117.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 J interface {
    10  	Foo()
    11  	Bar()
    12  }
    13  
    14  type B struct {
    15  	p int
    16  }
    17  
    18  func (b B) Foo() {}
    19  func (b B) Bar() {}
    20  
    21  func Wobble(b *B, s []J) {
    22  	x := (*[3]J)(s)
    23  	x[1] = b
    24  
    25  	a := &s[2]
    26  	(*a).Bar()
    27  }
    28  
    29  // Relevant SSA:
    30  // func Wobble(b *B, s []J):
    31  //   t0 = slice to array pointer *[3]J <- []J (s)                      *[3]J
    32  //   t1 = &t0[1:int]                                                      *J
    33  //   t2 = make J <- *B (b)                                                 J
    34  //   *t1 = t2
    35  //   t3 = &s[2:int]                                                       *J
    36  //   ...
    37  
    38  // WANT:
    39  // Local(t1) -> Slice([]testdata.J)
    40  // Slice([]testdata.J) -> Local(t1), Local(t3)