// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package typeparams

import (
	"bytes"
	"fmt"
	"net/http"
)

type parent[T any] interface {
	n(f T)
}

type yuh[T any] struct {
	a T
}

func (y *yuh[int]) n(f bool) {
	for i := 0; i < 10; i++ {
		fmt.Println(i)
	}
}

func a[T comparable](i1 int, _ T, i3 int) int { // want "unused parameter: i2"
	i3 += i1
	_ = func(_ int) int { // want "unused parameter: z"
		_ = 1
		return 1
	}
	return i3
}

func b[T any](_ bytes.Buffer) { // want "unused parameter: c"
	_ = 1
}

func z[T http.ResponseWriter](h T, _ *http.Request) { // no report: func z is address-taken
	fmt.Println("Before")
}

func l(_ http.Handler) http.Handler { // want "unused parameter: h"
	return http.HandlerFunc(z[http.ResponseWriter])
}

func mult(a, _ int) int { // want "unused parameter: b"
	a += 1
	return a
}

func y[T any](a T) {
	panic("yo")
}
