]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile, runtime: always enable defer/go wrapping
authorCherry Mui <cherryyz@google.com>
Fri, 4 Jun 2021 17:53:18 +0000 (13:53 -0400)
committerCherry Mui <cherryyz@google.com>
Tue, 8 Jun 2021 17:03:39 +0000 (17:03 +0000)
Hardwire regabidefers to true. Remove it from GOEXPERIMENTs.

Fallback paths are not cleaned up in this CL. That will be done
in later CLs.

Change-Id: Iec1112a1e55d5f6ef70232a5ff6e702f649071c4
Reviewed-on: https://go-review.googlesource.com/c/go/+/325913
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/compile/internal/ssagen/ssa.go
src/cmd/compile/internal/walk/order.go
src/internal/buildcfg/exp.go
src/internal/goexperiment/exp_regabidefer_off.go [deleted file]
src/internal/goexperiment/exp_regabidefer_on.go [deleted file]
src/internal/goexperiment/flags.go
src/runtime/panic.go
src/runtime/proc.go
test/live.go
test/live_regabi.go

index f59220ab8e4f07ae5a9f5529541473b008cb15c1..106ce8d6c51cd603dea2217f1547ec4f41b38a05 100644 (file)
@@ -4696,7 +4696,7 @@ func (s *state) openDeferRecord(n *ir.CallExpr) {
        var args []*ssa.Value
        var argNodes []*ir.Name
 
-       if buildcfg.Experiment.RegabiDefer && (len(n.Args) != 0 || n.Op() == ir.OCALLINTER || n.X.Type().NumResults() != 0) {
+       if len(n.Args) != 0 || n.Op() == ir.OCALLINTER || n.X.Type().NumResults() != 0 {
                s.Fatalf("defer call with arguments or results: %v", n)
        }
 
@@ -4951,7 +4951,7 @@ func (s *state) call(n *ir.CallExpr, k callKind, returnResultAddr bool) *ssa.Val
                }
        }
 
