...
Run Format

Source file test/devirt.go

Documentation: test

  // errorcheck -0 -d=ssa/opt/debug=3
  
  package main
  
  // Trivial interface call devirtualization test.
  
  type real struct {
  	value int
  }
  
  func (r *real) Value() int { return r.value }
  
  type Valuer interface {
  	Value() int
  }
  
  type indirectiface struct {
  	a, b, c int
  }
  
  func (i indirectiface) Value() int {
  	return i.a + i.b + i.c
  }
  
  func main() {
  	var r Valuer
  	rptr := &real{value: 3}
  	r = rptr
  
  	if r.Value() != 3 { // ERROR "de-virtualizing call$"
  		panic("not 3")
  	}
  
  	// Can't do types that aren't "direct" interfaces (yet).
  	r = indirectiface{3, 4, 5}
  	if r.Value() != 12 {
  		panic("not 12")
  	}
  }
  

View as plain text