Commit 6eb0f544 authored by Robert Griesemer's avatar Robert Griesemer Committed by Russ Cox

[release-branch.go1.8] cmd/compile/internal/syntax: avoid follow-up error for...

[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 <gobot@golang.org>
Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
Reviewed-on: https://go-review.googlesource.com/36424
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
parent c543cc35
...@@ -1634,6 +1634,8 @@ func (p *parser) stmtBody(context string) []Stmt { ...@@ -1634,6 +1634,8 @@ func (p *parser) stmtBody(context string) []Stmt {
return body return body
} }
var dummyCond = &Name{Value: "false"}
func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleStmt) { func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleStmt) {
if p.tok == _Lbrace { if p.tok == _Lbrace {
return return
...@@ -1680,12 +1682,8 @@ func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleSt ...@@ -1680,12 +1682,8 @@ func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleSt
case *ExprStmt: case *ExprStmt:
cond = s.X cond = s.X
default: 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))) p.syntax_error(fmt.Sprintf("%s used as value", String(s)))
cond = dummyCond // avoid follow-up error for if statements
} }
p.xnest = outer p.xnest = outer
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment