github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/test/fixedbugs/bug262.go (about)

     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  
     7  package main
     8  
     9  import (
    10  	"errors"
    11  	"strconv"
    12  )
    13  
    14  var trace string
    15  
    16  func f() string {
    17  	trace += "f"
    18  	return "abc"
    19  }
    20  
    21  func g() *error {
    22  	trace += "g"
    23  	var x error
    24  	return &x
    25  }
    26  
    27  func h() string {
    28  	trace += "h"
    29  	return "123"
    30  }
    31  
    32  func i() *int {
    33  	trace += "i"
    34  	var i int
    35  	return &i
    36  }
    37  
    38  func 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  }