diff options
author | Wayne Zuo <wdvxdr@golangcn.org> | 2022-05-05 21:46:51 +0800 |
---|---|---|
committer | Alex Rakoczy <alex@golang.org> | 2022-05-25 19:31:01 +0000 |
commit | e46ac3837026bef0feec2d83dbf07a19c1aad29d (patch) | |
tree | 563be684a1f0d6b9ad5f8be4100f097991fb74cd | |
parent | 32dedaa69e22f1a058ae90b9484fd4c3b46fbcbf (diff) | |
download | go-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.go | 2 | ||||
-rw-r--r-- | test/typeparam/issue52241.go | 22 |
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() +} |