diff options
Diffstat (limited to 'test/fixedbugs')
-rw-r--r-- | test/fixedbugs/bug223.go | 4 | ||||
-rw-r--r-- | test/fixedbugs/bug388.go | 8 | ||||
-rw-r--r-- | test/fixedbugs/bug424.dir/lib.go | 16 | ||||
-rw-r--r-- | test/fixedbugs/bug424.go | 99 | ||||
-rw-r--r-- | test/fixedbugs/bug427.go | 39 | ||||
-rw-r--r-- | test/fixedbugs/bug428.go | 19 |
6 files changed, 179 insertions, 6 deletions
diff --git a/test/fixedbugs/bug223.go b/test/fixedbugs/bug223.go index 80f9cae81..eccf574a1 100644 --- a/test/fixedbugs/bug223.go +++ b/test/fixedbugs/bug223.go @@ -1,4 +1,4 @@ -// (! $G $D/$F.go) | grep 'initialization loop' >/dev/null || echo BUG: bug223 +// errorcheck // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style @@ -18,4 +18,4 @@ func f() { } } -var m = map[string]F{"f": f} +var m = map[string]F{"f": f} // ERROR "initialization loop" diff --git a/test/fixedbugs/bug388.go b/test/fixedbugs/bug388.go index aa4cc5a97..d41f9ea54 100644 --- a/test/fixedbugs/bug388.go +++ b/test/fixedbugs/bug388.go @@ -9,13 +9,13 @@ package main import "runtime" -func foo(runtime.UintType, i int) { // ERROR "cannot declare name runtime.UintType|named/anonymous mix" - println(i, runtime.UintType) +func foo(runtime.UintType, i int) { // ERROR "cannot declare name runtime.UintType|named/anonymous mix|undefined identifier" + println(i, runtime.UintType) // GCCGO_ERROR "undefined identifier" } func bar(i int) { - runtime.UintType := i // ERROR "cannot declare name runtime.UintType|non-name on left side" - println(runtime.UintType) // GCCGO_ERROR "invalid use of type" + runtime.UintType := i // ERROR "cannot declare name runtime.UintType|non-name on left side|undefined identifier" + println(runtime.UintType) // GCCGO_ERROR "invalid use of type|undefined identifier" } func baz() { diff --git a/test/fixedbugs/bug424.dir/lib.go b/test/fixedbugs/bug424.dir/lib.go new file mode 100644 index 000000000..97054da3a --- /dev/null +++ b/test/fixedbugs/bug424.dir/lib.go @@ -0,0 +1,16 @@ +// Copyright 2012 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 lib + +type I interface { + m() string +} + +type T struct{} + +// m is not accessible from outside this package. +func (t *T) m() string { + return "lib.T.m" +} diff --git a/test/fixedbugs/bug424.go b/test/fixedbugs/bug424.go new file mode 100644 index 000000000..42cff54d4 --- /dev/null +++ b/test/fixedbugs/bug424.go @@ -0,0 +1,99 @@ +// $G $D/$F.dir/lib.go && $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2012 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. + +// Tests that method calls through an interface always +// call the locally defined method localT.m independent +// at which embedding level it is and in which order +// embedding is done. + +package main + +import "./lib" +import "reflect" +import "fmt" + +type localI interface { + m() string +} + +type localT struct{} + +func (t *localT) m() string { + return "main.localT.m" +} + +type myT1 struct { + localT +} + +type myT2 struct { + localT + lib.T +} + +type myT3 struct { + lib.T + localT +} + +func main() { + var i localI + + i = new(localT) + if i.m() != "main.localT.m" { + println("BUG: localT:", i.m(), "called") + } + + i = new(myT1) + if i.m() != "main.localT.m" { + println("BUG: myT1:", i.m(), "called") + } + + i = new(myT2) + if i.m() != "main.localT.m" { + println("BUG: myT2:", i.m(), "called") + } + + t3 := new(myT3) + if t3.m() != "main.localT.m" { + println("BUG: t3:", t3.m(), "called") + } + + i = new(myT3) + if i.m() != "main.localT.m" { + t := reflect.TypeOf(i) + n := t.NumMethod() + for j := 0; j < n; j++ { + m := t.Method(j) + fmt.Printf("#%d: %s.%s %s\n", j, m.PkgPath, m.Name, m.Type) + } + println("BUG: myT3:", i.m(), "called") + } + + var t4 struct { + localT + lib.T + } + if t4.m() != "main.localT.m" { + println("BUG: t4:", t4.m(), "called") + } + i = &t4 + if i.m() != "main.localT.m" { + println("BUG: myT4:", i.m(), "called") + } + + var t5 struct { + lib.T + localT + } + if t5.m() != "main.localT.m" { + println("BUG: t5:", t5.m(), "called") + } + i = &t5 + if i.m() != "main.localT.m" { + println("BUG: myT5:", i.m(), "called") + } +} diff --git a/test/fixedbugs/bug427.go b/test/fixedbugs/bug427.go new file mode 100644 index 000000000..1239e7a33 --- /dev/null +++ b/test/fixedbugs/bug427.go @@ -0,0 +1,39 @@ +// compile + +// Copyright 2012 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. + +// http://code.google.com/p/go/issues/detail?id=3351 + +package main + +// struct with four fields of basic type +type S struct {a, b, c, d int} + +// struct with five fields of basic type +type T struct {a, b, c, d, e int} + +// array with four elements +type A [4]int + +// array with five elements +type B [5]int + +func main() { + var i interface{} + + var s1, s2 S + i = s1 == s2 + + var t1, t2 T + i = t1 == t2 + + var a1, a2 A + i = a1 == a2 + + var b1, b2 B + i = b1 == b2 + + _ = i +} diff --git a/test/fixedbugs/bug428.go b/test/fixedbugs/bug428.go new file mode 100644 index 000000000..298c45518 --- /dev/null +++ b/test/fixedbugs/bug428.go @@ -0,0 +1,19 @@ +// run + +// Copyright 2012 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 that when the compiler expands append inline it does not +// overwrite a value before it needs it (issue 3369). + +package main + +func main() { + s := make([]byte, 5, 6) + copy(s, "12346") + s = append(s[:len(s)-1], '5', s[len(s)-1]) + if string(s) != "123456" { + panic(s) + } +} |