|  | // run | 
|  |  | 
|  | // Copyright 2010 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. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "errors" | 
|  | "strconv" | 
|  | ) | 
|  |  | 
|  | var trace string | 
|  |  | 
|  | func f() string { | 
|  | trace += "f" | 
|  | return "abc" | 
|  | } | 
|  |  | 
|  | func g() *error { | 
|  | trace += "g" | 
|  | var x error | 
|  | return &x | 
|  | } | 
|  |  | 
|  | func h() string { | 
|  | trace += "h" | 
|  | return "123" | 
|  | } | 
|  |  | 
|  | func i() *int { | 
|  | trace += "i" | 
|  | var i int | 
|  | return &i | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | m := make(map[string]int) | 
|  | m[f()], *g() = strconv.Atoi(h()) | 
|  | if m["abc"] != 123 || trace != "fgh" { | 
|  | println("BUG", m["abc"], trace) | 
|  | panic("fail") | 
|  | } | 
|  | mm := make(map[string]error) | 
|  | trace = "" | 
|  | mm["abc"] = errors.New("invalid") | 
|  | *i(), mm[f()] = strconv.Atoi(h()) | 
|  | if mm["abc"] != nil || trace != "ifh" { | 
|  | println("BUG1", mm["abc"], trace) | 
|  | panic("fail") | 
|  | } | 
|  | } |