]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile/internal/syntax: set up dummy name and type if func name is missing
authorRobert Griesemer <gri@golang.org>
Tue, 31 Oct 2023 00:00:07 +0000 (17:00 -0700)
committerGopher Robot <gobot@golang.org>
Tue, 31 Oct 2023 16:12:41 +0000 (16:12 +0000)
We do the same elsewhere (e.g. in parser.name when a name is missing).
This ensures functions have a (dummy) name and a non-nil type.
Avoids a crash in the type-checker (verified manually).
A test was added here (rather than the type checker) because type-
checker tests are shared between types2 and go/types and error
recovery in this case is different.

Fixes #63835.

Change-Id: I1460fc88d23d80b8d8c181c774d6b0a56ca06317
Reviewed-on: https://go-review.googlesource.com/c/go/+/538059
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Bypass: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>

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

index 913a2f164cb64b39cb5597d73d51348c33518887..3895f53cf74d6d34424a7e557b1a91871f3cf197 100644 (file)
@@ -798,6 +798,9 @@ func (p *parser) funcDeclOrNil() *FuncDecl {
                f.Name = p.name()
                f.TParamList, f.Type = p.funcType(context)
        } else {
+               f.Name = NewName(p.pos(), "_")
+               f.Type = new(FuncType)
+               f.Type.pos = p.pos()
                msg := "expected name or ("
                if context != "" {
                        msg = "expected name"
diff --git a/src/cmd/compile/internal/syntax/testdata/issue63835.go b/src/cmd/compile/internal/syntax/testdata/issue63835.go
new file mode 100644 (file)
index 0000000..3d165c0
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright 2023 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
+
+func (x string) /* ERROR syntax error: unexpected \[, expected name */ []byte {
+        return []byte(x)
+}