Skip to content

Commit

Permalink
cmd/compile: be sure to export types mentioned in f.i.g. method signa…
Browse files Browse the repository at this point in the history
…ture

When a fully instantiated generic method is exported, be sure to also
export the types in its signature.

Updates #52279.
Fixes #52286.

Change-Id: Icc6bca05b01f914cf67faaf1bf184eaa5484f521
Reviewed-on: https://go-review.googlesource.com/c/go/+/405118
Run-TryBot: David Chase <drchase@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
(cherry picked from commit 1284cc2)
Reviewed-on: https://go-review.googlesource.com/c/go/+/405543
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
  • Loading branch information
dr2chase committed May 17, 2022
1 parent 8ed0e51 commit cf5fa2b
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/cmd/compile/internal/typecheck/crawler.go
Expand Up @@ -234,7 +234,7 @@ func (p *crawler) checkForFullyInst(t *types.Type) {
for i, t1 := range t.RParams() {
shapes[i] = Shapify(t1, i, baseType.RParams()[i])
}
for j := range t.Methods().Slice() {
for j, tmethod := range t.Methods().Slice() {
baseNname := baseType.Methods().Slice()[j].Nname.(*ir.Name)
dictsym := MakeDictSym(baseNname.Sym(), t.RParams(), true)
if dictsym.Def == nil {
Expand All @@ -255,6 +255,8 @@ func (p *crawler) checkForFullyInst(t *types.Type) {
ImportedBody(methNode.Func)
methNode.Func.SetExportInline(true)
}
// Make sure that any associated types are also exported. (See #52279)
p.checkForFullyInst(tmethod.Type)
}
}

Expand Down
23 changes: 23 additions & 0 deletions test/fixedbugs/issue52279.dir/lib.go
@@ -0,0 +1,23 @@
package lib

type FMap[K comparable, V comparable] map[K]V

//go:noinline
func (m FMap[K, V]) Flip() FMap[V, K] {
out := make(FMap[V, K])
return out
}

type MyType uint8

const (
FIRST MyType = 0
)

var typeStrs = FMap[MyType, string]{
FIRST: "FIRST",
}

func (self MyType) String() string {
return typeStrs[self]
}
5 changes: 5 additions & 0 deletions test/fixedbugs/issue52279.dir/main.go
@@ -0,0 +1,5 @@
package main

import "./lib"

func main() { lib.FIRST.String() }
7 changes: 7 additions & 0 deletions test/fixedbugs/issue52279.go
@@ -0,0 +1,7 @@
// rundir -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 ignored

0 comments on commit cf5fa2b

Please sign in to comment.