package fixtures

import "errors"

type tt int

func (t tt) m() {}

func deferrer() {
	for {
		go func() {
			defer println()
		}()
		defer func() {}() // MATCH /prefer not to defer inside loops/
	}

	defer tt.m() // MATCH /be careful when deferring calls to methods without pointer receiver/

	defer func() error {
		return errors.New("error") // MATCH /return in a defer function has no effect/
	}()

	defer recover() // MATCH /recover must be called inside a deferred function, this is executing recover immediately/

	recover() // MATCH /recover must be called inside a deferred function/

	defer deferrer()

	helper := func(_ interface{}) {}

	defer helper(recover()) // MATCH /recover must be called inside a deferred function, this is executing recover immediately/

	// does not work, but not currently blocked.
	defer helper(func() { recover() })
}
