1// run 2 3// Copyright 2010 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 7package main 8 9import ( 10 "errors" 11 "strconv" 12) 13 14var trace string 15 16func f() string { 17 trace += "f" 18 return "abc" 19} 20 21func g() *error { 22 trace += "g" 23 var x error 24 return &x 25} 26 27func h() string { 28 trace += "h" 29 return "123" 30} 31 32func i() *int { 33 trace += "i" 34 var i int 35 return &i 36} 37 38func main() { 39 m := make(map[string]int) 40 m[f()], *g() = strconv.Atoi(h()) 41 if m["abc"] != 123 || trace != "fgh" { 42 println("BUG", m["abc"], trace) 43 panic("fail") 44 } 45 mm := make(map[string]error) 46 trace = "" 47 mm["abc"] = errors.New("invalid") 48 *i(), mm[f()] = strconv.Atoi(h()) 49 if mm["abc"] != nil || trace != "ifh" { 50 println("BUG1", mm["abc"], trace) 51 panic("fail") 52 } 53} 54