/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/fixedbugs/bug512.go
52 строки
793 B
Ian Lance Taylor
test: add bug that failed when run with gccgo
17 мар 2021, 22:15
17 мар 2021, 22:15
5423f60
Код
Авторство
О чём код?
// run // Copyright 2021 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. // Gccgo did not make a copy of a value receiver when using a // goroutine to call a method. package main import ( "sync" "sync/atomic" ) var wg sync.WaitGroup type S struct { i1, i2 int32 } var done int32 func (s S) Check(v1, v2 int32) { for { if g1 := atomic.LoadInt32(&s.i1); v1 != g1 { panic(g1) } if g2 := atomic.LoadInt32(&s.i2); v2 != g2 { panic(g2) } if atomic.LoadInt32(&done) != 0 { break } } wg.Done() } func F() { s := S{1, 2} go s.Check(1, 2) atomic.StoreInt32(&s.i1, 3) atomic.StoreInt32(&s.i2, 4) atomic.StoreInt32(&done, 1) } func main() { wg.Add(1) F() wg.Wait() }