diff options
Diffstat (limited to 'test/fixedbugs/issue59404.go')
-rw-r--r-- | test/fixedbugs/issue59404.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/test/fixedbugs/issue59404.go b/test/fixedbugs/issue59404.go new file mode 100644 index 0000000..0f391e6 --- /dev/null +++ b/test/fixedbugs/issue59404.go @@ -0,0 +1,61 @@ +// build -gcflags=-l=4 + +// Copyright 2023 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 p + +type Interface interface { + MonitoredResource() (resType string, labels map[string]string) + Done() +} + +func Autodetect() Interface { + return func() Interface { + Do(func() { + var ad, gd Interface + + go func() { + defer gd.Done() + ad = aad() + }() + go func() { + defer ad.Done() + gd = aad() + defer func() { recover() }() + }() + + autoDetected = ad + if gd != nil { + autoDetected = gd + } + }) + return autoDetected + }() +} + +var autoDetected Interface +var G int + +type If int + +func (x If) MonitoredResource() (resType string, labels map[string]string) { + return "", nil +} + +//go:noinline +func (x If) Done() { + G++ +} + +//go:noinline +func Do(fn func()) { + fn() +} + +//go:noinline +func aad() Interface { + var x If + return x +} |