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