github.com/hlts2/go@v0.0.0-20170904000733-812b34efaed8/src/runtime/race/testdata/issue12664_test.go (about)

     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  
     5  package race_test
     6  
     7  import (
     8  	"fmt"
     9  	"testing"
    10  )
    11  
    12  var issue12664 = "hi"
    13  
    14  func 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  
    24  type MyI interface {
    25  	foo()
    26  }
    27  
    28  type MyT int
    29  
    30  func (MyT) foo() {
    31  }
    32  
    33  var issue12664_2 MyT = 0
    34  
    35  func 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  
    50  var issue12664_3 MyT = 0
    51  
    52  func 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 interface{} = r
    60  	issue12664_3 = i.(MyT)
    61  	<-c
    62  }
    63  
    64  var issue12664_4 MyT = 0
    65  
    66  func 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  }