mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 10:40:57 +00:00 
			
		
		
		
	
		
			
	
	
		
			52 lines
		
	
	
	
		
			695 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
	
		
			695 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// 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)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |