This test shows we prefer rangeable funcs in range statements. -- flags -- -ignore_extra_diags -- range_func.go -- package rangefunc func iterNot(func(int)) {} func iter0(func() bool) {} func iter1(func(int) bool) {} func iter2(func(int, int) bool) func _() { for range i { //@rank(" {", "iter0", "iterNot"),rank(" {", "iter1", "iterNot"),rank(" {", "iter2", "iterNot") } for k := range i { //@rank(" {", "iter1", "iterNot"),rank(" {", "iter1", "iter0"),rank(" {", "iter2", "iter0") } for k, v := range i { //@rank(" {", "iter2", "iterNot"),rank(" {", "iter2", "iter0"),rank(" {", "iter2", "iter1") } }