// 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. //go:build !compiler_bootstrap package test // The racecompile builder only builds packages, but does not build // or run tests. This is a non-test file to hold cases that (used // to) trigger compiler data races, so they will be exercised on // the racecompile builder. // // This package is not imported so functions here are not included // in the actual compiler. // Issue 55357: data race when building multiple instantiations of // generic closures with _ parameters. func Issue55357() { type U struct { A int B string C string } var q T55357[U] q.Count() q.List() type M struct { A int64 B uint32 C uint32 } var q2 T55357[M] q2.Count() q2.List() } type T55357[T any] struct{} //go:noinline func (q *T55357[T]) do(w, v bool, fn func(bk []byte, v T) error) error { return nil } func (q *T55357[T]) Count() (n int, rerr error) { err := q.do(false, false, func(kb []byte, _ T) error { n++ return nil }) return n, err } func (q *T55357[T]) List() (list []T, rerr error) { var l []T err := q.do(false, true, func(_ []byte, v T) error { l = append(l, v) return nil }) if err != nil { return nil, err } return l, nil }