1// Copyright 2015 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package race_test
6
7import (
8	"fmt"
9	"testing"
10)
11
12var issue12664 = "hi"
13
14func TestRaceIssue12664(t *testing.T) {
15	c := make(chan struct{})
16	go func() {
17		issue12664 = "bye"
18		close(c)
19	}()
20	fmt.Println(issue12664)
21	<-c
22}
23
24type MyI interface {
25	foo()
26}
27
28type MyT int
29
30func (MyT) foo() {
31}
32
33var issue12664_2 MyT = 0
34
35func TestRaceIssue12664_2(t *testing.T) {
36	c := make(chan struct{})
37	go func() {
38		issue12664_2 = 1
39		close(c)
40	}()
41	func(x MyI) {
42		// Never true, but prevents inlining.
43		if x.(MyT) == -1 {
44			close(c)
45		}
46	}(issue12664_2)
47	<-c
48}
49
50var issue12664_3 MyT = 0
51
52func TestRaceIssue12664_3(t *testing.T) {
53	c := make(chan struct{})
54	go func() {
55		issue12664_3 = 1
56		close(c)
57	}()
58	var r MyT
59	var i any = r
60	issue12664_3 = i.(MyT)
61	<-c
62}
63
64var issue12664_4 MyT = 0
65
66func TestRaceIssue12664_4(t *testing.T) {
67	c := make(chan struct{})
68	go func() {
69		issue12664_4 = 1
70		close(c)
71	}()
72	var r MyT
73	var i MyI = r
74	issue12664_4 = i.(MyT)
75	<-c
76}
77