// Copyright 2021 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 issue45160

func mklink1 /* =@mklink1func */() {}

func _() {
	var tests /* =@tests */ = []dirLinkTest /* @dirLinkTest */ {
		{
			mklink1 /* @mklink1func */: func() {},
			mklink2: func(link /* =@link */, target /* =@target */ string) error {
				return nil
			},
		},
	}
}

type dirLinkTest /* =@dirLinkTest */ struct {
	mklink1 /* =@mklink1field */ func(string, string) error
	mklink2 /* =@mklink2field */ func(string, string) error
}

func mklink2 /* =@mklink2func */() {}
