URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [fixedbugs/] [bug285.go] - Rev 700
Compare with Previous | Blame | View Log
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug285// 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.// Test for issue 778: Map key values that are assignment// compatible with the map key type must be accepted according// to the spec: http://golang.org/doc/go_spec.html#Indexes .package maintype T2 struct {x int}func (t *T2) f() int { return t.x }func main() {type B boolb := B(false)mb := make(map[B]int)mb[false] = 42 // this should work: false is assignment compatible with Bmb[b] = 42type Z intz := Z(0)mz := make(map[Z]int)mz[0] = 42mz[z] = 42type S strings := S("foo")ms := make(map[S]int)ms["foo"] = 42ms[s] = 42type T struct {x int}type P *Tp := P(nil)mp := make(map[P]int)mp[nil] = 42mp[p] = 42mp[&T{7}] = 42type C chan intc := make(C)mc := make(map[C]int)mc[nil] = 42mc[c] = 42mc[make(C)] = 42type I1 interface{}type I2 interface {f() int}var i0 interface{} = zvar i1 I1 = pm0 := make(map[interface{}]int)m1 := make(map[I1]int)m2 := make(map[I2]int)m0[i0] = 42m0[i1] = 42m0[z] = 42 // this should work: z is assignment-compatible with interface{}m0[new(struct {x int})] = 42 // this should work: *struct{x int} is assignment-compatible with interface{}m0[p] = 42 // this should work: p is assignment-compatible with interface{}m0[false] = 42 // this should work: false is assignment-compatible with interface{}m0[17] = 42 // this should work: 17 is assignment-compatible with interface{}m0["foo"] = 42 // this should work: "foo" is assignment-compatible with interface{}m1[i0] = 42m1[i1] = 42m1[new(struct {x int})] = 42 // this should work: *struct{x int} is assignment-compatible with I1m1[false] = 42 // this should work: false is assignment-compatible with I1m1[17] = 42 // this should work: 17 is assignment-compatible with I1m1["foo"] = 42 // this should work: "foo" is assignment-compatible with I1m2[new(T2)] = 42 // this should work: *T2 is assignment-compatible with I2}/*6g -e bug286.gobug286.go:23: invalid map index false - need type Bbug286.go:80: invalid map index z - need type interface { }bug286.go:83: invalid map index new(struct { x int }) - need type interface { }bug286.go:84: invalid map index p - need type interface { }bug286.go:85: invalid map index false - need type interface { }bug286.go:86: invalid map index 17 - need type interface { }bug286.go:87: invalid map index "foo" - need type interface { }bug286.go:93: invalid map index new(struct { x int }) - need type I1bug286.go:94: invalid map index false - need type I1bug286.go:95: invalid map index 17 - need type I1bug286.go:96: invalid map index "foo" - need type I1bug286.go:99: invalid map index new(T2) - need type I2bug286.go:100: invalid map index t2 - need type I2*/
