mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
all: remove pre-Go 1.17 workarounds
The Go bootstrap toolchain requirement is now Go 1.17. We can finally delete all these pre-Go 1.17 workarounds. For #44505. Change-Id: I59d4dff1cde23da022892b5b6a116eb3dbad9ce4 Reviewed-on: https://go-review.googlesource.com/c/go/+/420903 Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Austin Clements <austin@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
parent
44ff9bff0c
commit
fb1bfd4d37
|
@ -1,17 +0,0 @@
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build !go1.8
|
|
||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package gc
|
|
||||||
|
|
||||||
import (
|
|
||||||
"cmd/compile/internal/base"
|
|
||||||
"runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
func startMutexProfiling() {
|
|
||||||
base.Fatalf("mutex profiling unavailable in version %v", runtime.Version())
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.8
|
|
||||||
// +build go1.8
|
|
||||||
|
|
||||||
package gc
|
|
||||||
|
|
||||||
import "runtime"
|
|
||||||
|
|
||||||
func startMutexProfiling() {
|
|
||||||
runtime.SetMutexProfileFraction(1)
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.7
|
|
||||||
// +build go1.7
|
|
||||||
|
|
||||||
package gc
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
tracepkg "runtime/trace"
|
|
||||||
|
|
||||||
"cmd/compile/internal/base"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
traceHandler = traceHandlerGo17
|
|
||||||
}
|
|
||||||
|
|
||||||
func traceHandlerGo17(traceprofile string) {
|
|
||||||
f, err := os.Create(traceprofile)
|
|
||||||
if err != nil {
|
|
||||||
base.Fatalf("%v", err)
|
|
||||||
}
|
|
||||||
if err := tracepkg.Start(f); err != nil {
|
|
||||||
base.Fatalf("%v", err)
|
|
||||||
}
|
|
||||||
base.AtExit(tracepkg.Stop)
|
|
||||||
}
|
|
|
@ -8,12 +8,11 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"runtime/pprof"
|
"runtime/pprof"
|
||||||
|
tracepkg "runtime/trace"
|
||||||
|
|
||||||
"cmd/compile/internal/base"
|
"cmd/compile/internal/base"
|
||||||
)
|
)
|
||||||
|
|
||||||
var traceHandler func(string)
|
|
||||||
|
|
||||||
func startProfile() {
|
func startProfile() {
|
||||||
if base.Flag.CPUProfile != "" {
|
if base.Flag.CPUProfile != "" {
|
||||||
f, err := os.Create(base.Flag.CPUProfile)
|
f, err := os.Create(base.Flag.CPUProfile)
|
||||||
|
@ -64,13 +63,20 @@ func startProfile() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
base.Fatalf("%v", err)
|
base.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
startMutexProfiling()
|
runtime.SetMutexProfileFraction(1)
|
||||||
base.AtExit(func() {
|
base.AtExit(func() {
|
||||||
pprof.Lookup("mutex").WriteTo(f, 0)
|
pprof.Lookup("mutex").WriteTo(f, 0)
|
||||||
f.Close()
|
f.Close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if base.Flag.TraceProfile != "" && traceHandler != nil {
|
if base.Flag.TraceProfile != "" {
|
||||||
traceHandler(base.Flag.TraceProfile)
|
f, err := os.Create(base.Flag.TraceProfile)
|
||||||
|
if err != nil {
|
||||||
|
base.Fatalf("%v", err)
|
||||||
|
}
|
||||||
|
if err := tracepkg.Start(f); err != nil {
|
||||||
|
base.Fatalf("%v", err)
|
||||||
|
}
|
||||||
|
base.AtExit(tracepkg.Stop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.8
|
|
||||||
// +build go1.8
|
|
||||||
|
|
||||||
package logopt
|
|
||||||
|
|
||||||
import "net/url"
|
|
||||||
|
|
||||||
func pathEscape(s string) string {
|
|
||||||
return url.PathEscape(s)
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
// Copyright 2019 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build !go1.8
|
|
||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package logopt
|
|
||||||
|
|
||||||
// For bootstrapping with an early version of Go
|
|
||||||
func pathEscape(s string) string {
|
|
||||||
panic("This should never be called; the compiler is not fully bootstrapped if it is.")
|
|
||||||
}
|
|
|
@ -376,7 +376,7 @@ func writerForLSP(subdirpath, file string) io.WriteCloser {
|
||||||
if lastdot != -1 {
|
if lastdot != -1 {
|
||||||
basename = basename[:lastdot]
|
basename = basename[:lastdot]
|
||||||
}
|
}
|
||||||
basename = pathEscape(basename)
|
basename = url.PathEscape(basename)
|
||||||
|
|
||||||
// Assume a directory, make a file
|
// Assume a directory, make a file
|
||||||
p := filepath.Join(subdirpath, basename+".json")
|
p := filepath.Join(subdirpath, basename+".json")
|
||||||
|
@ -428,7 +428,7 @@ func FlushLoggedOpts(ctxt *obj.Link, slashPkgPath string) {
|
||||||
if slashPkgPath == "" {
|
if slashPkgPath == "" {
|
||||||
slashPkgPath = "\000"
|
slashPkgPath = "\000"
|
||||||
}
|
}
|
||||||
subdirpath := filepath.Join(dest, pathEscape(slashPkgPath))
|
subdirpath := filepath.Join(dest, url.PathEscape(slashPkgPath))
|
||||||
err := os.MkdirAll(subdirpath, 0755)
|
err := os.MkdirAll(subdirpath, 0755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Could not create directory %s for logging optimizer actions, %v", subdirpath, err)
|
log.Fatalf("Could not create directory %s for logging optimizer actions, %v", subdirpath, err)
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
// Copyright 2021 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build !go1.7
|
|
||||||
// +build !go1.7
|
|
||||||
|
|
||||||
// TODO(mdempsky): Remove after #44505 is resolved
|
|
||||||
|
|
||||||
package pkgbits
|
|
||||||
|
|
||||||
import "runtime"
|
|
||||||
|
|
||||||
func walkFrames(pcs []uintptr, visit frameVisitor) {
|
|
||||||
for _, pc := range pcs {
|
|
||||||
fn := runtime.FuncForPC(pc)
|
|
||||||
file, line := fn.FileLine(pc)
|
|
||||||
|
|
||||||
visit(file, line, fn.Name(), pc-fn.Entry())
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
// Copyright 2021 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.7
|
|
||||||
// +build go1.7
|
|
||||||
|
|
||||||
package pkgbits
|
|
||||||
|
|
||||||
import "runtime"
|
|
||||||
|
|
||||||
// walkFrames calls visit for each call frame represented by pcs.
|
|
||||||
//
|
|
||||||
// pcs should be a slice of PCs, as returned by runtime.Callers.
|
|
||||||
func walkFrames(pcs []uintptr, visit frameVisitor) {
|
|
||||||
if len(pcs) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
frames := runtime.CallersFrames(pcs)
|
|
||||||
for {
|
|
||||||
frame, more := frames.Next()
|
|
||||||
visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
|
|
||||||
if !more {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,6 +6,7 @@ package pkgbits
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,6 +35,24 @@ func fmtFrames(pcs ...uintptr) []string {
|
||||||
|
|
||||||
type frameVisitor func(file string, line int, name string, offset uintptr)
|
type frameVisitor func(file string, line int, name string, offset uintptr)
|
||||||
|
|
||||||
|
// walkFrames calls visit for each call frame represented by pcs.
|
||||||
|
//
|
||||||
|
// pcs should be a slice of PCs, as returned by runtime.Callers.
|
||||||
|
func walkFrames(pcs []uintptr, visit frameVisitor) {
|
||||||
|
if len(pcs) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
frames := runtime.CallersFrames(pcs)
|
||||||
|
for {
|
||||||
|
frame, more := frames.Next()
|
||||||
|
visit(frame.File, frame.Line, frame.Function, frame.PC-frame.Entry)
|
||||||
|
if !more {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SyncMarker is an enum type that represents markers that may be
|
// SyncMarker is an enum type that represents markers that may be
|
||||||
// written to export data to ensure the reader and writer stay
|
// written to export data to ensure the reader and writer stay
|
||||||
// synchronized.
|
// synchronized.
|
||||||
|
|
|
@ -4,7 +4,10 @@
|
||||||
|
|
||||||
package sort
|
package sort
|
||||||
|
|
||||||
import "math/bits"
|
import (
|
||||||
|
"internal/reflectlite"
|
||||||
|
"math/bits"
|
||||||
|
)
|
||||||
|
|
||||||
// Slice sorts the slice x given the provided less function.
|
// Slice sorts the slice x given the provided less function.
|
||||||
// It panics if x is not a slice.
|
// It panics if x is not a slice.
|
||||||
|
@ -16,8 +19,8 @@ import "math/bits"
|
||||||
// The less function must satisfy the same requirements as
|
// The less function must satisfy the same requirements as
|
||||||
// the Interface type's Less method.
|
// the Interface type's Less method.
|
||||||
func Slice(x any, less func(i, j int) bool) {
|
func Slice(x any, less func(i, j int) bool) {
|
||||||
rv := reflectValueOf(x)
|
rv := reflectlite.ValueOf(x)
|
||||||
swap := reflectSwapper(x)
|
swap := reflectlite.Swapper(x)
|
||||||
length := rv.Len()
|
length := rv.Len()
|
||||||
limit := bits.Len(uint(length))
|
limit := bits.Len(uint(length))
|
||||||
pdqsort_func(lessSwap{less, swap}, 0, length, limit)
|
pdqsort_func(lessSwap{less, swap}, 0, length, limit)
|
||||||
|
@ -30,15 +33,15 @@ func Slice(x any, less func(i, j int) bool) {
|
||||||
// The less function must satisfy the same requirements as
|
// The less function must satisfy the same requirements as
|
||||||
// the Interface type's Less method.
|
// the Interface type's Less method.
|
||||||
func SliceStable(x any, less func(i, j int) bool) {
|
func SliceStable(x any, less func(i, j int) bool) {
|
||||||
rv := reflectValueOf(x)
|
rv := reflectlite.ValueOf(x)
|
||||||
swap := reflectSwapper(x)
|
swap := reflectlite.Swapper(x)
|
||||||
stable_func(lessSwap{less, swap}, rv.Len())
|
stable_func(lessSwap{less, swap}, rv.Len())
|
||||||
}
|
}
|
||||||
|
|
||||||
// SliceIsSorted reports whether the slice x is sorted according to the provided less function.
|
// SliceIsSorted reports whether the slice x is sorted according to the provided less function.
|
||||||
// It panics if x is not a slice.
|
// It panics if x is not a slice.
|
||||||
func SliceIsSorted(x any, less func(i, j int) bool) bool {
|
func SliceIsSorted(x any, less func(i, j int) bool) bool {
|
||||||
rv := reflectValueOf(x)
|
rv := reflectlite.ValueOf(x)
|
||||||
n := rv.Len()
|
n := rv.Len()
|
||||||
for i := n - 1; i > 0; i-- {
|
for i := n - 1; i > 0; i-- {
|
||||||
if less(i, i-1) {
|
if less(i, i-1) {
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.13
|
|
||||||
// +build go1.13
|
|
||||||
|
|
||||||
package sort
|
|
||||||
|
|
||||||
import "internal/reflectlite"
|
|
||||||
|
|
||||||
var reflectValueOf = reflectlite.ValueOf
|
|
||||||
var reflectSwapper = reflectlite.Swapper
|
|
|
@ -1,23 +0,0 @@
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build !go1.8
|
|
||||||
// +build !go1.8
|
|
||||||
|
|
||||||
package sort
|
|
||||||
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
var reflectValueOf = reflect.ValueOf
|
|
||||||
|
|
||||||
func reflectSwapper(x any) func(int, int) {
|
|
||||||
v := reflectValueOf(x)
|
|
||||||
tmp := reflect.New(v.Type().Elem()).Elem()
|
|
||||||
return func(i, j int) {
|
|
||||||
a, b := v.Index(i), v.Index(j)
|
|
||||||
tmp.Set(a)
|
|
||||||
a.Set(b)
|
|
||||||
b.Set(tmp)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
//go:build go1.8 && !go1.13
|
|
||||||
// +build go1.8,!go1.13
|
|
||||||
|
|
||||||
package sort
|
|
||||||
|
|
||||||
import "reflect"
|
|
||||||
|
|
||||||
var reflectValueOf = reflect.ValueOf
|
|
||||||
var reflectSwapper = reflect.Swapper
|
|
Loading…
Reference in a new issue