Skip to content

Commit f0b1563

Browse files
committed
cmd/compile/internal/types: remove unneeded functionality
This CL removes a handful of features that were only needed for the pre-unified frontends. In particular, Type.Pkg was a hack for iexport so that go/types.Var.Pkg could be precisely populated for struct fields and signature parameters by gcimporter, but it's no longer necessary with the unified export data format because we now write export data directly from types2-supplied type descriptors. Several other features (e.g., OrigType, implicit interfaces, type parameters on signatures) are no longer relevant to the unified frontend, because it only uses types1 to represent instantiated generic types. Updates #57410. Change-Id: I84fd1da5e0b65d2ab91d244a7bb593821ee916e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/458622 Reviewed-by: Keith Randall <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: Matthew Dempsky <[email protected]> Reviewed-by: Keith Randall <[email protected]>
1 parent f5eb0a7 commit f0b1563

22 files changed

+75
-148
lines changed

src/cmd/compile/internal/abi/abiutils.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -717,19 +717,19 @@ func setup() {
717717
nxp := src.NoXPos
718718
bp := types.NewPtr(types.Types[types.TUINT8])
719719
it := types.Types[types.TINT]
720-
synthSlice = types.NewStruct(types.NoPkg, []*types.Field{
720+
synthSlice = types.NewStruct([]*types.Field{
721721
types.NewField(nxp, fname("ptr"), bp),
722722
types.NewField(nxp, fname("len"), it),
723723
types.NewField(nxp, fname("cap"), it),
724724
})
725725
types.CalcStructSize(synthSlice)
726-
synthString = types.NewStruct(types.NoPkg, []*types.Field{
726+
synthString = types.NewStruct([]*types.Field{
727727
types.NewField(nxp, fname("data"), bp),
728728
types.NewField(nxp, fname("len"), it),
729729
})
730730
types.CalcStructSize(synthString)
731731
unsp := types.Types[types.TUNSAFEPTR]
732-
synthIface = types.NewStruct(types.NoPkg, []*types.Field{
732+
synthIface = types.NewStruct([]*types.Field{
733733
types.NewField(nxp, fname("f1"), unsp),
734734
types.NewField(nxp, fname("f2"), unsp),
735735
})

src/cmd/compile/internal/compare/compare_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ func TestEqStructCost(t *testing.T) {
5353
}{
5454
{"struct without fields", 0, 0,
5555
func() *types.Type {
56-
return types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
56+
return types.NewStruct([]*types.Field{})
5757
}},
5858
{"struct with 1 byte field", 1, 1,
5959
func() *types.Type {
60-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
60+
parent := types.NewStruct([]*types.Field{})
6161
fields := []*types.Field{
6262
newByteField(parent, 0),
6363
}
@@ -67,7 +67,7 @@ func TestEqStructCost(t *testing.T) {
6767
},
6868
{"struct with 8 byte fields", 1, 8,
6969
func() *types.Type {
70-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
70+
parent := types.NewStruct([]*types.Field{})
7171
fields := make([]*types.Field, 8)
7272
for i := range fields {
7373
fields[i] = newByteField(parent, int64(i))
@@ -78,7 +78,7 @@ func TestEqStructCost(t *testing.T) {
7878
},
7979
{"struct with 16 byte fields", 2, 16,
8080
func() *types.Type {
81-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
81+
parent := types.NewStruct([]*types.Field{})
8282
fields := make([]*types.Field, 16)
8383
for i := range fields {
8484
fields[i] = newByteField(parent, int64(i))
@@ -89,7 +89,7 @@ func TestEqStructCost(t *testing.T) {
8989
},
9090
{"struct with 32 byte fields", 4, 32,
9191
func() *types.Type {
92-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
92+
parent := types.NewStruct([]*types.Field{})
9393
fields := make([]*types.Field, 32)
9494
for i := range fields {
9595
fields[i] = newByteField(parent, int64(i))
@@ -100,7 +100,7 @@ func TestEqStructCost(t *testing.T) {
100100
},
101101
{"struct with 2 int32 fields", 1, 2,
102102
func() *types.Type {
103-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
103+
parent := types.NewStruct([]*types.Field{})
104104
fields := make([]*types.Field, 2)
105105
for i := range fields {
106106
fields[i] = newField(parent, int64(i*4), types.TINT32)
@@ -111,7 +111,7 @@ func TestEqStructCost(t *testing.T) {
111111
},
112112
{"struct with 2 int32 fields and 1 int64", 2, 3,
113113
func() *types.Type {
114-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
114+
parent := types.NewStruct([]*types.Field{})
115115
fields := make([]*types.Field, 3)
116116
fields[0] = newField(parent, int64(0), types.TINT32)
117117
fields[1] = newField(parent, int64(4), types.TINT32)
@@ -122,7 +122,7 @@ func TestEqStructCost(t *testing.T) {
122122
},
123123
{"struct with 1 int field and 1 string", 3, 3,
124124
func() *types.Type {
125-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
125+
parent := types.NewStruct([]*types.Field{})
126126
fields := make([]*types.Field, 2)
127127
fields[0] = newField(parent, int64(0), types.TINT64)
128128
fields[1] = newField(parent, int64(8), types.TSTRING)
@@ -132,7 +132,7 @@ func TestEqStructCost(t *testing.T) {
132132
},
133133
{"struct with 2 strings", 4, 4,
134134
func() *types.Type {
135-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
135+
parent := types.NewStruct([]*types.Field{})
136136
fields := make([]*types.Field, 2)
137137
fields[0] = newField(parent, int64(0), types.TSTRING)
138138
fields[1] = newField(parent, int64(8), types.TSTRING)
@@ -142,7 +142,7 @@ func TestEqStructCost(t *testing.T) {
142142
},
143143
{"struct with 1 large byte array field", 26, 101,
144144
func() *types.Type {
145-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
145+
parent := types.NewStruct([]*types.Field{})
146146
fields := []*types.Field{
147147
newArrayField(parent, 0, 101, types.TUINT16),
148148
}
@@ -152,7 +152,7 @@ func TestEqStructCost(t *testing.T) {
152152
},
153153
{"struct with string array field", 4, 4,
154154
func() *types.Type {
155-
parent := types.NewStruct(types.NewPkg("main", ""), []*types.Field{})
155+
parent := types.NewStruct([]*types.Field{})
156156
fields := []*types.Field{
157157
newArrayField(parent, 0, 2, types.TSTRING),
158158
}

src/cmd/compile/internal/escape/call.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ func (e *escape) goDeferStmt(n *ir.GoDeferStmt) {
244244
// Create a new no-argument function that we'll hand off to defer.
245245
fn := ir.NewClosureFunc(n.Pos(), true)
246246
fn.SetWrapper(true)
247-
fn.Nname.SetType(types.NewSignature(types.LocalPkg, nil, nil, nil, nil))
247+
fn.Nname.SetType(types.NewSignature(nil, nil, nil))
248248
fn.Body = []ir.Node{call}
249249
if call, ok := call.(*ir.CallExpr); ok && call.Op() == ir.OCALLFUNC {
250250
// If the callee is a named function, link to the original callee.

src/cmd/compile/internal/noder/reader.go

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ func (r *reader) doTyp() *types.Type {
506506
case pkgbits.TypePointer:
507507
return types.NewPtr(r.typ())
508508
case pkgbits.TypeSignature:
509-
return r.signature(types.LocalPkg, nil)
509+
return r.signature(nil)
510510
case pkgbits.TypeSlice:
511511
return types.NewSlice(r.typ())
512512
case pkgbits.TypeStruct:
@@ -549,8 +549,6 @@ func (r *reader) unionType() *types.Type {
549549
}
550550

551551
func (r *reader) interfaceType() *types.Type {
552-
tpkg := types.LocalPkg // TODO(mdempsky): Remove after iexport is gone.
553-
554552
nmethods, nembeddeds := r.Len(), r.Len()
555553
implicit := nmethods == 0 && nembeddeds == 1 && r.Bool()
556554
assert(!implicit) // implicit interfaces only appear in constraints
@@ -560,9 +558,8 @@ func (r *reader) interfaceType() *types.Type {
560558

561559
for i := range methods {
562560
pos := r.pos()
563-
pkg, sym := r.selector()
564-
tpkg = pkg
565-
mtyp := r.signature(pkg, types.FakeRecv())
561+
_, sym := r.selector()
562+
mtyp := r.signature(types.FakeRecv())
566563
methods[i] = types.NewField(pos, sym, mtyp)
567564
}
568565
for i := range embeddeds {
@@ -572,16 +569,14 @@ func (r *reader) interfaceType() *types.Type {
572569
if len(fields) == 0 {
573570
return types.Types[types.TINTER] // empty interface
574571
}
575-
return types.NewInterface(tpkg, fields, false)
572+
return types.NewInterface(fields)
576573
}
577574

578575
func (r *reader) structType() *types.Type {
579-
tpkg := types.LocalPkg // TODO(mdempsky): Remove after iexport is gone.
580576
fields := make([]*types.Field, r.Len())
581577
for i := range fields {
582578
pos := r.pos()
583-
pkg, sym := r.selector()
584-
tpkg = pkg
579+
_, sym := r.selector()
585580
ftyp := r.typ()
586581
tag := r.String()
587582
embedded := r.Bool()
@@ -593,26 +588,26 @@ func (r *reader) structType() *types.Type {
593588
}
594589
fields[i] = f
595590
}
596-
return types.NewStruct(tpkg, fields)
591+
return types.NewStruct(fields)
597592
}
598593

599-
func (r *reader) signature(tpkg *types.Pkg, recv *types.Field) *types.Type {
594+
func (r *reader) signature(recv *types.Field) *types.Type {
600595
r.Sync(pkgbits.SyncSignature)
601596

602-
params := r.params(&tpkg)
603-
results := r.params(&tpkg)
597+
params := r.params()
598+
results := r.params()
604599
if r.Bool() { // variadic
605600
params[len(params)-1].SetIsDDD(true)
606601
}
607602

608-
return types.NewSignature(tpkg, recv, nil, params, results)
603+
return types.NewSignature(recv, params, results)
609604
}
610605

611-
func (r *reader) params(tpkg **types.Pkg) []*types.Field {
606+
func (r *reader) params() []*types.Field {
612607
r.Sync(pkgbits.SyncParams)
613608
fields := make([]*types.Field, r.Len())
614609
for i := range fields {
615-
*tpkg, fields[i] = r.param()
610+
_, fields[i] = r.param()
616611
}
617612
return fields
618613
}
@@ -742,7 +737,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index, implicits, explicits []*types.Typ
742737
sym = Renameinit()
743738
}
744739
name := do(ir.ONAME, true)
745-
setType(name, r.signature(sym.Pkg, nil))
740+
setType(name, r.signature(nil))
746741

747742
name.Func = ir.NewFunc(r.pos())
748743
name.Func.Nname = name
@@ -981,10 +976,10 @@ func (r *reader) typeParamNames() {
981976
func (r *reader) method(rext *reader) *types.Field {
982977
r.Sync(pkgbits.SyncMethod)
983978
pos := r.pos()
984-
pkg, sym := r.selector()
979+
_, sym := r.selector()
985980
r.typeParamNames()
986981
_, recv := r.param()
987-
typ := r.signature(pkg, recv)
982+
typ := r.signature(recv)
988983

989984
name := ir.NewNameAt(pos, ir.MethodSym(recv.Type, sym))
990985
setType(name, typ)
@@ -2581,7 +2576,7 @@ func (r *reader) curry(pos src.XPos, ifaceHack bool, fun ir.Node, arg0, arg1 ir.
25812576

25822577
params, results := syntheticSig(fun.Type())
25832578
params = params[len(captured)-1:] // skip curried parameters
2584-
typ := types.NewSignature(types.NoPkg, nil, nil, params, results)
2579+
typ := types.NewSignature(nil, params, results)
25852580

25862581
addBody := func(pos src.XPos, r *reader, captured []ir.Node) {
25872582
recvs, params := r.syntheticArgs(pos)
@@ -2619,7 +2614,7 @@ func (r *reader) methodExprWrap(pos src.XPos, recv *types.Type, implicits []int,
26192614
params = append(params[:1], params[2:]...)
26202615
}
26212616

2622-
typ := types.NewSignature(types.NoPkg, nil, nil, params, results)
2617+
typ := types.NewSignature(nil, params, results)
26232618

26242619
addBody := func(pos src.XPos, r *reader, captured []ir.Node) {
26252620
recvs, args := r.syntheticArgs(pos)
@@ -3073,7 +3068,7 @@ func (r *reader) funcLit() ir.Node {
30733068
// allocation of the closure is credited (#49171).
30743069
r.suppressInlPos++
30753070
pos := r.pos()
3076-
xtype2 := r.signature(types.LocalPkg, nil)
3071+
xtype2 := r.signature(nil)
30773072
r.suppressInlPos--
30783073

30793074
fn := ir.NewClosureFunc(pos, r.curfn != nil)
@@ -3926,7 +3921,7 @@ func newWrapperType(recvType *types.Type, method *types.Field) *types.Type {
39263921
params := clone(sig.Params().FieldSlice())
39273922
results := clone(sig.Results().FieldSlice())
39283923

3929-
return types.NewSignature(types.NoPkg, recv, nil, params, results)
3924+
return types.NewSignature(recv, params, results)
39303925
}
39313926

39323927
func addTailCall(pos src.XPos, fn *ir.Func, recv ir.Node, method *types.Field) {
@@ -3994,5 +3989,5 @@ func shapeSig(fn *ir.Func, dict *readerDict) *types.Type {
39943989
results[i] = types.NewField(result.Pos, result.Sym, result.Type)
39953990
}
39963991

3997-
return types.NewSignature(types.LocalPkg, recv, nil, params, results)
3992+
return types.NewSignature(recv, params, results)
39983993
}

src/cmd/compile/internal/pkginit/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func Task() *ir.Name {
116116
// runtime.asanregisterglobals(unsafe.Pointer(&globals[0]), ni)
117117
asanf := typecheck.NewName(ir.Pkgs.Runtime.Lookup("asanregisterglobals"))
118118
ir.MarkFunc(asanf)
119-
asanf.SetType(types.NewSignature(types.NoPkg, nil, nil, []*types.Field{
119+
asanf.SetType(types.NewSignature(nil, []*types.Field{
120120
types.NewField(base.Pos, nil, types.Types[types.TUNSAFEPTR]),
121121
types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),
122122
}, nil))

src/cmd/compile/internal/pkginit/initAsanGlobals.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ func createtypes() (*types.Type, *types.Type, *types.Type) {
161161
fname := typecheck.Lookup
162162
nxp := src.NoXPos
163163
nfield := types.NewField
164-
asanGlobal := types.NewStruct(types.NoPkg, []*types.Field{
164+
asanGlobal := types.NewStruct([]*types.Field{
165165
nfield(nxp, fname("beg"), up),
166166
nfield(nxp, fname("size"), up),
167167
nfield(nxp, fname("sizeWithRedzone"), up),
@@ -173,14 +173,14 @@ func createtypes() (*types.Type, *types.Type, *types.Type) {
173173
})
174174
types.CalcSize(asanGlobal)
175175

176-
asanLocation := types.NewStruct(types.NoPkg, []*types.Field{
176+
asanLocation := types.NewStruct([]*types.Field{
177177
nfield(nxp, fname("filename"), up),
178178
nfield(nxp, fname("line"), i32),
179179
nfield(nxp, fname("column"), i32),
180180
})
181181
types.CalcSize(asanLocation)
182182

183-
defString := types.NewStruct(types.NoPkg, []*types.Field{
183+
defString := types.NewStruct([]*types.Field{
184184
types.NewField(nxp, fname("data"), up),
185185
types.NewField(nxp, fname("len"), up),
186186
})

src/cmd/compile/internal/reflectdata/alg.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func hashfor(t *types.Type) ir.Node {
268268
// TODO(austin): This creates an ir.Name with a nil Func.
269269
n := typecheck.NewName(sym)
270270
ir.MarkFunc(n)
271-
n.SetType(types.NewSignature(types.NoPkg, nil, nil, []*types.Field{
271+
n.SetType(types.NewSignature(nil, []*types.Field{
272272
types.NewField(base.Pos, nil, types.NewPtr(t)),
273273
types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),
274274
}, []*types.Field{
@@ -583,7 +583,7 @@ func hashmem(t *types.Type) ir.Node {
583583
// TODO(austin): This creates an ir.Name with a nil Func.
584584
n := typecheck.NewName(sym)
585585
ir.MarkFunc(n)
586-
n.SetType(types.NewSignature(types.NoPkg, nil, nil, []*types.Field{
586+
n.SetType(types.NewSignature(nil, []*types.Field{
587587
types.NewField(base.Pos, nil, types.NewPtr(t)),
588588
types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),
589589
types.NewField(base.Pos, nil, types.Types[types.TUINTPTR]),

src/cmd/compile/internal/reflectdata/reflect.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ func MapBucketType(t *types.Type) *types.Type {
140140
field = append(field, overflow)
141141

142142
// link up fields
143-
bucket := types.NewStruct(types.NoPkg, field[:])
143+
bucket := types.NewStruct(field[:])
144144
bucket.SetNoalg(true)
145145
types.CalcSize(bucket)
146146

@@ -234,7 +234,7 @@ func MapType(t *types.Type) *types.Type {
234234
makefield("extra", types.Types[types.TUNSAFEPTR]),
235235
}
236236

237-
hmap := types.NewStruct(types.NoPkg, fields)
237+
hmap := types.NewStruct(fields)
238238
hmap.SetNoalg(true)
239239
types.CalcSize(hmap)
240240

@@ -297,7 +297,7 @@ func MapIterType(t *types.Type) *types.Type {
297297
}
298298

299299
// build iterator struct holding the above fields
300-
hiter := types.NewStruct(types.NoPkg, fields)
300+
hiter := types.NewStruct(fields)
301301
hiter.SetNoalg(true)
302302
types.CalcSize(hiter)
303303
if hiter.Size() != int64(12*types.PtrSize) {
@@ -1402,7 +1402,7 @@ func writtenByWriteBasicTypes(typ *types.Type) bool {
14021402
if typ.Sym() == nil && typ.Kind() == types.TFUNC {
14031403
f := typ.FuncType()
14041404
// func(error) string
1405-
if f.Receiver.NumFields() == 0 && f.TParams.NumFields() == 0 &&
1405+
if f.Receiver.NumFields() == 0 &&
14061406
f.Params.NumFields() == 1 && f.Results.NumFields() == 1 &&
14071407
f.Params.FieldType(0) == types.ErrorType &&
14081408
f.Results.FieldType(0) == types.Types[types.TSTRING] {
@@ -1451,7 +1451,7 @@ func WriteBasicTypes() {
14511451

14521452
// emit type for func(error) string,
14531453
// which is the type of an auto-generated wrapper.
1454-
writeType(types.NewPtr(types.NewSignature(types.NoPkg, nil, nil, []*types.Field{
1454+
writeType(types.NewPtr(types.NewSignature(nil, []*types.Field{
14551455
types.NewField(base.Pos, nil, types.ErrorType),
14561456
}, []*types.Field{
14571457
types.NewField(base.Pos, nil, types.Types[types.TSTRING]),

src/cmd/compile/internal/ssagen/ssa.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7947,7 +7947,7 @@ func deferstruct() *types.Type {
79477947
}
79487948

79497949
// build struct holding the above fields
7950-
s := types.NewStruct(types.NoPkg, fields)
7950+
s := types.NewStruct(fields)
79517951
s.SetNoalg(true)
79527952
types.CalcStructSize(s)
79537953
return s

src/cmd/compile/internal/test/abiutils_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func TestABIUtilsInterfaces(t *testing.T) {
313313
fldt := mkFuncType(types.FakeRecvType(), []*types.Type{},
314314
[]*types.Type{types.Types[types.TSTRING]})
315315
field := types.NewField(src.NoXPos, typecheck.Lookup("F"), fldt)
316-
nei := types.NewInterface(types.LocalPkg, []*types.Field{field}, false)
316+
nei := types.NewInterface([]*types.Field{field})
317317
i16 := types.Types[types.TINT16]
318318
tb := types.Types[types.TBOOL]
319319
s1 := mkstruct([]*types.Type{i16, i16, tb})

0 commit comments

Comments
 (0)