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