]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ir: remove OSIZEOF, etc
authorMatthew Dempsky <mdempsky@google.com>
Fri, 8 Sep 2023 23:25:02 +0000 (16:25 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 11 Sep 2023 20:48:10 +0000 (20:48 +0000)
These are no longer needed after the previous CL, which moved handling
of unsafe.Sizeof, etc. directly into the unified frontend.

Change-Id: Ieb35ffca0bc25319e58132fb5d035c5b441acea7
Reviewed-on: https://go-review.googlesource.com/c/go/+/527098
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/compile/internal/escape/utils.go
src/cmd/compile/internal/ir/expr.go
src/cmd/compile/internal/ir/fmt.go
src/cmd/compile/internal/ir/node.go
src/cmd/compile/internal/ir/op_string.go
src/cmd/compile/internal/typecheck/const.go
src/cmd/compile/internal/typecheck/func.go
src/cmd/compile/internal/typecheck/typecheck.go
src/cmd/compile/internal/typecheck/universe.go

index b481d8e4b6479f900784d62cbfe9888d799aff5f..bd1d2c22a2cfb8b85bc70f7be4e2ee0c6e9b089b 100644 (file)
@@ -151,7 +151,7 @@ func mayAffectMemory(n ir.Node) bool {
                n := n.(*ir.ConvExpr)
                return mayAffectMemory(n.X)
 
-       case ir.OLEN, ir.OCAP, ir.ONOT, ir.OBITNOT, ir.OPLUS, ir.ONEG, ir.OALIGNOF, ir.OOFFSETOF, ir.OSIZEOF:
+       case ir.OLEN, ir.OCAP, ir.ONOT, ir.OBITNOT, ir.OPLUS, ir.ONEG:
                n := n.(*ir.UnaryExpr)
                return mayAffectMemory(n.X)
 
index 676045d27ade4e1ec25c60ef3ebbb8815d5bb553..78d9f9692ab5e389932ec44606f4e99f66420319 100644 (file)
@@ -754,8 +754,7 @@ func (n *UnaryExpr) SetOp(op Op) {
        default:
                panic(n.no("SetOp " + op.String()))
        case OBITNOT, ONEG, ONOT, OPLUS, ORECV,
-               OALIGNOF, OCAP, OCLEAR, OCLOSE, OIMAG, OLEN, ONEW,
-               OOFFSETOF, OPANIC, OREAL, OSIZEOF,
+               OCAP, OCLEAR, OCLOSE, OIMAG, OLEN, ONEW, OPANIC, OREAL,
                OCHECKNIL, OCFUNC, OIDATA, OITAB, OSPTR,
                OUNSAFESTRINGDATA, OUNSAFESLICEDATA:
                n.op = op
index b8a175471218abb640c0b1949020643f5ac2141b..1dad811d410562cc71cb8a12fe0bea152dfb4f55 100644 (file)
@@ -27,7 +27,6 @@ var OpNames = []string{
        OADDR:             "&",
        OADD:              "+",
        OADDSTR:           "+",
-       OALIGNOF:          "unsafe.Alignof",
        OANDAND:           "&&",
        OANDNOT:           "&^",
        OAND:              "&",
@@ -70,7 +69,6 @@ var OpNames = []string{
        ONEW:              "new",
        ONE:               "!=",
        ONOT:              "!",
-       OOFFSETOF:         "unsafe.Offsetof",
        OOROR:             "||",
        OOR:               "|",
        OPANIC:            "panic",
@@ -85,7 +83,6 @@ var OpNames = []string{
        ORSH:              ">>",
        OSELECT:           "select",
        OSEND:             "<-",
-       OSIZEOF:           "unsafe.Sizeof",
        OSUB:              "-",
        OSWITCH:           "switch",
        OUNSAFEADD:        "unsafe.Add",
@@ -173,7 +170,6 @@ func fmtNode(n Node, s fmt.State, verb rune) {
 }
 
 var OpPrec = []int{
-       OALIGNOF:          8,
        OAPPEND:           8,
        OBYTES2STR:        8,
        OARRAYLIT:         8,
@@ -206,13 +202,11 @@ var OpPrec = []int{
        ONEW:              8,
        ONIL:              8,
        ONONAME:           8,
-       OOFFSETOF:         8,
        OPANIC:            8,
        OPAREN:            8,
        OPRINTN:           8,
        OPRINT:            8,
        ORUNESTR:          8,
-       OSIZEOF:           8,
        OSLICE2ARR:        8,
        OSLICE2ARRPTR:     8,
        OSTR2BYTES:        8,
@@ -738,10 +732,7 @@ func exprFmt(n Node, s fmt.State, prec int) {
                OCLOSE,
                OLEN,
                ONEW,
-               OPANIC,
-               OALIGNOF,
-               OOFFSETOF,
-               OSIZEOF:
+               OPANIC:
                n := n.(*UnaryExpr)
                fmt.Fprintf(s, "%v(%v)", n.Op(), n.X)
 
index f91b6f44b38bb02cea848e3806d3dbbb2a390b76..b7b7dc10b88e4dcc14a2319bf8a0073d83f91d1b 100644 (file)
@@ -244,9 +244,6 @@ const (
        OREAL             // real(X)
        OIMAG             // imag(X)
        OCOMPLEX          // complex(X, Y)
-       OALIGNOF          // unsafe.Alignof(X)
-       OOFFSETOF         // unsafe.Offsetof(X)
-       OSIZEOF           // unsafe.Sizeof(X)
        OUNSAFEADD        // unsafe.Add(X, Y)
        OUNSAFESLICE      // unsafe.Slice(X, Y)
        OUNSAFESLICEDATA  // unsafe.SliceData(X)
index 500a534d14a47dd3ad422377a5e051292ea8ddf3..25d36723369f6b5f1aa7a0b3ff932089ecdee084 100644 (file)
@@ -118,56 +118,53 @@ func _() {
        _ = x[OREAL-107]
        _ = x[OIMAG-108]
        _ = x[OCOMPLEX-109]
-       _ = x[OALIGNOF-110]
-       _ = x[OOFFSETOF-111]
-       _ = x[OSIZEOF-112]
-       _ = x[OUNSAFEADD-113]
-       _ = x[OUNSAFESLICE-114]
-       _ = x[OUNSAFESLICEDATA-115]
-       _ = x[OUNSAFESTRING-116]
-       _ = x[OUNSAFESTRINGDATA-117]
-       _ = x[OMETHEXPR-118]
-       _ = x[OMETHVALUE-119]
-       _ = x[OBLOCK-120]
-       _ = x[OBREAK-121]
-       _ = x[OCASE-122]
-       _ = x[OCONTINUE-123]
-       _ = x[ODEFER-124]
-       _ = x[OFALL-125]
-       _ = x[OFOR-126]
-       _ = x[OGOTO-127]
-       _ = x[OIF-128]
-       _ = x[OLABEL-129]
-       _ = x[OGO-130]
-       _ = x[ORANGE-131]
-       _ = x[ORETURN-132]
-       _ = x[OSELECT-133]
-       _ = x[OSWITCH-134]
-       _ = x[OTYPESW-135]
-       _ = x[OINLCALL-136]
-       _ = x[OEFACE-137]
-       _ = x[OITAB-138]
-       _ = x[OIDATA-139]
-       _ = x[OSPTR-140]
-       _ = x[OCFUNC-141]
-       _ = x[OCHECKNIL-142]
-       _ = x[ORESULT-143]
-       _ = x[OINLMARK-144]
-       _ = x[OLINKSYMOFFSET-145]
-       _ = x[OJUMPTABLE-146]
-       _ = x[ODYNAMICDOTTYPE-147]
-       _ = x[ODYNAMICDOTTYPE2-148]
-       _ = x[ODYNAMICTYPE-149]
-       _ = x[OTAILCALL-150]
-       _ = x[OGETG-151]
-       _ = x[OGETCALLERPC-152]
-       _ = x[OGETCALLERSP-153]
-       _ = x[OEND-154]
+       _ = x[OUNSAFEADD-110]
+       _ = x[OUNSAFESLICE-111]
+       _ = x[OUNSAFESLICEDATA-112]
+       _ = x[OUNSAFESTRING-113]
+       _ = x[OUNSAFESTRINGDATA-114]
+       _ = x[OMETHEXPR-115]
+       _ = x[OMETHVALUE-116]
+       _ = x[OBLOCK-117]
+       _ = x[OBREAK-118]
+       _ = x[OCASE-119]
+       _ = x[OCONTINUE-120]
+       _ = x[ODEFER-121]
+       _ = x[OFALL-122]
+       _ = x[OFOR-123]
+       _ = x[OGOTO-124]
+       _ = x[OIF-125]
+       _ = x[OLABEL-126]
+       _ = x[OGO-127]
+       _ = x[ORANGE-128]
+       _ = x[ORETURN-129]
+       _ = x[OSELECT-130]
+       _ = x[OSWITCH-131]
+       _ = x[OTYPESW-132]
+       _ = x[OINLCALL-133]
+       _ = x[OEFACE-134]
+       _ = x[OITAB-135]
+       _ = x[OIDATA-136]
+       _ = x[OSPTR-137]
+       _ = x[OCFUNC-138]
+       _ = x[OCHECKNIL-139]
+       _ = x[ORESULT-140]
+       _ = x[OINLMARK-141]
+       _ = x[OLINKSYMOFFSET-142]
+       _ = x[OJUMPTABLE-143]
+       _ = x[ODYNAMICDOTTYPE-144]
+       _ = x[ODYNAMICDOTTYPE2-145]
+       _ = x[ODYNAMICTYPE-146]
+       _ = x[OTAILCALL-147]
+       _ = x[OGETG-148]
+       _ = x[OGETCALLERPC-149]
+       _ = x[OGETCALLERSP-150]
+       _ = x[OEND-151]
 }
 
-const _Op_name = "XXXNAMENONAMETYPELITERALNILADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESSLICE2ARRSLICE2ARRPTRASAS2AS2DOTTYPEAS2FUNCAS2MAPRAS2RECVASOPCALLCALLFUNCCALLMETHCALLINTERCAPCLEARCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVIDATACONVNOPCOPYDCLDCLFUNCDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMAKESLICECOPYMULDIVMODLSHRSHANDANDNOTNEWNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERSTRINGHEADERRECOVERRECOVERFPRECVRUNESTRSELRECV2MINMAXREALIMAGCOMPLEXALIGNOFOFFSETOFSIZEOFUNSAFEADDUNSAFESLICEUNSAFESLICEDATAUNSAFESTRINGUNSAFESTRINGDATAMETHEXPRMETHVALUEBLOCKBREAKCASECONTINUEDEFERFALLFORGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWINLCALLEFACEITABIDATASPTRCFUNCCHECKNILRESULTINLMARKLINKSYMOFFSETJUMPTABLEDYNAMICDOTTYPEDYNAMICDOTTYPE2DYNAMICTYPETAILCALLGETGGETCALLERPCGETCALLERSPEND"
+const _Op_name = "XXXNAMENONAMETYPELITERALNILADDSUBORXORADDSTRADDRANDANDAPPENDBYTES2STRBYTES2STRTMPRUNES2STRSTR2BYTESSTR2BYTESTMPSTR2RUNESSLICE2ARRSLICE2ARRPTRASAS2AS2DOTTYPEAS2FUNCAS2MAPRAS2RECVASOPCALLCALLFUNCCALLMETHCALLINTERCAPCLEARCLOSECLOSURECOMPLITMAPLITSTRUCTLITARRAYLITSLICELITPTRLITCONVCONVIFACECONVIDATACONVNOPCOPYDCLDCLFUNCDELETEDOTDOTPTRDOTMETHDOTINTERXDOTDOTTYPEDOTTYPE2EQNELTLEGEGTDEREFINDEXINDEXMAPKEYSTRUCTKEYLENMAKEMAKECHANMAKEMAPMAKESLICEMAKESLICECOPYMULDIVMODLSHRSHANDANDNOTNEWNOTBITNOTPLUSNEGORORPANICPRINTPRINTNPARENSENDSLICESLICEARRSLICESTRSLICE3SLICE3ARRSLICEHEADERSTRINGHEADERRECOVERRECOVERFPRECVRUNESTRSELRECV2MINMAXREALIMAGCOMPLEXUNSAFEADDUNSAFESLICEUNSAFESLICEDATAUNSAFESTRINGUNSAFESTRINGDATAMETHEXPRMETHVALUEBLOCKBREAKCASECONTINUEDEFERFALLFORGOTOIFLABELGORANGERETURNSELECTSWITCHTYPESWINLCALLEFACEITABIDATASPTRCFUNCCHECKNILRESULTINLMARKLINKSYMOFFSETJUMPTABLEDYNAMICDOTTYPEDYNAMICDOTTYPE2DYNAMICTYPETAILCALLGETGGETCALLERPCGETCALLERSPEND"
 
-var _Op_index = [...]uint16{0, 3, 7, 13, 17, 24, 27, 30, 33, 35, 38, 44, 48, 54, 60, 69, 81, 90, 99, 111, 120, 129, 141, 143, 146, 156, 163, 170, 177, 181, 185, 193, 201, 210, 213, 218, 223, 230, 237, 243, 252, 260, 268, 274, 278, 287, 296, 303, 307, 310, 317, 323, 326, 332, 339, 347, 351, 358, 366, 368, 370, 372, 374, 376, 378, 383, 388, 396, 399, 408, 411, 415, 423, 430, 439, 452, 455, 458, 461, 464, 467, 470, 476, 479, 482, 488, 492, 495, 499, 504, 509, 515, 520, 524, 529, 537, 545, 551, 560, 571, 583, 590, 599, 603, 610, 618, 621, 624, 628, 632, 639, 646, 654, 660, 669, 680, 695, 707, 723, 731, 740, 745, 750, 754, 762, 767, 771, 774, 778, 780, 785, 787, 792, 798, 804, 810, 816, 823, 828, 832, 837, 841, 846, 854, 860, 867, 880, 889, 903, 918, 929, 937, 941, 952, 963, 966}
+var _Op_index = [...]uint16{0, 3, 7, 13, 17, 24, 27, 30, 33, 35, 38, 44, 48, 54, 60, 69, 81, 90, 99, 111, 120, 129, 141, 143, 146, 156, 163, 170, 177, 181, 185, 193, 201, 210, 213, 218, 223, 230, 237, 243, 252, 260, 268, 274, 278, 287, 296, 303, 307, 310, 317, 323, 326, 332, 339, 347, 351, 358, 366, 368, 370, 372, 374, 376, 378, 383, 388, 396, 399, 408, 411, 415, 423, 430, 439, 452, 455, 458, 461, 464, 467, 470, 476, 479, 482, 488, 492, 495, 499, 504, 509, 515, 520, 524, 529, 537, 545, 551, 560, 571, 583, 590, 599, 603, 610, 618, 621, 624, 628, 632, 639, 648, 659, 674, 686, 702, 710, 719, 724, 729, 733, 741, 746, 750, 753, 757, 759, 764, 766, 771, 777, 783, 789, 795, 802, 807, 811, 816, 820, 825, 833, 839, 846, 859, 868, 882, 897, 908, 916, 920, 931, 942, 945}
 
 func (i Op) String() string {
        if i >= Op(len(_Op_index)-1) {
index 9ad37033fd5e5f7adf873ba51672983b7a6bfe02..56a2072d290c53c0af36091c70a06f07cacc78ed 100644 (file)
@@ -529,96 +529,3 @@ func callOrChan(n ir.Node) bool {
        }
        return false
 }
-
-// evalunsafe evaluates a package unsafe operation and returns the result.
-func evalunsafe(n ir.Node) int64 {
-       switch n.Op() {
-       case ir.OALIGNOF, ir.OSIZEOF:
-               n := n.(*ir.UnaryExpr)
-               n.X = Expr(n.X)
-               n.X = DefaultLit(n.X, nil)
-               tr := n.X.Type()
-               if tr == nil {
-                       return 0
-               }
-               types.CalcSize(tr)
-               if n.Op() == ir.OALIGNOF {
-                       return tr.Alignment()
-               }
-               return tr.Size()
-
-       case ir.OOFFSETOF:
-               // must be a selector.
-               n := n.(*ir.UnaryExpr)
-               // ODOT and ODOTPTR are allowed in case the OXDOT transformation has
-               // already happened (e.g. during -G=3 stenciling).
-               if n.X.Op() != ir.OXDOT && n.X.Op() != ir.ODOT && n.X.Op() != ir.ODOTPTR {
-                       base.Errorf("invalid expression %v", n)
-                       return 0
-               }
-               sel := n.X.(*ir.SelectorExpr)
-
-               // Remember base of selector to find it back after dot insertion.
-               // Since r->left may be mutated by typechecking, check it explicitly
-               // first to track it correctly.
-               sel.X = Expr(sel.X)
-               sbase := sel.X
-
-               // Implicit dot may already be resolved for instantiating generic function. So we
-               // need to remove any implicit dot until we reach the first non-implicit one, it's
-               // the right base selector. See issue #53137.
-               var clobberBase func(n ir.Node) ir.Node
-               clobberBase = func(n ir.Node) ir.Node {
-                       if sel, ok := n.(*ir.SelectorExpr); ok && sel.Implicit() {
-                               return clobberBase(sel.X)
-                       }
-                       return n
-               }
-               sbase = clobberBase(sbase)
-
-               tsel := Expr(sel)
-               n.X = tsel
-               if tsel.Type() == nil {
-                       return 0
-               }
-               switch tsel.Op() {
-               case ir.ODOT, ir.ODOTPTR:
-                       break
-               case ir.OMETHVALUE:
-                       base.Errorf("invalid expression %v: argument is a method value", n)
-                       return 0
-               default:
-                       base.Errorf("invalid expression %v", n)
-                       return 0
-               }
-
-               // Sum offsets for dots until we reach sbase.
-               var v int64
-               var next ir.Node
-               for r := tsel; r != sbase; r = next {
-                       switch r.Op() {
-                       case ir.ODOTPTR:
-                               // For Offsetof(s.f), s may itself be a pointer,
-                               // but accessing f must not otherwise involve
-                               // indirection via embedded pointer types.
-                               r := r.(*ir.SelectorExpr)
-                               if r.X != sbase {
-                                       base.Errorf("invalid expression %v: selector implies indirection of embedded %v", n, r.X)
-                                       return 0
-                               }
-                               fallthrough
-                       case ir.ODOT:
-                               r := r.(*ir.SelectorExpr)
-                               v += r.Offset()
-                               next = r.X
-                       default:
-                               ir.Dump("unsafenmagic", tsel)
-                               base.Fatalf("impossible %v node after dot insertion", r.Op())
-                       }
-               }
-               return v
-       }
-
-       base.Fatalf("unexpected op %v", n.Op())
-       return 0
-}
index 3dbe51007c33944b119be3a85c0e9a5d1313993f..f76b5573e91f731999c316274ef3543a9af297aa 100644 (file)
@@ -168,7 +168,7 @@ func tcCall(n *ir.CallExpr, top int) ir.Node {
                case ir.OCAP, ir.OCLEAR, ir.OCLOSE, ir.OIMAG, ir.OLEN, ir.OPANIC, ir.OREAL, ir.OUNSAFESTRINGDATA, ir.OUNSAFESLICEDATA:
                        typecheckargs(n)
                        fallthrough
-               case ir.ONEW, ir.OALIGNOF, ir.OOFFSETOF, ir.OSIZEOF:
+               case ir.ONEW:
                        arg, ok := needOneArg(n, "%v", n.Op())
                        if !ok {
                                n.SetType(nil)
index 1cd5d883924b0a4e8a8a7881300305d5b7b6a420..ed25be6f2a7b99025ed5c4aca22b27d307d56a59 100644 (file)
@@ -390,11 +390,6 @@ func typecheck1(n ir.Node, top int) ir.Node {
                n := n.(*ir.CallExpr)
                return tcCall(n, top)
 
-       case ir.OALIGNOF, ir.OOFFSETOF, ir.OSIZEOF:
-               n := n.(*ir.UnaryExpr)
-               n.SetType(types.Types[types.TUINTPTR])
-               return OrigInt(n, evalunsafe(n))
-
        case ir.OCAP, ir.OLEN:
                n := n.(*ir.UnaryExpr)
                return tcLenCap(n)
index 62f5b628dd86ec19edda865d1f84ec97154aa312..9f917d09a8a4bfafd581b925afedbff0cfba6772 100644 (file)
@@ -56,9 +56,6 @@ var unsafeFuncs = [...]struct {
        op   ir.Op
 }{
        {"Add", ir.OUNSAFEADD},
-       {"Alignof", ir.OALIGNOF},
-       {"Offsetof", ir.OOFFSETOF},
-       {"Sizeof", ir.OSIZEOF},
        {"Slice", ir.OUNSAFESLICE},
        {"SliceData", ir.OUNSAFESLICEDATA},
        {"String", ir.OUNSAFESTRING},