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: Matthew 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: Robert Griesemer <gri@golang.org>
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
--- /dev/null
+// 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"
+ }
+}