aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Zuo <wdvxdr@golangcn.org>2022-05-05 21:46:51 +0800
committerAlex Rakoczy <alex@golang.org>2022-05-25 19:31:01 +0000
commite46ac3837026bef0feec2d83dbf07a19c1aad29d (patch)
tree563be684a1f0d6b9ad5f8be4100f097991fb74cd
parent32dedaa69e22f1a058ae90b9484fd4c3b46fbcbf (diff)
downloadgo-e46ac3837026bef0feec2d83dbf07a19c1aad29d.tar.gz
go-e46ac3837026bef0feec2d83dbf07a19c1aad29d.zip
[release-branch.go1.18] cmd/compile: allow exporting `.rcvr` ident
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 #52242. 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> (cherry picked from commit ac39dbdf58e50a2575b891675e7d2e1400b20cfe) Reviewed-on: https://go-review.googlesource.com/c/go/+/404774 Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Keith Randall <khr@golang.org>
-rw-r--r--src/cmd/compile/internal/typecheck/iexport.go2
-rw-r--r--test/typeparam/issue52241.go22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/typecheck/iexport.go b/src/cmd/compile/internal/typecheck/iexport.go
index 18b5fc7f80..e811368d2b 100644
--- a/src/cmd/compile/internal/typecheck/iexport.go
+++ b/src/cmd/compile/internal/typecheck/iexport.go
@@ -2284,7 +2284,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
index 0000000000..841afd8b8e
--- /dev/null
+++ b/test/typeparam/issue52241.go
@@ -0,0 +1,22 @@
+// compile -G=3
+
+// 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()
+}