]> 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 a98fd8cbf0b24e883622bd35a63c998e8954d77d..57892f882fa5b48f0d9ed835af1ba76d5a230f0f 100644 (file)
@@ -1,10 +1,10 @@
 // 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.
 
-// Check reordering of assignments.
+// Test reordering of assignments.
 
 package main
 
@@ -19,6 +19,9 @@ func main() {
        p6()
        p7()
        p8()
+       p9()
+       p10()
+       p11()
 }
 
 var gx []int
@@ -42,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
@@ -50,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
@@ -58,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)
@@ -66,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]
@@ -74,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]
@@ -89,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) {
@@ -106,16 +109,59 @@ func p7() {
 }
 
 func p8() {
-       x := []int{1,2,3}
+       m := make(map[int]int)
+       m[0] = len(m)
+       if m[0] != 0 {
+               panic(m[0])
+       }
+}
 
-       defer func() {
-               err := recover()
-               if err == nil {
-                       panic("not panicking")
-               }
-               check(x, 100, 2, 3)
-       }()
+// 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)")
+}
 
-       i := 0
-       i, x[i], x[5] = 1, 100, 500
+//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)
 }