...

Text file src/go/parser/testdata/issue3106.src

Documentation: go/parser/testdata

     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 go.dev/issue/3106: Better synchronization of
     6// parser after certain syntax errors.
     7
     8package main
     9
    10func 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}

View as plain text