| // run |
| |
| // Copyright 2014 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. |
| |
| // Test order of calls to builtin functions. |
| // Discovered during CL 144530045 review. |
| |
| package main |
| |
| func main() { |
| // append |
| { |
| x := make([]int, 0) |
| f := func() int { x = make([]int, 2); return 2 } |
| a, b, c := append(x, 1), f(), append(x, 1) |
| if len(a) != 1 || len(c) != 3 { |
| bug() |
| println("append call not ordered:", len(a), b, len(c)) |
| } |
| } |
| |
| // cap |
| { |
| x := make([]int, 1) |
| f := func() int { x = make([]int, 3); return 2 } |
| a, b, c := cap(x), f(), cap(x) |
| if a != 1 || c != 3 { |
| bug() |
| println("cap call not ordered:", a, b, c) |
| } |
| } |
| |
| // complex |
| { |
| x := 1.0 |
| f := func() int { x = 3; return 2 } |
| a, b, c := complex(x, 0), f(), complex(x, 0) |
| if real(a) != 1 || real(c) != 3 { |
| bug() |
| println("complex call not ordered:", a, b, c) |
| } |
| } |
| |
| // copy |
| { |
| tmp := make([]int, 100) |
| x := make([]int, 1) |
| f := func() int { x = make([]int, 3); return 2 } |
| a, b, c := copy(tmp, x), f(), copy(tmp, x) |
| if a != 1 || c != 3 { |
| bug() |
| println("copy call not ordered:", a, b, c) |
| } |
| } |
| |
| // imag |
| { |
| x := 1i |
| f := func() int { x = 3i; return 2 } |
| a, b, c := imag(x), f(), imag(x) |
| if a != 1 || c != 3 { |
| bug() |
| println("imag call not ordered:", a, b, c) |
| } |
| } |
| |
| // len |
| { |
| x := make([]int, 1) |
| f := func() int { x = make([]int, 3); return 2 } |
| a, b, c := len(x), f(), len(x) |
| if a != 1 || c != 3 { |
| bug() |
| println("len call not ordered:", a, b, c) |
| } |
| } |
| |
| // make |
| { |
| x := 1 |
| f := func() int { x = 3; return 2 } |
| a, b, c := make([]int, x), f(), make([]int, x) |
| if len(a) != 1 || len(c) != 3 { |
| bug() |
| println("make call not ordered:", len(a), b, len(c)) |
| } |
| } |
| |
| // real |
| { |
| x := 1 + 0i |
| f := func() int { x = 3; return 2 } |
| a, b, c := real(x), f(), real(x) |
| if a != 1 || c != 3 { |
| bug() |
| println("real call not ordered:", a, b, c) |
| } |
| } |
| } |
| |
| var bugged = false |
| |
| func bug() { |
| if !bugged { |
| println("BUG") |
| bugged = true |
| } |
| } |