github.com/yanyiwu/go@v0.0.0-20150106053140-03d6637dbb7f/test/fixedbugs/bug491.go (about) 1 // run 2 3 // Copyright 2014 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // Test order of calls to builtin functions. 8 // Discovered during CL 144530045 review. 9 10 package main 11 12 func main() { 13 // append 14 { 15 x := make([]int, 0) 16 f := func() int { x = make([]int, 2); return 2 } 17 a, b, c := append(x, 1), f(), append(x, 1) 18 if len(a) != 1 || len(c) != 3 { 19 bug() 20 println("append call not ordered:", len(a), b, len(c)) 21 } 22 } 23 24 // cap 25 { 26 x := make([]int, 1) 27 f := func() int { x = make([]int, 3); return 2 } 28 a, b, c := cap(x), f(), cap(x) 29 if a != 1 || c != 3 { 30 bug() 31 println("cap call not ordered:", a, b, c) 32 } 33 } 34 35 // complex 36 { 37 x := 1.0 38 f := func() int { x = 3; return 2 } 39 a, b, c := complex(x, 0), f(), complex(x, 0) 40 if real(a) != 1 || real(c) != 3 { 41 bug() 42 println("complex call not ordered:", a, b, c) 43 } 44 } 45 46 // copy 47 { 48 tmp := make([]int, 100) 49 x := make([]int, 1) 50 f := func() int { x = make([]int, 3); return 2 } 51 a, b, c := copy(tmp, x), f(), copy(tmp, x) 52 if a != 1 || c != 3 { 53 bug() 54 println("copy call not ordered:", a, b, c) 55 } 56 } 57 58 // imag 59 { 60 x := 1i 61 f := func() int { x = 3i; return 2 } 62 a, b, c := imag(x), f(), imag(x) 63 if a != 1 || c != 3 { 64 bug() 65 println("imag call not ordered:", a, b, c) 66 } 67 } 68 69 // len 70 { 71 x := make([]int, 1) 72 f := func() int { x = make([]int, 3); return 2 } 73 a, b, c := len(x), f(), len(x) 74 if a != 1 || c != 3 { 75 bug() 76 println("len call not ordered:", a, b, c) 77 } 78 } 79 80 // make 81 { 82 x := 1 83 f := func() int { x = 3; return 2 } 84 a, b, c := make([]int, x), f(), make([]int, x) 85 if len(a) != 1 || len(c) != 3 { 86 bug() 87 println("make call not ordered:", len(a), b, len(c)) 88 } 89 } 90 91 // real 92 { 93 x := 1 + 0i 94 f := func() int { x = 3; return 2 } 95 a, b, c := real(x), f(), real(x) 96 if a != 1 || c != 3 { 97 bug() 98 println("real call not ordered:", a, b, c) 99 } 100 } 101 } 102 103 var bugged = false 104 105 func bug() { 106 if !bugged { 107 println("BUG") 108 bugged = true 109 } 110 }