pass_map_ptr_value.go raw
1 package main
2
3 type PtrItem struct {
4 Value int32
5 }
6
7 type PtrContainer struct {
8 Items map[string]*PtrItem
9 First *PtrItem
10 }
11
12 func makePtrContainer() (c PtrContainer) {
13 c.Items = map[string]*PtrItem{}
14 item := &PtrItem{Value: 42}
15 c.Items["a"] = item
16 c.First = item
17 return
18 }
19
20 func makePtrContainerPtr() (c *PtrContainer) {
21 c = &PtrContainer{}
22 c.Items = map[string]*PtrItem{}
23 item := &PtrItem{Value: 99}
24 c.Items["b"] = item
25 c.First = item
26 return
27 }
28
29 type NestedMapStruct struct {
30 Inner NestedInner
31 Tag int32
32 }
33
34 type NestedInner struct {
35 M map[string]int32
36 }
37
38 func makeNested() (n NestedMapStruct) {
39 n = NestedMapStruct{
40 Inner: NestedInner{M: map[string]int32{"n": 7, "m": 8}},
41 Tag: 123,
42 }
43 return
44 }
45
46 func main() {
47 c := makePtrContainer()
48 if c.First.Value == 42 && c.Items["a"].Value == 42 {
49 println("PASS:map-ptr-value-reloc")
50 } else {
51 println("FAIL:map-ptr-value-reloc")
52 }
53
54 cp := makePtrContainerPtr()
55 if cp.First.Value == 99 && cp.Items["b"].Value == 99 {
56 println("PASS:map-ptr-value-ptr-reloc")
57 } else {
58 println("FAIL:map-ptr-value-ptr-reloc")
59 }
60
61 n := makeNested()
62 if n.Inner.M["n"] == 7 && n.Inner.M["m"] == 8 && n.Tag == 123 {
63 println("PASS:map-nested-struct-return")
64 } else {
65 println("FAIL:map-nested-struct-return")
66 }
67 }
68