]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile: allow exporting `.rcvr` ident
authorWayne Zuo <wdvxdr@golangcn.org>
Thu, 5 May 2022 13:46:51 +0000 (21:46 +0800)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 6 May 2022 21:07:37 +0000 (21:07 +0000)
Noder pass will build a closure to implement generic function
instantiation which may produce `.dict` and `.rcvr` ident.
Since we allow `.dict` during exporting, we should allow `.rcvr` too.

Fixes #52241.

Change-Id: Ifc3912ba5155b5ac1887f20830da64f4fb3fceb6
Reviewed-on: https://go-review.googlesource.com/c/go/+/404314
Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/typecheck/iexport.go
test/typeparam/issue52241.go [new file with mode: 0644]

index bf721d6495e3a8cd044134aac08632dfa37b9b47..d6a7eade035cc6b08d9e4c3b898055591444c6ab 100644 (file)
@@ -2188,7 +2188,7 @@ func (w *exportWriter) localIdent(s *types.Sym) {
                return
        }
 
-       if i := strings.LastIndex(name, "."); i >= 0 && !strings.HasPrefix(name, LocalDictName) {
+       if i := strings.LastIndex(name, "."); i >= 0 && !strings.HasPrefix(name, LocalDictName) && !strings.HasPrefix(name, ".rcvr") {
                base.Fatalf("unexpected dot in identifier: %v", name)
        }
 
diff --git a/test/typeparam/issue52241.go b/test/typeparam/issue52241.go
new file mode 100644 (file)
index 0000000..4feb97e
--- /dev/null
@@ -0,0 +1,22 @@
+// compile
+
+// Copyright 2022 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 main
+
+type Collector[T any] struct {
+}
+
+func (c *Collector[T]) Collect() {
+}
+
+func TestInOrderIntTree() {
+       collector := Collector[int]{}
+       _ = collector.Collect
+}
+
+func main() {
+       TestInOrderIntTree()
+}