cmd/compile/internal/parser: improved syntax error for incorrect if/for/switch header

Starting the error message with "expecting" rather than "missing"
causes the syntax error mechanism to add additional helpful info
(it recognizes "expecting" but not "missing").

Fixes #17328.

Change-Id: I8482ca5e5a6a6b22e0ed0d831b7328e264156334
Reviewed-on: https://go-review.googlesource.com/36637
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Robert Griesemer 2017-02-08 17:56:41 -08:00
parent 7ad512e7ff
commit 3c22e5ca27
5 changed files with 18 additions and 5 deletions

View file

@ -1690,7 +1690,7 @@ func (p *parser) stmtBody(context string) []Stmt {
}
if !p.got(_Lbrace) {
p.syntax_error("missing { after " + context)
p.syntax_error("expecting { after " + context)
p.advance(_Name, _Rbrace)
}

View file

@ -0,0 +1,13 @@
// errorcheck
// Copyright 2017 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.
package main
func main() {
i := 0
for ; ; i++) { // ERROR "unexpected \), expecting { after for clause"
}
}

View file

@ -7,7 +7,7 @@
package main
func main() {
if x; y // ERROR "missing .*{.* after if clause|undefined"
if x; y // ERROR "expected .*{.* after if clause|undefined"
{
z // GCCGO_ERROR "undefined"

View file

@ -7,7 +7,7 @@
package main
func main() {
for x; y; z // ERROR "missing .*{.* after for clause|undefined"
for x; y; z // ERROR "expected .*{.* after for clause|undefined"
{
z // GCCGO_ERROR "undefined"

View file

@ -13,5 +13,5 @@ package main
func main() {
for x // GCCGO_ERROR "undefined"
{ // ERROR "missing .*{.* after for clause|missing operand"
z // ERROR "undefined|missing { after for clause"
{ // ERROR "expecting .*{.* after for clause|missing operand"
z // ERROR "undefined|expecting { after for clause"