github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/go/callgraph/vta/testdata/src/ranges.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 B struct { 14 p string 15 } 16 17 func (b B) Foo() string { return b.p } 18 19 func Baz(m map[I]*I) { 20 for i, v := range m { 21 *v = B{p: i.Foo()} 22 } 23 } 24 25 // Relevant SSA: 26 // func Baz(m map[I]*I): 27 // 0: 28 // t0 = range m 29 // jump 1 30 // 1: 31 // t1 = next t0 32 // t2 = extract t1 #0 33 // if t2 goto 2 else 3 34 // 2: 35 // t3 = extract t1 #1 36 // t4 = extract t1 #2 37 // t5 = local B (complit) 38 // t6 = &t5.p [#0] 39 // t7 = invoke t3.Foo() 40 // *t6 = t7 41 // t8 = *t5 42 // t9 = make I <- B (t8) 43 // *t4 = t9 44 // jump 1 45 // 3: 46 // return 47 48 // WANT: 49 // MapKey(testdata.I) -> Local(t1[1]) 50 // Local(t1[1]) -> Local(t3) 51 // MapValue(*testdata.I) -> Local(t1[2]) 52 // Local(t1[2]) -> Local(t4), MapValue(*testdata.I) 53 // Local(t8) -> Local(t9) 54 // Local(t9) -> Local(t4) 55 // Local(t4) -> Local(t1[2])