Commit 707ca18d authored by Robert Griesemer's avatar Robert Griesemer

cmd/compile: more accurate position for select case error message

Fixes #25958.

Change-Id: I1f4808a70c20334ecfc4eb1789f5389d94dcf00e
Reviewed-on: https://go-review.googlesource.com/119755Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 1caa0629
...@@ -33,7 +33,15 @@ func typecheckselect(sel *Node) { ...@@ -33,7 +33,15 @@ func typecheckselect(sel *Node) {
ncase.List.Set(nil) ncase.List.Set(nil)
switch n.Op { switch n.Op {
default: default:
yyerrorl(n.Pos, "select case must be receive, send or assign recv") pos := n.Pos
if n.Op == ONAME {
// We don't have the right position for ONAME nodes (see #15459 and
// others). Using ncase.Pos for now as it will provide the correct
// line number (assuming the expression follows the "case" keyword
// on the same line). This matches the approach before 1.10.
pos = ncase.Pos
}
yyerrorl(pos, "select case must be receive, send or assign recv")
// convert x = <-c into OSELRECV(x, <-c). // convert x = <-c into OSELRECV(x, <-c).
// remove implicit conversions; the eventual assignment // remove implicit conversions; the eventual assignment
......
// errorcheck
// Copyright 2018 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.
package p
// Verify that the "must be receive" error for "case done:" appears
// on the line of the case clause, not the line of the done declaration.
func f(done chan struct{}) {
select {
case done: // ERROR "must be receive", "not used"
case (chan struct{})(done): // ERROR "must be receive"
}
}
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