From 717894cf8024cfaad629f0e66a4b9bc123676be5 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Sun, 15 Aug 2021 12:34:59 -0700 Subject: cmd/compile/internal/types2: better error message for index syntax error (follow-up) For #47704. Change-Id: I09e6f638df0cd456a20a3b68ab55c47bb5b1f555 Reviewed-on: https://go-review.googlesource.com/c/go/+/342370 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Go Bot --- src/cmd/compile/internal/syntax/parser.go | 11 ++++++++--- .../compile/internal/syntax/testdata/issue47704.go2 | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/cmd/compile/internal/syntax/testdata/issue47704.go2 diff --git a/src/cmd/compile/internal/syntax/parser.go b/src/cmd/compile/internal/syntax/parser.go index 29f5c88d0f..4fb6de10a8 100644 --- a/src/cmd/compile/internal/syntax/parser.go +++ b/src/cmd/compile/internal/syntax/parser.go @@ -1049,10 +1049,15 @@ loop: } // x[i:... - // For better error message, don't use p.want(_Colon) here (issue #47704). + // For better error message, don't simply use p.want(_Colon) here (issue #47704). if !p.got(_Colon) { - p.syntaxError("expecting : or ]") - p.advance(_Colon, _Rbrack) + if p.mode&AllowGenerics == 0 { + p.syntaxError("expecting : or ]") + p.advance(_Colon, _Rbrack) + } else { + p.syntaxError("expecting comma, : or ]") + p.advance(_Comma, _Colon, _Rbrack) + } } p.xnest++ t := new(SliceExpr) diff --git a/src/cmd/compile/internal/syntax/testdata/issue47704.go2 b/src/cmd/compile/internal/syntax/testdata/issue47704.go2 new file mode 100644 index 0000000000..4e65857f3b --- /dev/null +++ b/src/cmd/compile/internal/syntax/testdata/issue47704.go2 @@ -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 generic mode +func _() { + _ = m[] // ERROR expecting operand + _ = m[x,] + _ = 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 comma, \: or \] + ] +} -- cgit v1.2.3-54-g00ecf