// 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) } }