]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/types2: better error message for index syntax error (follow-up)
authorRobert Griesemer <gri@golang.org>
Sun, 15 Aug 2021 19:34:59 +0000 (12:34 -0700)
committerRobert Griesemer <gri@golang.org>
Sun, 15 Aug 2021 19:56:18 +0000 (19:56 +0000)
For #47704.

Change-Id: I09e6f638df0cd456a20a3b68ab55c47bb5b1f555
Reviewed-on: https://go-review.googlesource.com/c/go/+/342370
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/syntax/parser.go
src/cmd/compile/internal/syntax/testdata/issue47704.go2 [new file with mode: 0644]

index 29f5c88d0f2bf1ec8319371d77b29e6051021e7f..4fb6de10a820a527125a1e4bcd62e519e0dce7ef 100644 (file)
@@ -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 (file)
index 0000000..4e65857
--- /dev/null
@@ -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 \]
+               ]
+}