github.com/gocuntian/go@v0.0.0-20160610041250-fee02d270bf8/src/go/parser/testdata/issue3106.src (about) 1 // Copyright 2012 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 // Test case for issue 3106: Better synchronization of 6 // parser after certain syntax errors. 7 8 package main 9 10 func f() { 11 var m Mutex 12 c := MakeCond(&m) 13 percent := 0 14 const step = 10 15 for i := 0; i < 5; i++ { 16 go func() { 17 for { 18 // Emulates some useful work. 19 time.Sleep(1e8) 20 m.Lock() 21 defer 22 if /* ERROR "expected ';', found 'if'" */ percent == 100 { 23 m.Unlock() 24 break 25 } 26 percent++ 27 if percent % step == 0 { 28 //c.Signal() 29 } 30 m.Unlock() 31 } 32 }() 33 } 34 for { 35 m.Lock() 36 if percent == 0 || percent % step != 0 { 37 c.Wait() 38 } 39 fmt.Print(",") 40 if percent == 100 { 41 m.Unlock() 42 break 43 } 44 m.Unlock() 45 } 46 }