...
Run Format

Source file test/fixedbugs/bug286.go

Documentation: test/fixedbugs

  // run
  
  // Copyright 2010 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.
  
  // Test case for issue 849.
  
  package main
  
  type I interface {
  	f()
  }
  
  var callee string
  var error_ bool
  
  type T int
  
  func (t *T) f() { callee = "f" }
  func (i *T) g() { callee = "g" }
  
  // test1 and test2 are the same except that in the interface J
  // the entries are swapped. test2 and test3 are the same except
  // that in test3 the interface J is declared outside the function.
  //
  // Error: test2 calls g instead of f
  
  func test1(x I) {
  	type J interface {
  		I
  		g()
  	}
  	x.(J).f()
  	if callee != "f" {
  		println("test1 called", callee)
  		error_ = true
  	}
  }
  
  func test2(x I) {
  	type J interface {
  		g()
  		I
  	}
  	x.(J).f()
  	if callee != "f" {
  		println("test2 called", callee)
  		error_ = true
  	}
  }
  
  type J interface {
  	g()
  	I
  }
  
  func test3(x I) {
  	x.(J).f()
  	if callee != "f" {
  		println("test3 called", callee)
  		error_ = true
  	}
  }
  
  func main() {
  	x := new(T)
  	test1(x)
  	test2(x)
  	test3(x)
  	if error_ {
  		panic("wrong method called")
  	}
  }
  
  /*
  6g bug286.go && 6l bug286.6 && 6.out
  test2 called g
  panic: wrong method called
  
  panic PC=0x24e040
  runtime.panic+0x7c /home/gri/go1/src/pkg/runtime/proc.c:1012
  	runtime.panic(0x0, 0x24e0a0)
  main.main+0xef /home/gri/go1/test/bugs/bug286.go:76
  	main.main()
  mainstart+0xf /home/gri/go1/src/pkg/runtime/amd64/asm.s:60
  	mainstart()
  goexit /home/gri/go1/src/pkg/runtime/proc.c:145
  	goexit()
  */
  

View as plain text