]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/reorder.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / reorder.go
index fc44be90de7ca5d37d0de24fd36dc0e8d9108db9..57892f882fa5b48f0d9ed835af1ba76d5a230f0f 100644 (file)
@@ -19,6 +19,9 @@ func main() {
        p6()
        p7()
        p8()
+       p9()
+       p10()
+       p11()
 }
 
 var gx []int
@@ -112,3 +115,53 @@ func p8() {
                panic(m[0])
        }
 }
+
+// Issue #13433: Left-to-right assignment of OAS2XXX nodes.
+func p9() {
+       var x bool
+
+       // OAS2FUNC
+       x, x = fn()
+       checkOAS2XXX(x, "x, x = fn()")
+
+       // OAS2RECV
+       var c = make(chan bool, 10)
+       c <- false
+       x, x = <-c
+       checkOAS2XXX(x, "x, x <-c")
+
+       // OAS2MAPR
+       var m = map[int]bool{0: false}
+       x, x = m[0]
+       checkOAS2XXX(x, "x, x = m[0]")
+
+       // OAS2DOTTYPE
+       var i interface{} = false
+       x, x = i.(bool)
+       checkOAS2XXX(x, "x, x = i.(bool)")
+}
+
+//go:noinline
+func fn() (bool, bool) { return false, true }
+
+// checks the order of OAS2XXX.
+func checkOAS2XXX(x bool, s string) {
+       if !x {
+               fmt.Printf("%s; got=(false); want=(true)\n", s)
+               panic("failed")
+       }
+}
+
+//go:noinline
+func fp() (*int, int) { return nil, 42 }
+
+func p10() {
+       p := new(int)
+       p, *p = fp()
+}
+
+func p11() {
+       var i interface{}
+       p := new(bool)
+       p, *p = i.(*bool)
+}