diff options
Diffstat (limited to 'test/fixedbugs/bug494.go')
-rw-r--r-- | test/fixedbugs/bug494.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/fixedbugs/bug494.go b/test/fixedbugs/bug494.go new file mode 100644 index 0000000..42f1879 --- /dev/null +++ b/test/fixedbugs/bug494.go @@ -0,0 +1,51 @@ +// run + +// Copyright 2014 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. + +// Gccgo incorrectly executed functions multiple times when they +// appeared in a composite literal that required a conversion between +// different interface types. + +package main + +type MyInt int + +var c MyInt + +func (c *MyInt) S(i int) { + *c = MyInt(i) +} + +func (c *MyInt) V() int { + return int(*c) +} + +type i1 interface { + S(int) + V() int +} + +type i2 interface { + V() int +} + +type s struct { + i i2 +} + +func f() i1 { + c++ + return &c +} + +func main() { + p := &s{f()} + if v := p.i.V(); v != 1 { + panic(v) + } + if c != 1 { + panic(c) + } +} |