...
Run Format

Source file test/fixedbugs/bug494.go

Documentation: test/fixedbugs

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

View as plain text