]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/race: add tests for method thunks
authorDmitriy Vyukov <dvyukov@google.com>
Mon, 17 Jun 2013 13:59:53 +0000 (17:59 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Mon, 17 Jun 2013 13:59:53 +0000 (17:59 +0400)
R=golang-dev, dave
CC=golang-dev
https://golang.org/cl/10257043

src/pkg/runtime/race/testdata/mop_test.go

index 9a0cb81f53acc028f2a814f70717bdb7545bb264..b5eecd9fdfef08aef29bb3743be1ee6dcd84ffef 100644 (file)
@@ -1811,3 +1811,90 @@ And Brutus is an honourable man.`
        }
        _ = res
 }
+
+type Base int
+
+func (b *Base) Foo() int {
+       return 42
+}
+
+func (b Base) Bar() int {
+       return int(b)
+}
+
+func TestNoRaceMethodThunk(t *testing.T) {
+       type Derived struct {
+               pad int
+               Base
+       }
+       var d Derived
+       done := make(chan bool)
+       go func() {
+               _ = d.Foo()
+               done <- true
+       }()
+       d = Derived{}
+       <-done
+}
+
+func TestRaceMethodThunk(t *testing.T) {
+       type Derived struct {
+               pad int
+               *Base
+       }
+       var d Derived
+       done := make(chan bool)
+       go func() {
+               _ = d.Foo()
+               done <- true
+       }()
+       d = Derived{}
+       <-done
+}
+
+func TestRaceMethodThunk2(t *testing.T) {
+       type Derived struct {
+               pad int
+               Base
+       }
+       var d Derived
+       done := make(chan bool)
+       go func() {
+               _ = d.Bar()
+               done <- true
+       }()
+       d = Derived{}
+       <-done
+}
+
+func TestRaceMethodThunk3(t *testing.T) {
+       type Derived struct {
+               pad int
+               *Base
+       }
+       var d Derived
+       d.Base = new(Base)
+       done := make(chan bool)
+       go func() {
+               _ = d.Bar()
+               done <- true
+       }()
+       d.Base = new(Base)
+       <-done
+}
+
+func TestRaceMethodThunk4(t *testing.T) {
+       type Derived struct {
+               pad int
+               *Base
+       }
+       var d Derived
+       d.Base = new(Base)
+       done := make(chan bool)
+       go func() {
+               _ = d.Bar()
+               done <- true
+       }()
+       *(*int)(d.Base) = 42
+       <-done
+}