| // Copyright 2015 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 race_test | 
 |  | 
 | import ( | 
 | 	"fmt" | 
 | 	"testing" | 
 | ) | 
 |  | 
 | var issue12664 = "hi" | 
 |  | 
 | func TestRaceIssue12664(t *testing.T) { | 
 | 	c := make(chan struct{}) | 
 | 	go func() { | 
 | 		issue12664 = "bye" | 
 | 		close(c) | 
 | 	}() | 
 | 	fmt.Println(issue12664) | 
 | 	<-c | 
 | } | 
 |  | 
 | type MyI interface { | 
 | 	foo() | 
 | } | 
 |  | 
 | type MyT int | 
 |  | 
 | func (MyT) foo() { | 
 | } | 
 |  | 
 | var issue12664_2 MyT = 0 | 
 |  | 
 | func TestRaceIssue12664_2(t *testing.T) { | 
 | 	c := make(chan struct{}) | 
 | 	go func() { | 
 | 		issue12664_2 = 1 | 
 | 		close(c) | 
 | 	}() | 
 | 	func(x MyI) { | 
 | 		// Never true, but prevents inlining. | 
 | 		if x.(MyT) == -1 { | 
 | 			close(c) | 
 | 		} | 
 | 	}(issue12664_2) | 
 | 	<-c | 
 | } | 
 |  | 
 | var issue12664_3 MyT = 0 | 
 |  | 
 | func TestRaceIssue12664_3(t *testing.T) { | 
 | 	c := make(chan struct{}) | 
 | 	go func() { | 
 | 		issue12664_3 = 1 | 
 | 		close(c) | 
 | 	}() | 
 | 	var r MyT | 
 | 	var i interface{} = r | 
 | 	issue12664_3 = i.(MyT) | 
 | 	<-c | 
 | } | 
 |  | 
 | var issue12664_4 MyT = 0 | 
 |  | 
 | func TestRaceIssue12664_4(t *testing.T) { | 
 | 	c := make(chan struct{}) | 
 | 	go func() { | 
 | 		issue12664_4 = 1 | 
 | 		close(c) | 
 | 	}() | 
 | 	var r MyT | 
 | 	var i MyI = r | 
 | 	issue12664_4 = i.(MyT) | 
 | 	<-c | 
 | } |