cmd/compile/internal/syntax: better error message for index syntax error

Fixes #47704.

Change-Id: I1de9fd00baaa4b534c23f011ade54120f5153a9d
Reviewed-on: https://go-review.googlesource.com/c/go/+/342369
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
Robert Griesemer 2021-08-15 11:46:33 -07:00
parent 48dfddbab3
commit 6ed9463133
2 changed files with 23 additions and 1 deletions

View File

@ -1049,7 +1049,11 @@ loop:
}
// x[i:...
p.want(_Colon)
// For better error message, don't use p.want(_Colon) here (issue #47704).
if !p.got(_Colon) {
p.syntaxError("expecting : or ]")
p.advance(_Colon, _Rbrack)
}
p.xnest++
t := new(SliceExpr)
t.pos = pos

View File

@ -0,0 +1,18 @@
// Copyright 2021 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
// error messages for parser in non-generic mode
func _() {
_ = m[] // ERROR expecting operand
_ = m[x,] // ERROR unexpected comma, expecting \: or \]
_ = m[x /* ERROR unexpected a */ a b c d]
}
// test case from the issue
func f(m map[int]int) int {
return m[0 // ERROR expecting \: or \]
]
}