diff options
author | Robert Griesemer <gri@golang.org> | 2021-08-15 11:46:33 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2021-08-15 19:08:56 +0000 |
commit | 6ed9463133daabcf11b259155c3f3348ae5a06af (patch) | |
tree | 09e522ae01a6a272c6d5c7c8d18b1b2c4287e7ca | |
parent | 48dfddbab3569798267798a5d8828bf35355eb9d (diff) | |
download | go-6ed9463133daabcf11b259155c3f3348ae5a06af.tar.gz go-6ed9463133daabcf11b259155c3f3348ae5a06af.zip |
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>
-rw-r--r-- | src/cmd/compile/internal/syntax/parser.go | 6 | ||||
-rw-r--r-- | src/cmd/compile/internal/syntax/testdata/issue47704.src | 18 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index acffd84885..29f5c88d0f 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -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 diff --git a/src/cmd/compile/internal/syntax/testdata/issue47704.src b/src/cmd/compile/internal/syntax/testdata/issue47704.src new file mode 100644 index 0000000000..0156af7d8d --- /dev/null +++ b/src/cmd/compile/internal/syntax/testdata/issue47704.src @@ -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 \] + ] +} |