From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/go.test/test/fixedbugs/bug285.go | 116 +++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 gcc/testsuite/go.test/test/fixedbugs/bug285.go (limited to 'gcc/testsuite/go.test/test/fixedbugs/bug285.go') diff --git a/gcc/testsuite/go.test/test/fixedbugs/bug285.go b/gcc/testsuite/go.test/test/fixedbugs/bug285.go new file mode 100644 index 000000000..544d3487e --- /dev/null +++ b/gcc/testsuite/go.test/test/fixedbugs/bug285.go @@ -0,0 +1,116 @@ +// $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 main + +type T2 struct { + x int +} + +func (t *T2) f() int { return t.x } + +func main() { + type B bool + b := B(false) + mb := make(map[B]int) + mb[false] = 42 // this should work: false is assignment compatible with B + mb[b] = 42 + + type Z int + z := Z(0) + mz := make(map[Z]int) + mz[0] = 42 + mz[z] = 42 + + type S string + s := S("foo") + ms := make(map[S]int) + ms["foo"] = 42 + ms[s] = 42 + + type T struct { + x int + } + type P *T + p := P(nil) + mp := make(map[P]int) + mp[nil] = 42 + mp[p] = 42 + mp[&T{7}] = 42 + + type F func(x int) + f := func(x int) {} + mf := make(map[F]int) + mf[nil] = 42 + mf[f] = 42 + mf[func(x int) {}] = 42 + + type M map[int]int + m := make(M) + mm := make(map[M]int) + mm[nil] = 42 + mm[m] = 42 + mm[make(M)] = 42 + + type C chan int + c := make(C) + mc := make(map[C]int) + mc[nil] = 42 + mc[c] = 42 + mc[make(C)] = 42 + + type I1 interface{} + type I2 interface { + f() int + } + var i0 interface{} = z + var i1 I1 = p + m0 := make(map[interface{}]int) + m1 := make(map[I1]int) + m2 := make(map[I2]int) + m0[i0] = 42 + m0[i1] = 42 + m0[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] = 42 + m1[i1] = 42 + m1[new(struct { + x int + })] = 42 // this should work: *struct{x int} is assignment-compatible with I1 + m1[false] = 42 // this should work: false is assignment-compatible with I1 + m1[17] = 42 // this should work: 17 is assignment-compatible with I1 + m1["foo"] = 42 // this should work: "foo" is assignment-compatible with I1 + + m2[new(T2)] = 42 // this should work: *T2 is assignment-compatible with I2 +} + +/* +6g -e bug286.go +bug286.go:23: invalid map index false - need type B +bug286.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 I1 +bug286.go:94: invalid map index false - need type I1 +bug286.go:95: invalid map index 17 - need type I1 +bug286.go:96: invalid map index "foo" - need type I1 +bug286.go:99: invalid map index new(T2) - need type I2 +bug286.go:100: invalid map index t2 - need type I2 +*/ -- cgit v1.2.3