Commit c543cc35 authored by Robert Griesemer's avatar Robert Griesemer Committed by Russ Cox

[release-branch.go1.8] cmd/compile/internal/syntax: make a parser error "1.7 compliant"

For code such as

	if a := 10 { ...

the 1.7 compiler reported

	a := 10 used as value

while the 1.8 compiler reported

	invalid condition, tag, or type switch guard

Changed the error message to match the 1.7 compiler.

Fixes #18915.

Change-Id: I01308862e461922e717f9f8295a9db53d5a914eb
Reviewed-on: https://go-review.googlesource.com/36470
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-on: https://go-review.googlesource.com/36422
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
parent f0749fe1
......@@ -1680,7 +1680,12 @@ func (p *parser) header(forStmt bool) (init SimpleStmt, cond Expr, post SimpleSt
case *ExprStmt:
cond = s.X
default:
p.error("invalid condition, tag, or type switch guard")
// 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.xnest = outer
......
// 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.
// Make sure error message for invalid conditions
// or tags are consistent with earlier Go versions.
package p
func _() {
if a := 10 { // ERROR "a := 10 used as value"
}
for b := 10 { // ERROR "b := 10 used as value"
}
switch c := 10 { // ERROR "c := 10 used as value"
}
}
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