From: Robert Griesemer Date: Tue, 7 Feb 2017 06:01:07 +0000 (-0800) Subject: [release-branch.go1.8] cmd/compile/internal/syntax: avoid follow-up error for incorre... X-Git-Tag: go1.8~13 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6eb0f5440e7034235544001faa675a0945a1ba7b;p=gostls13.git [release-branch.go1.8] cmd/compile/internal/syntax: avoid follow-up error for incorrect if statement This is a follow-up on https://go-review.googlesource.com/36470 and leads to a more stable fix. The above CL relied on filtering of multiple errors on the same line to avoid more than one error for an `if` statement of the form `if a := 10 {}`. This CL avoids the secondary error ("missing condition in if statement") in the first place. For #18915. Change-Id: I8517f485cc2305965276c17d8f8797d61ef9e999 Reviewed-on: https://go-review.googlesource.com/36479 TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky Reviewed-on: https://go-review.googlesource.com/36424 Run-TryBot: Russ Cox Reviewed-by: Robert Griesemer --- diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 92eae0a458..e45ca05fd1 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -1634,6 +1634,8 @@ func (p *parser) stmtBody(context string) []Stmt { return body } +var dummyCond = &Name{Value: "false"} + func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleStmt) { if p.tok == _Lbrace { return @@ -1680,12 +1682,8 @@ func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleSt case *ExprStmt: cond = s.X default: - // Not obviously a syntax error but by making it one, we get - // automatic filtering of multiple syntax error messages per - // line in the compiler. This avoids the follow-up error - // "missing condition in if statement" for an if statement - // (minimal fix for #18915). p.syntax_error(fmt.Sprintf("%s used as value", String(s))) + cond = dummyCond // avoid follow-up error for if statements } p.xnest = outer