aboutsummaryrefslogtreecommitdiff
path: root/test/sinit.go
AgeCommit message (Collapse)Author
2018-12-03cmd/compile: fix static initializerKeith Randall
staticcopy of a struct or array should recursively call itself, not staticassign. This fixes an issue where a struct with a slice in it is copied during static initialization. In this case, the backing array for the slice is duplicated, and each copy of the slice refers to a different backing array, which is incorrect. That issue has existed since at least Go 1.2. I'm not sure why this was never noticed. It seems like a pretty obvious bug if anyone modifies the resulting slice. In any case, we started to notice when the optimization in CL 140301 landed. Here is basically what happens in issue29013b.go: 1) The error above happens, so we get two backing stores for what should be the same slice. 2) The code for initializing those backing stores is reused. But not duplicated: they are the same Node structure. 3) The order pass allocates temporaries for the map operations. For the first instance, things work fine and two temporaries are allocated and stored in the OKEY nodes. For the second instance, the order pass decides new temporaries aren't needed, because the OKEY nodes already have temporaries in them. But the order pass also puts a VARKILL of the temporaries between the two instance initializations. 4) In this state, the code is technically incorrect. But before CL 140301 it happens to work because the temporaries are still correctly initialized when they are used for the second time. But then... 5) The new CL 140301 sees the VARKILLs and decides to reuse the temporary for instance 1 map 2 to initialize the instance 2 map 1 map. Because the keys aren't re-initialized, instance 2 map 1 gets the wrong key inserted into it. Fixes #29013 Change-Id: I840ce1b297d119caa706acd90e1517a5e47e9848 Reviewed-on: https://go-review.googlesource.com/c/152081 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2016-05-02all: make copyright headers consistent with one space after periodEmmanuel Odeke
Follows suit with https://go-review.googlesource.com/#/c/20111. Generated by running $ grep -R 'Go Authors. All' * | cut -d":" -f1 | while read F;do perl -pi -e 's/Go Authors. All/Go Authors. All/g' $F;done The code in cmd/internal/unvendor wasn't changed. Fixes #15213 Change-Id: I4f235cee0a62ec435f9e8540a1ec08ae03b1a75f Reviewed-on: https://go-review.googlesource.com/21819 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-07-07cmd/compile: allow static init for unsafe.Pointer(&x) where x is globalRuss Cox
This avoids both a write barrier and then dynamic initialization globals of the form var x something var xp = unsafe.Pointer(&x) Using static initialization avoids emitting a relocation for &x, which helps cgo. Fixes #9411. Change-Id: I0dbf480859cce6ab57ab805d1b8609c45b48f156 Reviewed-on: https://go-review.googlesource.com/11693 Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Russ Cox <rsc@golang.org>
2014-11-06test: move linkx and sinit to run.goJosh Bleecher Snyder
The remaining run-only tests will be migrated to run.go in another CL. This CL will break the build due to issues 8746 and 8806. Update #4139 Update #8746 Update #8806 LGTM=rsc R=rsc, bradfitz, iant CC=golang-codereviews https://golang.org/cl/144630044
2014-11-04test: comment out failing cases from sinit.goIan Lance Taylor
One failing case this removes is: var bytes = []byte("hello, world") var copy_bytes = bytes We could handle this in the compiler, but it requires special case for a variable that is initialized to the value of a variable that is initialized to a string literal converted to []byte. This seems an unlikely case--it never occurs in the standrd library--and it seems unnecessary to write the code to handle it. If we do want to support this case, one approach is https://golang.org/cl/171840043. The other failing cases are of the form var bx bool var copy_bx = bx The compiler used to initialize copy_bx to false. However, that led to issue 7665, since bx may be initialized in non-Go code. The compiler no longer assumes that bx must be false, so copy_bx can not be statically initialized. We can fix these with https://golang.org/cl/169040043 if we also pass -complete to the compiler as part of this test. This is OK but it's too late in the release cycle. Fixes #8746. LGTM=rsc R=rsc CC=golang-codereviews https://golang.org/cl/165400043
2012-12-30cmd/gc: do not generate code for var _ = ... unless necessaryRuss Cox
Fixes #2443. R=ken2 CC=golang-dev https://golang.org/cl/6997048
2012-09-23test: expand run.go's errorcheck, make clear which bugs runRuss Cox
Today, if run.go doesn't understand a test header line it just ignores the test, making it too easy to write or edit tests that are not actually being run. - expand errorcheck to accept flags, so that bounds.go and escape*.go can run. - create a whitelist of skippable tests in run.go; skipping others is an error. - mark all skipped tests at top of file. Update #4139. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/6549054
2012-02-24test/[n-z]*.go: add documentationRob Pike
R=golang-dev, bradfitz, r CC=golang-dev https://golang.org/cl/5700056
2011-08-31gc: make static initialization more staticRuss Cox
Does as much as possible in data layout instead of during the init function. Handles var x = y; var y = z as a special case too, because it is so prevalent in package unicode (var Greek = _Greek; var _Greek = []...). Introduces InitPlan description of initialized data so that it can be traversed multiple times (for example, in the copy handler). Cuts package unicode's init function size by 8x. All that remains there is map initialization, which is on the chopping block too. Fixes sinit.go test case. Aggregate DATA instructions at end of object file. Checkpoint. More to come. R=ken2 CC=golang-dev https://golang.org/cl/4969051
2010-09-04test: remove semiocolons.Rob Pike
The ken directory is untouched so we have some examples with explicit semis. R=gri CC=golang-dev https://golang.org/cl/2157041
2010-05-03test: test of static initialization (fails)Russ Cox
R=ken2 CC=golang-dev https://golang.org/cl/1090041