]> 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 0cdeebd0f3160f4c303bf65383adeb6375c62c07..57892f882fa5b48f0d9ed835af1ba76d5a230f0f 100644 (file)
@@ -1,6 +1,6 @@
 // run
 
-// Copyright 2011 The Go Authors.  All rights reserved.
+// Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
@@ -20,6 +20,8 @@ func main() {
        p7()
        p8()
        p9()
+       p10()
+       p11()
 }
 
 var gx []int
@@ -43,7 +45,7 @@ func check3(x, y, z, xx, yy, zz int) {
 }
 
 func p1() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        i, x[i] = 1, 100
        _ = i
@@ -51,7 +53,7 @@ func p1() {
 }
 
 func p2() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        i := 0
        x[i], i = 100, 1
        _ = i
@@ -59,7 +61,7 @@ func p2() {
 }
 
 func p3() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = f(0), f(1)
@@ -67,7 +69,7 @@ func p3() {
 }
 
 func p4() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        gx = x
        x[1], y[0] = gx[0], gx[1]
@@ -75,7 +77,7 @@ func p4() {
 }
 
 func p5() {
-       x := []int{1,2,3}
+       x := []int{1, 2, 3}
        y := x
        p := &x[0]
        q := &x[1]
@@ -90,7 +92,7 @@ func p6() {
        px := &x
        py := &y
        *px, *py = y, x
-       check3(x, y, z, 2, 1, 3)        
+       check3(x, y, z, 2, 1, 3)
 }
 
 func f1(x, y, z int) (xx, yy, zz int) {
@@ -107,24 +109,59 @@ func p7() {
 }
 
 func p8() {
-       x := []int{1,2,3}
-
-       defer func() {
-               err := recover()
-               if err == nil {
-                       panic("not panicking")
-               }
-               check(x, 100, 2, 3)
-       }()
-
-       i := 0
-       i, x[i], x[5] = 1, 100, 500
-}
-
-func p9() {
        m := make(map[int]int)
        m[0] = len(m)
        if m[0] != 0 {
                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)
+}