]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.8] cmd/compile/internal/syntax: avoid follow-up error for incorre...
authorRobert Griesemer <gri@golang.org>
Tue, 7 Feb 2017 06:01:07 +0000 (22:01 -0800)
committerRuss Cox <rsc@golang.org>
Tue, 7 Feb 2017 16:52:00 +0000 (16:52 +0000)
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: Matthew Dempsky <mdempsky@google.com>
Reviewed-on: https://go-review.googlesource.com/36424
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/syntax/parser.go

index 92eae0a458c91a95a85488cb67353fb5da18c7ce..e45ca05fd160d925d2730bca2f4c7111f6f07738 100644 (file)
@@ -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