ssa: index check take address

This commit is contained in:
visualfc
2024-07-03 13:21:18 +08:00
parent 28d8c56534
commit 490a16a8df
8 changed files with 1154 additions and 548 deletions

View File

@@ -1,8 +1,13 @@
package main
type N [1]int
func main() {
make1()
make2()
make3()
make4()
}
func make1() {
m := make(map[int]string)
m[1] = "hello"
m[2] = "world"
@@ -30,18 +35,55 @@ func main() {
if len(s) != 2 {
panic("bad len")
}
}
type N1 [1]int
func make2() {
m2 := make(map[int]string)
println(m2, len(m2), m2 == nil, m2 != nil)
var m3 map[int]string
println(m3, len(m3), m3 == nil, m3 != nil)
n := make(map[any]int)
n[N{1}] = 100
n[N{2}] = 200
n[N{3}] = 300
n[N{2}] = -200
n[N1{1}] = 100
n[N1{2}] = 200
n[N1{3}] = 300
n[N1{2}] = -200
for k, v := range n {
println(k.(N)[0], v)
println(k.(N1)[0], v)
}
}
type N struct {
n1 int8
n2 int8
}
type K [1]N
type K2 [1]*N
func make3() {
var a any = K{N{1, 2}}
var b any = K{N{1, 2}}
println(a == b)
m := make(map[any]int)
m[K{N{1, 2}}] = 100
m[K{N{3, 4}}] = 200
for k, v := range m {
println(k.(K)[0].n1, v)
}
}
func make4() {
var a any = K2{&N{1, 2}}
var b any = K2{&N{1, 2}}
println(a == b)
m := make(map[any]int)
m[K2{&N{1, 2}}] = 100
m[K2{&N{3, 4}}] = 200
for k, v := range m {
println(k.(K2)[0].n1, v)
}
}