aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-01-19cmd/compile: add anchored version of SPKeith Randall
The SPanchored opcode is identical to SP, except that it takes a memory argument so that it (and more importantly, anything that uses it) must be scheduled at or after that memory argument. This opcode ensures that a LEAQ of a variable gets scheduled after the corresponding VARDEF for that variable. This may lead to less CSE of LEAQ operations. The effect is very small. The go binary is only 80 bytes bigger after this CL. Usually LEAQs get folded into load/store operations, so the effect is only for pointerful types, large enough to need a duffzero, and have their address passed somewhere. Even then, usually the CSEd LEAQs will be un-CSEd because the two uses are on different sides of a function call and the LEAQ ends up being rematerialized at the second use anyway. Change-Id: Ib893562cd05369b91dd563b48fb83f5250950293 Reviewed-on: https://go-review.googlesource.com/c/go/+/452916 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Martin Möhrmann <moehrmann@google.com> Reviewed-by: Martin Möhrmann <martin@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2023-01-19cmd/compile/internal/ssa: generate code via a //go:generate directiveDmitri Shuralyov
The standard way to generate code in a Go package is via //go:generate directives, which are invoked by the developer explicitly running: go generate import/path/of/said/package Switch to using that approach here. This way, developers don't need to learn and remember a custom way that each particular Go package may choose to implement its code generation. It also enables conveniences such as 'go generate -n' to discover how code is generated without running anything (this works on all packages that rely on //go:generate directives), being able to generate multiple packages at once and from any directory, and so on. Change-Id: I0e5b6a1edeff670a8e588befeef0c445613803c7 Reviewed-on: https://go-review.googlesource.com/c/go/+/460135 Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
2023-01-19internal/godebug: export non-default-behavior counters in runtime/metricsRuss Cox
Allow GODEBUG users to report how many times a setting resulted in non-default behavior. Record non-default-behaviors for all existing GODEBUGs. Also rework tests to ensure that runtime is in sync with runtime/metrics.All, and generate docs mechanically from metrics.All. For #56986. Change-Id: Iefa1213e2a5c3f19ea16cd53298c487952ef05a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/453618 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Michael Knyszek <mknyszek@google.com>
2023-01-19runtime: replace panic(nil) with panic(new(runtime.PanicNilError))Russ Cox
Long ago we decided that panic(nil) was too unlikely to bother making a special case for purposes of recover. Unfortunately, it has turned out not to be a special case. There are many examples of code in the Go ecosystem where an author has written panic(nil) because they want to panic and don't care about the panic value. Using panic(nil) in this case has the unfortunate behavior of making recover behave as though the goroutine isn't panicking. As a result, code like: func f() { defer func() { if err := recover(); err != nil { log.Fatalf("panicked! %v", err) } }() call1() call2() } looks like it guarantees that call2 has been run any time f returns, but that turns out not to be strictly true. If call1 does panic(nil), then f returns "successfully", having recovered the panic, but without calling call2. Instead you have to write something like: func f() { done := false defer func() { if err := recover(); !done { log.Fatalf("panicked! %v", err) } }() call1() call2() done = true } which defeats nearly the whole point of recover. No one does this, with the result that almost all uses of recover are subtly broken. One specific broken use along these lines is in net/http, which recovers from panics in handlers and sends back an HTTP error. Users discovered in the early days of Go that panic(nil) was a convenient way to jump out of a handler up to the serving loop without sending back an HTTP error. This was a bug, not a feature. Go 1.8 added panic(http.ErrAbortHandler) as a better way to access the feature. Any lingering code that uses panic(nil) to abort an HTTP handler without a failure message should be changed to use http.ErrAbortHandler. Programs that need the old, unintended behavior from net/http or other packages can set GODEBUG=panicnil=1 to stop the run-time error. Uses of recover that want to detect panic(nil) in new programs can check for recover returning a value of type *runtime.PanicNilError. Because the new GODEBUG is used inside the runtime, we can't import internal/godebug, so there is some new machinery to cross-connect those in this CL, to allow a mutable GODEBUG setting. That won't be necessary if we add any other mutable GODEBUG settings in the future. The CL also corrects the handling of defaulted GODEBUG values in the runtime, for #56986. Fixes #25448. Change-Id: I2b39c7e83e4f7aa308777dabf2edae54773e03f5 Reviewed-on: https://go-review.googlesource.com/c/go/+/461956 Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Russ Cox <rsc@golang.org>
2023-01-19cmd/go/internal/modindex: remove copy of build.PackageRuss Cox
modindex defines its own type Package that must be exactly the same as build.Package (there are conversions between them). The normal reason to do this is to provide a different method set, but there aren't any different methods. And if we needed to do that, we could write type Package build.Package instead of repeating the struct definition. Remove the type entirely in favor of direct use of build.Package. This makes the modindex package not break when fields are added to go/build.Package. Change-Id: I8ffe9f8832bbc62be93a72e6a09d807ddbce216b Reviewed-on: https://go-review.googlesource.com/c/go/+/462255 Reviewed-by: Bryan Mills <bcmills@google.com> Auto-Submit: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Russ Cox <rsc@golang.org>
2023-01-19cmd/go: shorten TestScript/test_shuffle and skip it in short modeBryan C. Mills
test_shuffle was added in CL 310033. It takes about 4½ seconds on my workstation prior to this CL, most of which is spent linking and running test binaries in 'go test'. We can reduce that time somewhat (to 3¾ seconds) by simply running the test fewer times (cases of 'off', 'on', positive, zero, and negative values seem sufficient), but we should also avoid that linking overhead at all in short mode. Fixes #57709. Change-Id: I908a70435ccfb1ca16ed23aec17512bf2b267b21 Reviewed-on: https://go-review.googlesource.com/c/go/+/461455 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Reviewed-by: Damien Neil <dneil@google.com>
2023-01-19cmd/go/internal/lockedfile: avoid failing tests due to arbitrary timeoutsBryan C. Mills
The mustBlock helper returns a function that verifies that the blocked operation does eventually complete. However, it used an arbitrary 10-second timeout in place of “eventually”. Since the test is checking a synchronization library, bugs are likely to manifest as deadlocks. It may be useful to log what operation is in flight if such a deadlock occurs; however, since we can't bound how long a “reasonable” operation should take, the log message should only be informational — it should not cause the test to fail. While we're here, let's also set a better example by not leaking time.After timers in the tests.. Fixes #57592. Change-Id: I4e74e42390679bffac7a286824acb71b08994c17 Reviewed-on: https://go-review.googlesource.com/c/go/+/461000 Reviewed-by: Damien Neil <dneil@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com>
2023-01-19cmd/go/internal/vcweb: simplify hgHandler cancellationBryan C. Mills
This uses the new Cancel and WaitDelay fields of os/exec.Cmd (added in #50436) to interrupt or kill the 'hg serve' command when its incoming http.Request is canceled. This should keep the vcweb hg handler from getting stuck if 'hg serve' hangs after the request either completes or is canceled. Fixes #57597 (maybe). Change-Id: I53cf58e8ab953fd48c0c37f596f99e885a036d9b Reviewed-on: https://go-review.googlesource.com/c/go/+/460997 Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-19net: delete TestTCPSelfConnectBryan C. Mills
This test is flaky, apparently due to a typo'd operator in CL 21447 that causes it to compare “same port OR IP” instead of “same port AND IP”. If we merely fixed the comparison, the test would hopefully stop being flaky itself, but we would still be left with another problem: repeatedly dialing a port that we believe to be unused can interfere with other tests, which may open the previously-unused port and then attempt a single Dial and expect it to succeed. Arbitrary other Dial calls for that port may cause the wrong connection to be accepted, leading to spurious test failures. Moreover, the test can be extremely expensive for the amount of data we hope to get from it, depending on the system's port-reuse algorithms and dial implementations. It is already scaled back by up to 1000x on a huge number of platforms due to latency, and may even be ineffective on those platforms because of the arbitrary 1ms Dial timeout. And the incremental value from it is quite low, too: it tests the workaround for what is arguably a bug in the Linux kernel, which ought to be fixed (and tested) upstream instead of worked around in every open-source project that dials local ports. Instead of trying to deflake this test, let's just get rid of it. Fixes #18290. Change-Id: I8a58b93d67916a33741c9ab29ef99c49c46b32c4 Reviewed-on: https://go-review.googlesource.com/c/go/+/460657 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Bryan Mills <bcmills@google.com>
2023-01-19runtime: remove arbitrary GOARCH constraints in finalizer testsBryan C. Mills
These tests were only run on GOARCH=amd64, but the rationale given in CL 11858043 was GC precision on 32-bit platforms. Today, we have far more 64-bit platforms than just amd64, and I believe that GC precision on 32-bit platforms has been substantially improved as well. The GOARCH restriction seems unnecessary. Updates #57166. Updates #5368. Change-Id: I45c608b6fa721012792c96d4ed94a6d772b90210 Reviewed-on: https://go-review.googlesource.com/c/go/+/456120 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Austin Clements <austin@google.com>
2023-01-19cmd/go: use Cancel and WaitDelay to terminate test subprocessesBryan C. Mills
Updates #50436. Updates #56163. Fixes #24050. Change-Id: I1b00eb8fb60e0879f029642b5bad97b2e139fee6 Reviewed-on: https://go-review.googlesource.com/c/go/+/456116 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com>
2023-01-19os: clean up testsBryan C. Mills
- Use testenv.Command instead of exec.Command to try to get more useful timeout behavior. - Parallelize tests that appear not to require global state. (And add explanatory comments for a few that are not parallelizable for subtle reasons.) - Consolidate some “Helper” tests with their parent tests. - Use t.TempDir instead of os.MkdirTemp when appropriate. - Factor out subtests for repeated test helpers. For #36107. Updates #22315. Change-Id: Ic24b6957094dcd40908a59f48e44c8993729222b Reviewed-on: https://go-review.googlesource.com/c/go/+/458015 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com>
2023-01-19os: deflake TestPipeEOF and TestFifoEOFBryan C. Mills
- Consolidate the two test bodies as one helper function. - Eliminate arbitrary timeout. - Shorten arbitrary sleeps in short mode. - Simplify goroutines. - Mark the tests as parallel. Fixes #36107. Updates #24164. Change-Id: I14fe4395963a7256cb6d2d743d348a1ade077d5b Reviewed-on: https://go-review.googlesource.com/c/go/+/457336 Reviewed-by: Rob Pike <r@golang.org> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Bryan Mills <bcmills@google.com>
2023-01-19net/netip: fix type name in TestNoAllocs sub-test names and commentsTobias Klauser
netaddr.IP became netip.Addr Change-Id: Ifa762d0f804c603e6289d63672e4808e75dc36a8 Reviewed-on: https://go-review.googlesource.com/c/go/+/461748 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Damien Neil <dneil@google.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>
2023-01-19cmd/go: fix comment typofangguizhen
Change-Id: I2a5cfdac31c7ffad36348f76f0e583fbf1b11d95 GitHub-Last-Rev: 8373113fe9c5f0ecadcc7c5004b0450ba7983977 GitHub-Pull-Request: golang/go#57821 Reviewed-on: https://go-review.googlesource.com/c/go/+/462048 Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
2023-01-19make.bat: support existing toolchain paths with spacesKevin Parsons
Previously if the default go toolchain (from "where go") contained spaces, then running make.bat would fail. Fixes it to correctly treat paths with spaces. This is especially useful given that the default Go install path is under "C:\Program Files". Fixes #57918 Change-Id: Icacf8dd5178b608225f02e4a11a8753d78bed262 GitHub-Last-Rev: 4cd8a790e41353bb6bb2bfc36db1013ab0dcae6d GitHub-Pull-Request: golang/go#57836 Reviewed-on: https://go-review.googlesource.com/c/go/+/462275 TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Quim Muntal <quimmuntal@gmail.com> Run-TryBot: Quim Muntal <quimmuntal@gmail.com> Reviewed-by: Bryan Mills <bcmills@google.com>
2023-01-18time: revert strict parsing of RFC 3339Joe Tsai
CL 444277 fixed Time.UnmarshalText and Time.UnmarshalJSON to properly unmarshal timestamps according to RFC 3339 instead of according to Go's bespoke time syntax that is a superset of RFC 3339. However, this change seems to have broken an AWS S3 unit test that relies on parsing timestamps with single digit hours. It is unclear whether S3 emits these timestamps in production or whether this is simply a testing artifact that has been cargo culted across many code bases. Either way, disable strict parsing for now and re-enable later with better GODEBUG support. Updates #54580 Change-Id: Icced2c7f9a6b2fc06bbd9c7e90f90edce24c2306 Reviewed-on: https://go-review.googlesource.com/c/go/+/462286 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Joseph Tsai <joetsai@digital-static.net> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Russ Cox <rsc@golang.org> Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2023-01-18cmd: update x/tools to latest internal Go 1.20 branchRuss Cox
Import x/tools as of CL 462596 (070db2996ebe, Jan 18 2022), to bring in two vet analysis fixes (printf and loopclosure). For #57911. Fixes #57903. Fixes #57904. Change-Id: I82fe4e9bd56fb8e64394ee8618c155316942a517 Reviewed-on: https://go-review.googlesource.com/c/go/+/462555 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-18cmd/go: do not attempt to install cmd/addr2line in TestScript/mod_outsideBryan C. Mills
Tests must not write to GOROOT: it might not writable (for example, if it is owned by root and the user is non-root), and in general we can't assume that the configuration in which the test is run matches the configuration with which the installed tools were built. In this specific case, CL 454836 (for #57007) installs 'cmd' with CGO_ENABLED=0, but most builders still run the tests with CGO_ENABLED unset. Updates #57007. Change-Id: I2795fcd3ff61c164dc730b62f697f307ab3a167b Reviewed-on: https://go-review.googlesource.com/c/go/+/461689 Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-18go/types: factor out type parameter renaming (cleanup)Robert Griesemer
Follow-up on CL 461687 which missed the go/types change. (As an aside, we cannot yet generate this change because go/types uses a positioner and types2 just uses a syntax.Pos.) Change-Id: I28113a2efdc3ddd30cb9a80d2cb2c802ff035ec2 Reviewed-on: https://go-review.googlesource.com/c/go/+/461688 Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-18misc/reboot: overlay $GOROOT/lib in temporary gorootIan Lance Taylor
This fixes the test after CL 455357, which builds the time/tzdata file from $GOROOT/lib/time/zoneinfo.zip. Change-Id: I0c5afa6521b58dd3b57c3b4c3c704a622b846382 Reviewed-on: https://go-review.googlesource.com/c/go/+/462279 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Auto-Submit: Ian Lance Taylor <iant@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Bypass: Ian Lance Taylor <iant@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
2023-01-18cmd/compile: fix unsafe.{SliceData,StringData} escape analysis memory corruptionCuong Manh Le
Fixes #57823 Change-Id: I54654d3ecb20b75afa9052c5c9db2072a86188d4 Reviewed-on: https://go-review.googlesource.com/c/go/+/461759 Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2023-01-18go/types, types2: factor out type parameter renaming (cleanup)Robert Griesemer
Change-Id: I2d7e32ee2496d391f334ad9956e8d37c53f9be98 Reviewed-on: https://go-review.googlesource.com/c/go/+/461687 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com>
2023-01-17src: update go.mod files to go 1.21Russ Cox
Go 1.21 is now in progress here. For #36905. Change-Id: Ib4d2271b3b8b5fe29e8358614a3d6d20a035e1a2 Reviewed-on: https://go-review.googlesource.com/c/go/+/462199 Reviewed-by: Carlos Amedee <carlos@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Auto-Submit: Russ Cox <rsc@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
2023-01-17cmd/go: introduce GOROOT/go.env and move proxy/sumdb config thereRuss Cox
Various Linux distributions edit cmd/go/internal/cfg/cfg.go to change the default settings of GOPROXY and GOSUMDB. Make it possible for them to do this without editing the go command source code by introducing GOROOT/go.env and moving those defaults there. With the upcoming changes for reproducible builds (#24904), this should mean that Linux distributions distribute binaries that are bit-for-bit identical to the Go distribution binaries, even when rebuilding the distribution themselves. Fixes #57179. Change-Id: Ib2ecc61e6d036f97db6fd47dca757c94fdea5629 Reviewed-on: https://go-review.googlesource.com/c/go/+/462198 Auto-Submit: Russ Cox <rsc@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Russ Cox <rsc@golang.org>
2023-01-17cmd/dist: make toolchain build reproducibleRuss Cox
- Build cmd with CGO_ENABLED=0. Doing so removes the C compiler toolchain from the reproducibility perimeter and also results in cmd/go and cmd/pprof binaries that are statically linked, so that they will run on a wider variety of systems. In particular the Linux versions will run on Alpine and NixOS without needing a simulation of libc.so.6. The potential downside of disabling cgo is that cmd/go and cmd/pprof use the pure Go network resolver instead of the host resolver on Unix systems. This means they will not be able to use non-DNS resolver mechanisms that may be specified in /etc/resolv.conf, such as mDNS. Neither program seems likely to need non-DNS names like those, however. macOS and Windows systems still use the host resolver, which they access without cgo. - Build cmd with -trimpath when building a release. Doing so removes $GOPATH from the file name prefixes stored in the binary, so that the build directory does not leak into the final artifacts. - When CC and CXX are empty, do not pick values to hard-code into the source tree and binaries. Instead, emit code that makes the right decision at runtime. In addition to reproducibility, this makes cross-compiled toolchains work better. A macOS toolchain cross-compiled on Linux will now correctly look for clang, instead of looking for gcc because it was built on Linux. - Convert \ to / in file names stored in .a files. These are converted to / in the final binaries, but the hashes of the .a files affect the final build ID of the binaries. Without this change, builds of a Windows toolchain on Windows and non-Windows machines produce identical binaries except for the input hash part of the build ID. - Due to the conversion of \ to / in .a files, convert back when reading inline bodies on Windows to preserve output file names in error messages. Combined, these four changes (along with Go 1.20's removal of installed pkg/**.a files and conversion of macOS net away from cgo) make the output of make.bash fully reproducible, even when cross-compiling: a released macOS toolchain built on Linux or Windows will contain exactly the same bits as a released macOS toolchain built on macOS. The word "released" in the previous sentence is important. For the build IDs in the binaries to work out the same on both systems, a VERSION file must exist to provide a consistent compiler build ID (instead of using a content hash of the binary). For #24904. Fixes #57007. Change-Id: I665e1ef4ff207d6ff469452347dca5bfc81050e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/454836 Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Russ Cox <rsc@golang.org> Auto-Submit: Russ Cox <rsc@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-17make.bash, make.rc: fix GOROOT detection when GOEXPERIMENT is setRuss Cox
We need to clear GOEXPERIMENT any time we are invoking a bootstrap toolchain. One line missed the clearing of GOEXPERIMENT. There were three different lines using different syntaxes and subtly different sets of variables being cleared, so hoist them into a function so it's all in one place. Also quote $GOROOT_BOOTSTRAP consistently. Change-Id: I6c5a5d70c694c24705bbc61298b28ae906c0cf6c Reviewed-on: https://go-review.googlesource.com/c/go/+/456635 Reviewed-by: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> Auto-Submit: Russ Cox <rsc@golang.org>
2023-01-17time/tzdata: generate zip constant during cmd/distRuss Cox
We have a make.bash-time generation capability, so use it to generate the embedded zip file for time/tzdata. This is one less file to try to review in CLs like CL 455356. For #22487. Fixes #43350. Change-Id: I2fcd0665fa0b1c830baec5fb4cd714483fea25a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/455357 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Auto-Submit: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2023-01-17cmd/go: do not confuse files for standard library packagesRuss Cox
I often create dummy files holding various data named things like 'z'. If a file (not directory) GOROOT/src/z exists, it confuses cmd/go into thinking z is a standard library package, which breaks the test Script/mod_vendor. This CL fixes internal/goroot to only report that something is a standard library package when a directory with that name exists, not just a file. Change-Id: I986c9a425e78d23c7e033aeadb8e9f71aab2b878 Reviewed-on: https://go-review.googlesource.com/c/go/+/461955 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Auto-Submit: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org>
2023-01-17cmd/compile: fix static init inlining for hidden node fieldsMatthew Dempsky
Unified IR added several new IR fields for holding *runtime._type expressions. To avoid throwing off any frontend semantics (particularly inlining cost heuristics), they were marked as `mknode:"-"` so that code wouldn't visit them. Unfortunately, this has a bad interaction with the static init inlining optimization, because the latter relies on ir.EditChildren to substitute all parameters. This potentially includes dictionary parameters, which can appear within the new RType fields. This CL adds a new ir.EditChildrenWithHidden function that also edits these fields, and switches staticinit to use it. Longer term, we should unhide the RType fields so that ir.EditChildren visits them normally, but that's scarier so late in the release cycle. Fixes #57778. Change-Id: I98c1e8cf366156dc0c81a0cb79029cc5e59c476f Reviewed-on: https://go-review.googlesource.com/c/go/+/461686 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
2023-01-17go/types, types2: more uses of factored functions; generate object_test.goRobert Griesemer
Change-Id: I7a8366f7dcbd68770b723247ce3e7e81716a8e49 Reviewed-on: https://go-review.googlesource.com/c/go/+/461680 Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-17go/types, types2: use factored parse/typecheck functions, generate ↵Robert Griesemer
hilbert_test.go Change-Id: I4a325736d18a98bbcd02bfa3d32b1d1dd2048dc2 Reviewed-on: https://go-review.googlesource.com/c/go/+/461609 Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17cmd/compile: remove support for old comparable semanticsRobert Griesemer
Change-Id: I730da5082ea6de1510482aabaa2915e83d3819a5 Reviewed-on: https://go-review.googlesource.com/c/go/+/461607 Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17go/types: consistently use _ prefix for unexported names that are exported ↵Robert Griesemer
in types2 Change-Id: Ic9b24b4b3a6336782023c7db40cc937f2dc743df Reviewed-on: https://go-review.googlesource.com/c/go/+/461606 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
2023-01-17go/types: generate util_test.go, cosmetic changes to generator.goRobert Griesemer
Change-Id: I80e4bbda302b9170d2367af2442ee282bdf51b12 Reviewed-on: https://go-review.googlesource.com/c/go/+/461679 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2023-01-17go/types: generate unify.goRobert Griesemer
Change-Id: If94a4c18e954ff403892d0a70e424ab58e997451 Reviewed-on: https://go-review.googlesource.com/c/go/+/461603 Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
2023-01-17go/types: allow filename arguments to generator for easier manual useRobert Griesemer
Change-Id: I96b25fae1dcbfae55f57c07de9529c6663ad28d4 Reviewed-on: https://go-review.googlesource.com/c/go/+/461602 Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17go/types: use the same interface method sorting as types2Robert Griesemer
See also CL 321231 which introduces object.less to match expected compiler behavior. Change-Id: I56fbf332a04596dc96393b71d40acf4df5d950fd Reviewed-on: https://go-review.googlesource.com/c/go/+/461677 Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@google.com>
2023-01-17go/types, types2: factor out position comparison, share more codeRobert Griesemer
This CL introduces the new files util.go and util_test.go for both type checkers; these files factor out functionality that is different between the type checkers so that more code (that is otherwise mostly the same) can be generated. With cmpPos/CmpPos factored out, go/types/scope.go can now be generated. Change-Id: I35f67e53d83b3c5086a559b1e826db83d38ee217 Reviewed-on: https://go-review.googlesource.com/c/go/+/461596 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
2023-01-17go/types, types2: factor out under.go, generate it for go/typesRobert Griesemer
Change-Id: I581be544de313618ccd1e3ef4dc38f1ebf201b12 Reviewed-on: https://go-review.googlesource.com/c/go/+/461495 Reviewed-by: Robert Findley <rfindley@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@google.com>
2023-01-17go/types: generate more files from types2 sourcesRobert Griesemer
Change-Id: I5e00b4367d7288867b03702d0c76b8210c125668 Reviewed-on: https://go-review.googlesource.com/c/go/+/461083 Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17go/types: use nopos instead of token.NoPos to match types2Robert Griesemer
This will simplify the generation of go/types files from types2 files. Change-Id: Ie9c8061346cff098cb884908c7eb569267886594 Reviewed-on: https://go-review.googlesource.com/c/go/+/461082 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17go/types: generate various source files from types2 filesRobert Griesemer
Starting point for more code sharing. Change-Id: Ia6bc3ba54476a5202bfd5f89cef09bacb3f4f3b9 Reviewed-on: https://go-review.googlesource.com/c/go/+/460761 Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com>
2023-01-17go/types: make tracing configurable (matching types2)Robert Griesemer
This CL replaces the internal trace flag with Config.trace. While unexported, it can still be set for testing via reflection. The typical use is for manual tests, where -v (verbose) turns on tracing output. Typical use: go test -run Manual -v This change makes go/types match types2 behavior. Change-Id: I22842f4bba8fd632efe5929c950f4b1cab0a8569 Reviewed-on: https://go-review.googlesource.com/c/go/+/461081 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
2023-01-17go/types, cmd/compile/internal/types2: minor adjustments (cleanups)Robert Griesemer
go/types: - gofmt a couple of files types2: - add loong64 to sizes list (present in go/types) - fix a type in validtype.go - co-locate an accessor with others in typeparam.go This changes further reduce discrepancy between types2 and go/types. Change-Id: I2e6a09f1c4b8dbc947c48af13031ff58a2bc6f4d Reviewed-on: https://go-review.googlesource.com/c/go/+/460996 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
2023-01-17cmd/compile/internal/syntax: remove Crawl, not needed anymore (cleanup)Robert Griesemer
This also brings some of the types2 testing code better in sync with go/types. Also: fix a minor bug in resolver_test.go (continue traversing SelectorExpr if the first part is not an identifier). Change-Id: Ib6c5f6228812b49c185b52a4f02ca5b393418e01 Reviewed-on: https://go-review.googlesource.com/c/go/+/460760 Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-17go/types, types2: test that error format strings have matching ↵Robert Griesemer
parentheses/brackets Also, for go/types, switch to using syntax.Inspect instead of (deprecated) syntax.Crawl. Change-Id: I8333079040e9676e0a61c23d09d41ca790526eeb Reviewed-on: https://go-review.googlesource.com/c/go/+/460759 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com>
2023-01-17go/types, types2: do not abort constraint type inference eagerlyRobert Griesemer
During constraint type inference, unification may fail because it operates with limited information (core types) even if the actual type argument satisfies the type constraint in question. On the other hand, it is safe to ignore failing unification during constraint type inference because if the failure is true, an error will be reported when checking instantiation. Fixes #53650. Change-Id: Ia76b21ff779bfb1282c1c55f4174847b29cc6f3a Reviewed-on: https://go-review.googlesource.com/c/go/+/454655 Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
2023-01-17go/types, types2: distinguish between substring and regexp error patternsRobert Griesemer
Use ERROR for substrings, and ERRORx for regexp error patterns. Correctly unquote patterns for ERROR and ERRORx. Adjust all tests in internal/types/testdata and locally as needed. The changes to internal/types/testdata were made through repeated applications of regexpr find/replace commands and manual cleanups. Fixes #51006. Change-Id: Ib9ec5001243b688bf5aee56b7d4105fb55999ab4 Reviewed-on: https://go-review.googlesource.com/c/go/+/455755 Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com>
2023-01-17internal/types: consistently use double quotes around ERROR patternsRobert Griesemer
Before matching the pattern, the double quotes are simply stripped (no Go string unquoting) for now. This is a first step towards use of proper Go strings as ERROR patterns. The changes were obtained through a couple of global regexp find/replace commands: /\* ERROR ([^"]+) \*/ => /* ERROR "$1" */ // ERROR ([^"]+)$ => // ERROR "$1" followed up by manual fixes where multiple "/* ERROR"-style errors appeared on the same line (in that case, the first regexp matches the first and last ERROR). For #51006. Change-Id: Ib92c2d5e339075aeec1ea74c339b5fecf953d1a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/455718 Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Findley <rfindley@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>