aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/object.go
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-02-08 10:23:05 -0800
committerDan Scales <danscales@google.com>2021-02-08 19:32:55 +0000
commit0fbde54ea646aa1363fc172610a75e5ba877d4ec (patch)
tree8248de98dd720fae5b722f6b3f5d0b8b52d7dd71 /src/cmd/compile/internal/noder/object.go
parentdcb5e0392e73c900db0f7260b392c91611e33540 (diff)
downloadgo-0fbde54ea646aa1363fc172610a75e5ba877d4ec.tar.gz
go-0fbde54ea646aa1363fc172610a75e5ba877d4ec.zip
[dev.typeparams] cmd/compile: allow generic funcs to call other generic funcs for stenciling
- Handle generic function calling itself or another generic function in stenciling. This is easy - after it is created, just scan an instantiated generic function for function instantiations (that may needed to be stenciled), just like non-generic functions. The types in the function instantiation will already have been set by the stenciling. - Handle OTYPE nodes in subster.node() (allows for generic type conversions). - Eliminated some duplicated work in subster.typ(). - Added new test case fact.go that tests a generic function calling itself, and simple generic type conversions. - Cause an error if a generic function is to be exported (which we don't handle yet). - Fixed some suggested changes in the add.go test case that I missed in the last review. Change-Id: I5d61704254c27962f358d5a3d2e0c62a5099f148 Reviewed-on: https://go-review.googlesource.com/c/go/+/290469 Trust: Dan Scales <danscales@google.com> Trust: Robert Griesemer <gri@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/noder/object.go')
-rw-r--r--src/cmd/compile/internal/noder/object.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/noder/object.go b/src/cmd/compile/internal/noder/object.go
index c740285ca2..b4e5c022db 100644
--- a/src/cmd/compile/internal/noder/object.go
+++ b/src/cmd/compile/internal/noder/object.go
@@ -155,6 +155,9 @@ func (g *irgen) objFinish(name *ir.Name, class ir.Class, typ *types.Type) {
break // methods are exported with their receiver type
}
if types.IsExported(sym.Name) {
+ if name.Class == ir.PFUNC && name.Type().NumTParams() > 0 {
+ base.FatalfAt(name.Pos(), "Cannot export a generic function (yet): %v", name)
+ }
typecheck.Export(name)
}
if base.Flag.AsmHdr != "" && !name.Sym().Asm() {