//+build ignore

package main

// Test of interface calls.  None of the concrete types are ever
// instantiated or converted to interfaces.

type I interface {
	f()
}

type J interface {
	f()
	g()
}

type C int // implements I

func (*C) f()

type D int // implements I and J

func (*D) f()
func (*D) g()

func one(i I, j J) {
	i.f() // calls *C and *D
}

func two(i I, j J) {
	j.f() // calls *D (but not *C, even though it defines method f)
}

func three(i I, j J) {
	j.g() // calls *D
}

func four(i I, j J) {
	Jf := J.f
	if unknown {
		Jf = nil // suppress SSA constant propagation
	}
	Jf(nil) // calls *D
}

func five(i I, j J) {
	jf := j.f
	if unknown {
		jf = nil // suppress SSA constant propagation
	}
	jf() // calls *D
}

var unknown bool

// WANT:
// Dynamic calls
//   (J).f$bound --> (*D).f
//   (J).f$thunk --> (*D).f
//   five --> (J).f$bound
//   four --> (J).f$thunk
//   one --> (*C).f
//   one --> (*D).f
//   three --> (*D).g
//   two --> (*D).f
