Test of elimination of calls to functions with completely empty bodies.
The arguments must still be evaluated and their results discarded.
The number of discard blanks must match the type, not the syntax (see 2-ary f).
If there are no arguments, the entire call is eliminated.

We cannot eliminate some pure argument expressions because they
may contain the last reference to a local variable.

-- go.mod --
module testdata
go 1.12

-- a/a0.go --
package a

func _() {
	empty() //@ inline(re"empty", empty0)
}

func empty(...any) {}

-- empty0 --
package a

func _() {
	//@ inline(re"empty", empty0)
}

func empty(...any) {}

-- a/a1.go --
package a

func _(ch chan int) {
	empty(f()) //@ inline(re"empty", empty1)
}

func f() (int, int)

-- empty1 --
package a

func _(ch chan int) {
	_, _ = f() //@ inline(re"empty", empty1)
}

func f() (int, int)

-- a/a2.go --
package a

func _(ch chan int) {
	empty(-1, ch, len(""), g(), <-ch) //@ inline(re"empty", empty2)
}

func g() int

-- empty2 --
package a

func _(ch chan int) {
	_ = []any{-1, ch, len(""), g(), <-ch} //@ inline(re"empty", empty2)
}

func g() int

-- a/a3.go --
package a

func _() {
	new(T).empty() //@ inline(re"empty", empty3)
}

type T int

func (T) empty() int {}

-- empty3 --
package a

func _() {
	//@ inline(re"empty", empty3)
}

type T int

func (T) empty() int {}

-- a/a4.go --
package a

func _() {
	var x T
	x.empty() //@ inline(re"empty", empty4)
}

-- empty4 --
package a

func _() {
	var x T
	_ = x //@ inline(re"empty", empty4)
}
