aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/typecheck/iimport.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/typecheck/iimport.go')
-rw-r--r--src/cmd/compile/internal/typecheck/iimport.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/typecheck/iimport.go b/src/cmd/compile/internal/typecheck/iimport.go
index 0d5d892ef5..42c4619666 100644
--- a/src/cmd/compile/internal/typecheck/iimport.go
+++ b/src/cmd/compile/internal/typecheck/iimport.go
@@ -1112,6 +1112,14 @@ func (r *importReader) node() ir.Node {
cvars := make([]*ir.Name, r.int64())
for i := range cvars {
cvars[i] = ir.CaptureName(r.pos(), fn, r.localName().Canonical())
+ if go117ExportTypes {
+ if cvars[i].Type() != nil || cvars[i].Defn == nil {
+ base.Fatalf("bad import of closure variable")
+ }
+ // Closure variable should have Defn set, which is its captured
+ // variable, and it gets the same type as the captured variable.
+ cvars[i].SetType(cvars[i].Defn.Type())
+ }
}
fn.ClosureVars = cvars
r.allClosureVars = append(r.allClosureVars, cvars...)
@@ -1133,6 +1141,9 @@ func (r *importReader) node() ir.Node {
clo := ir.NewClosureExpr(pos, fn)
fn.OClosure = clo
+ if go117ExportTypes {
+ clo.SetType(typ)
+ }
return clo