| // Copyright 2012 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. |
| |
| // Test case for issue 3106: Better synchronization of |
| // parser after certain syntax errors. |
| |
| package main |
| |
| func f() { |
| var m Mutex |
| c := MakeCond(&m) |
| percent := 0 |
| const step = 10 |
| for i := 0; i < 5; i++ { |
| go func() { |
| for { |
| // Emulates some useful work. |
| time.Sleep(1e8) |
| m.Lock() |
| defer |
| if /* ERROR "expected ';', found 'if'" */ percent == 100 { |
| m.Unlock() |
| break |
| } |
| percent++ |
| if percent % step == 0 { |
| //c.Signal() |
| } |
| m.Unlock() |
| } |
| }() |
| } |
| for { |
| m.Lock() |
| if percent == 0 || percent % step != 0 { |
| c.Wait() |
| } |
| fmt.Print(",") |
| if percent == 100 { |
| m.Unlock() |
| break |
| } |
| m.Unlock() |
| } |
| } |