From: Robert Griesemer Date: Thu, 9 Feb 2017 01:56:41 +0000 (-0800) Subject: cmd/compile/internal/parser: improved syntax error for incorrect if/for/switch header X-Git-Tag: go1.9beta1~1660 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3c22e5ca271ca4ad17b34d965e6a9baf7b5cf94d;p=gostls13.git 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 Reviewed-by: Matthew Dempsky TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index f016a6adbe..c1faa27894 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -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) } diff --git a/test/fixedbugs/issue17328.go b/test/fixedbugs/issue17328.go new file mode 100644 index 0000000000..abe4daa353 --- /dev/null +++ b/test/fixedbugs/issue17328.go @@ -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" + } +} diff --git a/test/syntax/semi1.go b/test/syntax/semi1.go index c755445b42..8eed05c1ca 100644 --- a/test/syntax/semi1.go +++ b/test/syntax/semi1.go @@ -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" diff --git a/test/syntax/semi3.go b/test/syntax/semi3.go index d625d08350..d064ce631c 100644 --- a/test/syntax/semi3.go +++ b/test/syntax/semi3.go @@ -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" diff --git a/test/syntax/semi4.go b/test/syntax/semi4.go index 6f5592ef0e..0b5e677680 100644 --- a/test/syntax/semi4.go +++ b/test/syntax/semi4.go @@ -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"