-       if buildcfg.Experiment.RegabiDefer && k != callNormal && (len(n.Args) != 0 || n.Op() == ir.OCALLINTER || n.X.Type().NumResults() != 0) {
+       if k != callNormal && (len(n.Args) != 0 || n.Op() == ir.OCALLINTER || n.X.Type().NumResults() != 0) {
                s.Fatalf("go/defer call with arguments: %v", n)
        }
 
index 19d9551566e92438aed97cc4fc44985ebbd85bf6..d1fd3a9b732ed12e06cce9f82099e2e0292d71c9 100644 (file)
@@ -7,7 +7,6 @@ package walk
 import (
        "fmt"
        "go/constant"
-       "internal/buildcfg"
 
        "cmd/compile/internal/base"
        "cmd/compile/internal/escape"
@@ -790,9 +789,7 @@ func (o *orderState) stmt(n ir.Node) {
                        n.Call = walkRecover(n.Call.(*ir.CallExpr), &init)
                        o.stmtList(init)
                }
-               if buildcfg.Experiment.RegabiDefer {
-                       o.wrapGoDefer(n)
-               }
+               o.wrapGoDefer(n)
                o.out = append(o.out, n)
                o.cleanTemp(t)
 
index 38a2045639162f7eb988497602015d5a858cf799..9402da2ebff3bf0c5cee2e4279fbfb4cbd0b76a5 100644 (file)
@@ -30,7 +30,6 @@ var experimentBaseline = goexperiment.Flags{
        RegabiWrappers: regabiSupported,
        RegabiG:        regabiSupported,
        RegabiReflect:  regabiSupported,
-       RegabiDefer:    true,
        RegabiArgs:     regabiSupported,
 }
 
@@ -70,7 +69,6 @@ func parseExperiments() goexperiment.Flags {
                        flags.RegabiWrappers = v
                        flags.RegabiG = v
                        flags.RegabiReflect = v
-                       flags.RegabiDefer = v
                        flags.RegabiArgs = v
                }
 
@@ -110,8 +108,8 @@ func parseExperiments() goexperiment.Flags {
        if flags.RegabiG && !flags.RegabiWrappers {
                Error = fmt.Errorf("GOEXPERIMENT regabig requires regabiwrappers")
        }
-       if flags.RegabiArgs && !(flags.RegabiWrappers && flags.RegabiG && flags.RegabiReflect && flags.RegabiDefer) {
-               Error = fmt.Errorf("GOEXPERIMENT regabiargs requires regabiwrappers,regabig,regabireflect,regabidefer")
+       if flags.RegabiArgs && !(flags.RegabiWrappers && flags.RegabiG && flags.RegabiReflect) {
+               Error = fmt.Errorf("GOEXPERIMENT regabiargs requires regabiwrappers,regabig,regabireflect")
        }
        return flags
 }
diff --git a/src/internal/goexperiment/exp_regabidefer_off.go b/src/internal/goexperiment/exp_regabidefer_off.go
deleted file mode 100644 (file)
index b47c0c2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// Code generated by mkconsts.go. DO NOT EDIT.
-
-//go:build !goexperiment.regabidefer
-// +build !goexperiment.regabidefer
-
-package goexperiment
-
-const RegabiDefer = false
-const RegabiDeferInt = 0
diff --git a/src/internal/goexperiment/exp_regabidefer_on.go b/src/internal/goexperiment/exp_regabidefer_on.go
deleted file mode 100644 (file)
index bbf2f6c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// Code generated by mkconsts.go. DO NOT EDIT.
-
-//go:build goexperiment.regabidefer
-// +build goexperiment.regabidefer
-
-package goexperiment
-
-const RegabiDefer = true
-const RegabiDeferInt = 1
index cd4c178818495f165b20ec2caebdecf8cbe6cc13..c20dbcd9f5ee539aff6b5cec5f11b30242f328fc 100644 (file)
@@ -78,9 +78,6 @@ type Flags struct {
        // reflect and runtime (which are disabled by default) so it
        // can be used in targeted tests.
        RegabiReflect bool
-       // RegabiDefer enables desugaring defer and go calls
-       // into argument-less closures.
-       RegabiDefer bool
        // RegabiArgs enables register arguments/results in all
        // compiled Go functions.
        //
index f6c38aafcc825d30f55a92832ff10bf64de8c993..e73d59c136696278a3f9c2c8a4c654f0f26c1424 100644 (file)
@@ -6,7 +6,6 @@ package runtime
 
 import (
        "internal/abi"
-       "internal/goexperiment"
        "runtime/internal/atomic"
        "runtime/internal/sys"
        "unsafe"
@@ -236,7 +235,7 @@ func deferproc(siz int32, fn *funcval) { // arguments of fn follow fn
                throw("defer on system stack")
        }
 
-       if goexperiment.RegabiDefer && siz != 0 {
+       if true && siz != 0 {
                // TODO: Make deferproc just take a func().
                throw("defer with non-empty frame")
        }
@@ -293,7 +292,7 @@ func deferprocStack(d *_defer) {
                // go code on the system stack can't defer
                throw("defer on system stack")
        }
-       if goexperiment.RegabiDefer && d.siz != 0 {
+       if true && d.siz != 0 {
                throw("defer with non-empty frame")
        }
        // siz and fn are already set.
@@ -395,7 +394,7 @@ func deferArgs(d *_defer) unsafe.Pointer {
 // that experiment, we should change the type of d.fn.
 //go:nosplit
 func deferFunc(d *_defer) func() {
-       if !goexperiment.RegabiDefer {
+       if false {
                throw("requires GOEXPERIMENT=regabidefer")
        }
        var fn func()
@@ -655,7 +654,7 @@ func Goexit() {
                                addOneOpenDeferFrame(gp, 0, nil)
                        }
                } else {
-                       if goexperiment.RegabiDefer {
+                       if true {
                                // Save the pc/sp in deferCallSave(), so we can "recover" back to this
                                // loop if necessary.
                                deferCallSave(&p, deferFunc(d))
@@ -857,7 +856,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
                argWidth, fd = readvarintUnsafe(fd)
                closureOffset, fd = readvarintUnsafe(fd)
                nArgs, fd = readvarintUnsafe(fd)
-               if goexperiment.RegabiDefer && argWidth != 0 {
+               if true && argWidth != 0 {
                        throw("defer with non-empty frame")
                }
                if deferBits&(1<<i) == 0 {
@@ -885,7 +884,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
                deferBits = deferBits &^ (1 << i)
                *(*uint8)(unsafe.Pointer(d.varp - uintptr(deferBitsOffset))) = deferBits
                p := d._panic
-               if goexperiment.RegabiDefer {
+               if true {
                        deferCallSave(p, deferFunc(d))
                } else {
                        reflectcallSave(p, unsafe.Pointer(closure), deferArgs, argWidth)
@@ -913,7 +912,7 @@ func runOpenDeferFrame(gp *g, d *_defer) bool {
 // This is marked as a wrapper by the compiler so it doesn't appear in
 // tracebacks.
 func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
-       if goexperiment.RegabiDefer {
+       if true {
                throw("not allowed with GOEXPERIMENT=regabidefer")
        }
        if p != nil {
@@ -939,7 +938,7 @@ func reflectcallSave(p *_panic, fn, arg unsafe.Pointer, argsize uint32) {
 // This is marked as a wrapper by the compiler so it doesn't appear in
 // tracebacks.
 func deferCallSave(p *_panic, fn func()) {
-       if !goexperiment.RegabiDefer {
+       if false {
                throw("only allowed with GOEXPERIMENT=regabidefer")
        }
        if p != nil {
@@ -1042,7 +1041,7 @@ func gopanic(e interface{}) {
                } else {
                        p.argp = unsafe.Pointer(getargp())
 
-                       if goexperiment.RegabiDefer {
+                       if true {
                                fn := deferFunc(d)
                                fn()
                        } else {
index 24566e5efa2dd1c56dc234987928ddaef31e43c5..b93b337f19a9cded27bcff5adb29c7cbc3c99754 100644 (file)
@@ -7,7 +7,6 @@ package runtime
 import (
        "internal/abi"
        "internal/cpu"
-       "internal/goexperiment"
        "runtime/internal/atomic"
        "runtime/internal/sys"
        "unsafe"
@@ -4259,7 +4258,7 @@ func newproc(siz int32, fn *funcval) {
 //
 //go:systemstack
 func newproc1(fn *funcval, argp unsafe.Pointer, narg int32, callergp *g, callerpc uintptr) *g {
-       if goexperiment.RegabiDefer && narg != 0 {
+       if true && narg != 0 {
                // TODO: When we commit to GOEXPERIMENT=regabidefer,
                // rewrite the comments for newproc and newproc1.
                // newproc will no longer have a funny stack layout or
index ee51134371e37924c11efc3674608771e73675f7..5b14932cae91bf2add82bdad54c98a6711aa0dfd 100644 (file)
@@ -1,5 +1,5 @@
 // errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off
-// +build !ppc64,!ppc64le,goexperiment.regabidefer,!goexperiment.regabiargs
+// +build !ppc64,!ppc64le,!goexperiment.regabiargs
 
 // ppc64 needs a better tighten pass to make f18 pass
 // rescheduling checks need to be turned off because there are some live variables across the inserted check call
index 2b0278ecb83c903531e7076d865e1d6d6fec63b2..c35a27e4e08cbf60ad68bdef1e25ad8b1cfa0639 100644 (file)
@@ -1,5 +1,5 @@
 // errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off
-// +build amd64,goexperiment.regabidefer,goexperiment.regabiargs
+// +build amd64,goexperiment.regabiargs
 
 // Copyright 2014 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style