]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] cmd/compile: use LinksymOffsetExpr in TypePtr/ItabAddr
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Mon, 18 Jan 2021 02:42:53 +0000 (09:42 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Mon, 18 Jan 2021 04:52:51 +0000 (04:52 +0000)
Passes toolstash -cmp.

Fixes #43737

Change-Id: I2d5228c0213b5f8742e3cea6fac9bc985b19d78c
Reviewed-on: https://go-review.googlesource.com/c/go/+/284122
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/reflectdata/reflect.go
src/cmd/compile/internal/staticinit/sched.go

index fe0bd269272b6e253bbdd4969030bf816a891627..bd89b62ff5b8bbd4b1f07e9635c8313aa7e96169 100644 (file)
@@ -836,39 +836,22 @@ func TypeLinksym(t *types.Type) *obj.LSym {
 }
 
 func TypePtr(t *types.Type) *ir.AddrExpr {
-       s := TypeSym(t)
-       if s.Def == nil {
-               n := ir.NewNameAt(src.NoXPos, s)
-               n.SetType(types.Types[types.TUINT8])
-               n.Class = ir.PEXTERN
-               n.SetTypecheck(1)
-               s.Def = n
-       }
-
-       n := typecheck.NodAddr(ir.AsNode(s.Def))
-       n.SetType(types.NewPtr(s.Def.Type()))
-       n.SetTypecheck(1)
-       return n
+       n := ir.NewLinksymExpr(base.Pos, TypeLinksym(t), types.Types[types.TUINT8])
+       return typecheck.Expr(typecheck.NodAddr(n)).(*ir.AddrExpr)
 }
 
 func ITabAddr(t, itype *types.Type) *ir.AddrExpr {
        if t == nil || (t.IsPtr() && t.Elem() == nil) || t.IsUntyped() || !itype.IsInterface() || itype.IsEmptyInterface() {
                base.Fatalf("ITabAddr(%v, %v)", t, itype)
        }
-       s := ir.Pkgs.Itab.Lookup(t.ShortString() + "," + itype.ShortString())
-       if s.Def == nil {
-               n := typecheck.NewName(s)
-               n.SetType(types.Types[types.TUINT8])
-               n.Class = ir.PEXTERN
-               n.SetTypecheck(1)
-               s.Def = n
-               itabs = append(itabs, itabEntry{t: t, itype: itype, lsym: n.Linksym()})
-       }
-
-       n := typecheck.NodAddr(ir.AsNode(s.Def))
-       n.SetType(types.NewPtr(s.Def.Type()))
-       n.SetTypecheck(1)
-       return n
+       s, existed := ir.Pkgs.Itab.LookupOK(t.ShortString() + "," + itype.ShortString())
+       if !existed {
+               itabs = append(itabs, itabEntry{t: t, itype: itype, lsym: s.Linksym()})
+       }
+
+       lsym := s.Linksym()
+       n := ir.NewLinksymExpr(base.Pos, lsym, types.Types[types.TUINT8])
+       return typecheck.Expr(typecheck.NodAddr(n)).(*ir.AddrExpr)
 }
 
 // needkeyupdate reports whether map updates with t as a key
index cf1b41646277046160ac7ab0563e6beab9d8c436..f3ad82e7b60a1a324f35e9ebacb16a309afc00e6 100644 (file)
@@ -344,7 +344,7 @@ func (s *Schedule) StaticAssign(l *ir.Name, loff int64, r ir.Node, typ *types.Ty
                // Create a copy of l to modify while we emit data.
 
                // Emit itab, advance offset.
-               staticdata.InitAddr(l, loff, itab.X.(*ir.Name).Linksym())
+               staticdata.InitAddr(l, loff, itab.X.(*ir.LinksymOffsetExpr).Linksym)
 
                // Emit data.
                if types.IsDirectIface(val.Type()) {