// 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 } }