]> Cypherpunks repositories - gostls13.git/log
gostls13.git
8 years agohtml/template: fix Clone so that t.Lookup(t.Name()) yields t
Caleb Spare [Fri, 14 Oct 2016 07:59:19 +0000 (00:59 -0700)]
html/template: fix Clone so that t.Lookup(t.Name()) yields t

Template.escape makes the assumption that t.Lookup(t.Name()) is t
(escapeTemplate looks up the associated template by name and sets
escapeErr appropriately).

This assumption did not hold for a Cloned template, because the template
associated with t.Name() was a second copy of the original.

Add a test for the assumption that t.Lookup(t.Name()) == t.

One effect of this broken assumption was #16101: parallel Executes
racily accessed the template namespace because each Execute call saw
t.escapeErr == nil and re-escaped the template concurrently with read
accesses occurring outside the namespace mutex.

Add a test for this race.

Related to #12996 and CL 16104.

Fixes #16101

Change-Id: I59831d0847abbabb4ef9135f2912c6ce982f9837
Reviewed-on: https://go-review.googlesource.com/31092
Run-TryBot: Rob Pike <r@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
8 years agomisc/cgo/testcarchive: do not use same executable name in TestInstall
Alex Brainman [Fri, 14 Oct 2016 06:03:01 +0000 (17:03 +1100)]
misc/cgo/testcarchive: do not use same executable name in TestInstall

Fixes #17439

Change-Id: I7caa28519f38692f9ca306f0789cbb975fa1d7c4
Reviewed-on: https://go-review.googlesource.com/31112
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agotesting: mention in docs for Logf that a final newline is added if needed
Rob Pike [Sun, 16 Oct 2016 18:28:45 +0000 (11:28 -0700)]
testing: mention in docs for Logf that a final newline is added if needed

Fixes #16423

Change-Id: I9635db295be4d356d427adadd309084e16c4582f
Reviewed-on: https://go-review.googlesource.com/31255
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/go: use normal code 2 for 'no such tool'
Rob Pike [Sun, 16 Oct 2016 18:13:37 +0000 (11:13 -0700)]
cmd/go: use normal code 2 for 'no such tool'

Exit code 3 is unprecedented and inconsistent with other failures here,
such as having no tool directory.

Fixes #17145

Change-Id: Ie7ed56494d4511a600214666ce3a726d63a8fd8e
Reviewed-on: https://go-review.googlesource.com/31253
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agonet: enable a test on nacl
Brad Fitzpatrick [Sat, 15 Oct 2016 14:52:57 +0000 (15:52 +0100)]
net: enable a test on nacl

No need to skip it. It passes.

Maybe it was fixed at some point.

Change-Id: I9848924aefda44f9b3a574a8705fa549d657f28d
Reviewed-on: https://go-review.googlesource.com/31177
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
8 years agodoc: update go1.8.txt
Brad Fitzpatrick [Sun, 16 Oct 2016 10:27:43 +0000 (11:27 +0100)]
doc: update go1.8.txt

Change-Id: Ibae0be046c6a6596d3a98b094ec5f089bb68be7a
Reviewed-on: https://go-review.googlesource.com/31182
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agopath/filepath: simplify TestToNorm
Hiroshi Ioka [Tue, 20 Sep 2016 10:43:34 +0000 (19:43 +0900)]
path/filepath: simplify TestToNorm

Change-Id: I8a176ed9c7f59ebdfd39c1e2b88905f977179982
Reviewed-on: https://go-review.googlesource.com/31119
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agonet/rpc: add missing import to rpc server documentation
Alex Carol [Sat, 15 Oct 2016 22:26:39 +0000 (00:26 +0200)]
net/rpc: add missing import to rpc server documentation

Change-Id: Idca6115181960eed7a955027ee77a02decb4e7f2
Reviewed-on: https://go-review.googlesource.com/31179
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agotest: simplify fixedbugs/issue15747.go
Austin Clements [Fri, 14 Oct 2016 21:35:18 +0000 (17:35 -0400)]
test: simplify fixedbugs/issue15747.go

The error check patterns in this test are more complex than necessary
because f2 gets inlined into f1. This behavior isn't important to the
test, so disable inlining of f2 and simplify the error check patterns.

Change-Id: Ia8aee92a52f9217ad71b89b2931494047e8d2185
Reviewed-on: https://go-review.googlesource.com/31132
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agoruntime: use more go:nowritebarrierrec in proc.go
Austin Clements [Mon, 10 Oct 2016 21:14:14 +0000 (17:14 -0400)]
runtime: use more go:nowritebarrierrec in proc.go

Currently we use go:nowritebarrier in many places in proc.go.
go:notinheap and go:yeswritebarrierrec now let us use
go:nowritebarrierrec (the recursive form of the go:nowritebarrier
pragma) more liberally. Do so in proc.go

Change-Id: Ia7fcbc12ce6c51cb24730bf835fb7634ad53462f
Reviewed-on: https://go-review.googlesource.com/30942
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agoruntime: mark several types go:notinheap
Austin Clements [Wed, 12 Oct 2016 02:58:21 +0000 (22:58 -0400)]
runtime: mark several types go:notinheap

This covers basically all sysAlloc'd, persistentalloc'd, and
fixalloc'd types.

Change-Id: I0487c887c2a0ade5e33d4c4c12d837e97468e66b
Reviewed-on: https://go-review.googlesource.com/30941
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agoruntime: make mSpanList more go:notinheap-friendly
Austin Clements [Tue, 11 Oct 2016 15:47:14 +0000 (11:47 -0400)]
runtime: make mSpanList more go:notinheap-friendly

Currently mspan links to its previous mspan using a **mspan field that
points to the previous span's next field. This simplifies some of the
list manipulation code, but is going to make it very hard to convince
the compiler that mspan list manipulations don't need write barriers.

Fix this by using a more traditional ("boring") linked list that uses
a simple *mspan pointer to the previous mspan. This complicates some
of the list manipulation slightly, but it will let us eliminate all
write barriers from the mspan list manipulation code by marking mspan
go:notinheap.

Change-Id: I0d0b212db5f20002435d2a0ed2efc8aa0364b905
Reviewed-on: https://go-review.googlesource.com/30940
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agocmd/compile: add go:notinheap type pragma
Austin Clements [Wed, 12 Oct 2016 02:53:27 +0000 (22:53 -0400)]
cmd/compile: add go:notinheap type pragma

This adds a //go:notinheap pragma for declarations of types that must
not be heap allocated. We ensure these rules by disallowing new(T),
make([]T), append([]T), or implicit allocation of T, by disallowing
conversions to notinheap types, and by propagating notinheap to any
struct or array that contains notinheap elements.

The utility of this pragma is that we can eliminate write barriers for
writes to pointers to go:notinheap types, since the write barrier is
guaranteed to be a no-op. This will let us mark several scheduler and
memory allocator structures as go:notinheap, which will let us
disallow write barriers in the scheduler and memory allocator much
more thoroughly and also eliminate some problematic hybrid write
barriers.

This also makes go:nowritebarrierrec and go:yeswritebarrierrec much
more powerful. Currently we use go:nowritebarrier all over the place,
but it's almost never what you actually want: when write barriers are
illegal, they're typically illegal for a whole dynamic scope. Partly
this is because go:nowritebarrier has been around longer, but it's
also because go:nowritebarrierrec couldn't be used in situations that
had no-op write barriers or where some nested scope did allow write
barriers. go:notinheap eliminates many no-op write barriers and
go:yeswritebarrierrec makes it possible to opt back in to write
barriers, so these two changes will let us use go:nowritebarrierrec
far more liberally.

This updates #13386, which is about controlling pointers from non-GC'd
memory to GC'd memory. That would require some additional pragma (or
pragmas), but could build on this pragma.

Change-Id: I6314f8f4181535dd166887c9ec239977b54940bd
Reviewed-on: https://go-review.googlesource.com/30939
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile, runtime: add go:yeswritebarrierrec pragma
Austin Clements [Mon, 10 Oct 2016 20:46:28 +0000 (16:46 -0400)]
cmd/compile, runtime: add go:yeswritebarrierrec pragma

This pragma cancels the effect of go:nowritebarrierrec. This is useful
in the scheduler because there are places where we enter a function
without a valid P (and hence cannot have write barriers), but then
obtain a P. This allows us to annotate the function with
go:nowritebarrierrec and split out the part after we've obtained a P
into a go:yeswritebarrierrec function.

Change-Id: Ic8ce4b6d3c074a1ecd8280ad90eaf39f0ffbcc2a
Reviewed-on: https://go-review.googlesource.com/30938
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agostrings: use Index in Count
Ilya Tocar [Wed, 7 Sep 2016 13:35:32 +0000 (16:35 +0300)]
strings: use Index in Count

This simplifies code and provides performance iprovments:
Similar to https://go-review.googlesource.com/#/c/28577

CountHard1-48               1.74ms ±14%  0.17ms ±14%  -90.16%  (p=0.000 n=19+19)
CountHard2-48               1.78ms ±15%  0.25ms ±13%  -86.10%  (p=0.000 n=19+20)
CountHard3-48               1.78ms ±12%  0.80ms ±11%  -55.19%  (p=0.000 n=17+20)
CountTorture-48             13.5µs ±14%  13.6µs ±11%     ~     (p=0.625 n=18+19)
CountTortureOverlapping-48  6.92ms ±13%  8.42ms ±11%  +21.72%  (p=0.000 n=19+17)

Change-Id: Ief120aee918a66487c76be56e0796871c8502f89
Reviewed-on: https://go-review.googlesource.com/28586
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agodatabase/sql: add support for multiple result sets
Daniel Theophanes [Thu, 6 Oct 2016 18:06:21 +0000 (11:06 -0700)]
database/sql: add support for multiple result sets

Many database systems allow returning multiple result sets
in a single query. This can be useful when dealing with many
intermediate results on the server and there is a need
to return more then one arity of data to the client.

Fixes #12382

Change-Id: I480a9ac6dadfc8743e0ba8b6d868ccf8442a9ca1
Reviewed-on: https://go-review.googlesource.com/30592
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/cover: handle gotos
Rob Pike [Thu, 13 Oct 2016 02:51:02 +0000 (19:51 -0700)]
cmd/cover: handle gotos

If a labeled statement is the target of a goto, we must treat it as the
boundary of a new basic block, but only if it is not already the boundary
of a basic block such as a labeled for loop.

Fixes #16624

Now reports 100% coverage for the test in the issue.

Change-Id: If118bb6ff53a96c738e169d92c03cb3ce97bad0e
Reviewed-on: https://go-review.googlesource.com/30977
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
8 years agospec: fix examples for predeclared function complex
Robert Griesemer [Fri, 14 Oct 2016 18:27:11 +0000 (11:27 -0700)]
spec: fix examples for predeclared function complex

Fixes #17398.

Change-Id: Iac7899031c1bfbadc4f84e5b374eaf1f01dff8c8
Reviewed-on: https://go-review.googlesource.com/31190
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agoos: use FindFirstFile when GetFileAttributesEx fails in Stat
Alex Brainman [Thu, 5 May 2016 02:44:28 +0000 (12:44 +1000)]
os: use FindFirstFile when GetFileAttributesEx fails in Stat

Fixes #15355

Change-Id: Idbab7a627c5de249bb62d519c5a47f3d2f6c82a7
Reviewed-on: https://go-review.googlesource.com/22796
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agonet/http: allow Handlers to test Hijacked conn without spamming error log
Brad Fitzpatrick [Tue, 11 Oct 2016 09:23:39 +0000 (09:23 +0000)]
net/http: allow Handlers to test Hijacked conn without spamming error log

Make a zero-byte write to a hijacked connection not log anything, so handlers
can test whether a connection is hacked by doing a Write(nil).

Fixes #16456

Change-Id: Id56caf822c8592067bd8422672f0c1aec89e866c
Reviewed-on: https://go-review.googlesource.com/30812
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
8 years agocrypto/{aes,cipher}: fix panic in CBC on s390x when src length is 0
Michael Munday [Thu, 13 Oct 2016 21:08:54 +0000 (17:08 -0400)]
crypto/{aes,cipher}: fix panic in CBC on s390x when src length is 0

Adds a test to check that block cipher modes accept a zero-length
input.

Fixes #17435.

Change-Id: Ie093c4cdff756b5c2dcb79342e167b3de5622389
Reviewed-on: https://go-review.googlesource.com/31070
Run-TryBot: Michael Munday <munday@ca.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoexpvar: add Value methods
Filippo Valsorda [Thu, 13 Oct 2016 16:56:04 +0000 (17:56 +0100)]
expvar: add Value methods

Closes #15815

Change-Id: I08154dbff416198cf7787e446b1e00e62c03a972
Reviewed-on: https://go-review.googlesource.com/30917
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agodoc: catch go1.8.txt up on runtime changes
Austin Clements [Mon, 26 Sep 2016 22:09:54 +0000 (18:09 -0400)]
doc: catch go1.8.txt up on runtime changes

This clarifies some of the titles so they're more "news" friendly and
less implementation-oriented.

Change-Id: Ied02aa1e6824b04db5d32ecdd58e972515b1f588
Reviewed-on: https://go-review.googlesource.com/29830
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agogo/internal/gcimporter: set Pos attribute of decoded types.Objects
Alan Donovan [Mon, 9 May 2016 13:40:27 +0000 (09:40 -0400)]
go/internal/gcimporter: set Pos attribute of decoded types.Objects

This change is a copy of CL 22788 in x/tools.
It has no observable effect yet, but brings the two packages in synch.

Change-Id: I266c77547cb46deb69b1a36e1674dfebc430e3a5
Reviewed-on: https://go-review.googlesource.com/22936
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/link/internal/ld: use debug/pe package to rewrite ldpe.go
Alex Brainman [Fri, 29 Apr 2016 06:23:55 +0000 (16:23 +1000)]
cmd/link/internal/ld: use debug/pe package to rewrite ldpe.go

This CL also includes vendored copy of debug/pe,
otherwise bootstrapping fails.

Updates #15345

Change-Id: I3a8ac990e3cb12cb4d24ec11b618b68190397fd1
Reviewed-on: https://go-review.googlesource.com/22603
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoencoding/xml: split attribute marshaling into its own method
Russ Cox [Thu, 13 Oct 2016 02:42:40 +0000 (22:42 -0400)]
encoding/xml: split attribute marshaling into its own method

No functional changes here. Just makes next CL easier to read.

Change-Id: Icf7b2281b4da6cb59ff4edff05943b2ee288576a
Reviewed-on: https://go-review.googlesource.com/30945
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile: "abc"[1] is not an ideal constant
Anthony Canino [Sat, 10 Oct 2015 19:24:34 +0000 (15:24 -0400)]
cmd/compile: "abc"[1] is not an ideal constant

"abc"[1] is not like 'b', in that -"abc"[1] is uint8 math, not ideal constant math.
Delay the constantification until after ideal constant folding is over.

Fixes #11370.

Change-Id: Iba2fc00ca2455959e7bab8f4b8b4aac14b1f9858
Reviewed-on: https://go-review.googlesource.com/15740
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoencoding/json: handle misspelled JSON literals in ,string
Russ Cox [Wed, 12 Oct 2016 19:55:02 +0000 (15:55 -0400)]
encoding/json: handle misspelled JSON literals in ,string

Fixes #15146.

Change-Id: I229611b9cc995a1391681c492c4d742195c787ea
Reviewed-on: https://go-review.googlesource.com/30943
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/cgo: use alias for unsafe rather than separate functions
Ian Lance Taylor [Thu, 13 Oct 2016 00:09:54 +0000 (17:09 -0700)]
cmd/cgo: use alias for unsafe rather than separate functions

When we need to generate a call to _cgoCheckPointer, we need to type
assert the result back to the desired type. That is harder when the type
is unsafe.Pointer, as the package can have values of unsafe.Pointer
types without actually importing unsafe, by mixing C void* and :=. We
used to handle this by generating a special function for each needed
type, and defining that function in a separate file where we did import
unsafe.

Simplify the code by not generating those functions, but instead just
import unsafe under the alias _cgo_unsafe. This is a simplification step
toward a fix for issue #16591.

Change-Id: I0edb3e04b6400ca068751709fe063397cf960a54
Reviewed-on: https://go-review.googlesource.com/30973
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: stop allocating Name and Param for ODCLFIELD
Matthew Dempsky [Thu, 13 Oct 2016 09:20:51 +0000 (02:20 -0700)]
cmd/compile: stop allocating Name and Param for ODCLFIELD

name       old time/op     new time/op     delta
Template       349ms ± 5%      339ms ± 7%  -2.89%        (p=0.000 n=27+29)
Unicode        187ms ±11%      182ms ±11%  -2.77%        (p=0.039 n=29+29)
GoTypes        1.05s ± 3%      1.04s ± 4%    ~           (p=0.103 n=29+29)
Compiler       4.57s ± 3%      4.55s ± 3%    ~           (p=0.202 n=30+29)

name       old user-ns/op  new user-ns/op  delta
Template        510M ±21%       521M ±18%    ~           (p=0.281 n=30+29)
Unicode         303M ±34%       300M ±28%    ~           (p=0.592 n=30+30)
GoTypes        1.52G ± 9%      1.50G ± 9%    ~           (p=0.314 n=30+30)
Compiler       6.50G ± 5%      6.44G ± 5%    ~           (p=0.362 n=29+30)

name       old alloc/op    new alloc/op    delta
Template      44.7MB ± 0%     44.0MB ± 0%  -1.63%        (p=0.000 n=28+28)
Unicode       34.6MB ± 0%     34.5MB ± 0%  -0.18%        (p=0.000 n=30+29)
GoTypes        125MB ± 0%      123MB ± 0%  -1.14%        (p=0.000 n=30+30)
Compiler       515MB ± 0%      513MB ± 0%  -0.52%        (p=0.000 n=30+30)

name       old allocs/op   new allocs/op   delta
Template        427k ± 0%       416k ± 0%  -2.66%        (p=0.000 n=30+30)
Unicode         323k ± 0%       322k ± 0%  -0.28%        (p=0.000 n=30+30)
GoTypes        1.21M ± 0%      1.18M ± 0%  -1.84%        (p=0.000 n=29+30)
Compiler       4.40M ± 0%      4.36M ± 0%  -0.95%        (p=0.000 n=30+30)

Passes toolstash -cmp.

Change-Id: Ifee7d012b1cddadda01450e027eef8d4ecf5581f
Reviewed-on: https://go-review.googlesource.com/30980
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: cleanup toolstash hacks from previous CL
Matthew Dempsky [Thu, 13 Oct 2016 00:39:28 +0000 (17:39 -0700)]
cmd/compile: cleanup toolstash hacks from previous CL

Change-Id: I36cf3523e00b80e2d3a690f251edd5d6f665d156
Reviewed-on: https://go-review.googlesource.com/30975
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: add OSTRUCTKEY for keyed struct literals
Matthew Dempsky [Wed, 12 Oct 2016 22:48:18 +0000 (15:48 -0700)]
cmd/compile: add OSTRUCTKEY for keyed struct literals

Previously, we used OKEY nodes to represent keyed struct literal
elements. The field names were represented by an ONAME node, but this
is clumsy because it's the only remaining case where ONAME was used to
represent a bare identifier and not a variable.

This CL introduces a new OSTRUCTKEY node op for use in struct
literals. These ops instead store the field name in the node's own Sym
field. This is similar in spirit to golang.org/cl/20890.

Significant reduction in allocations for struct literal heavy code
like package unicode:

name       old time/op     new time/op     delta
Template       345ms ± 6%      341ms ± 6%     ~           (p=0.141 n=29+28)
Unicode        200ms ± 9%      184ms ± 7%   -7.77%        (p=0.000 n=29+30)
GoTypes        1.04s ± 3%      1.05s ± 3%     ~           (p=0.096 n=30+30)
Compiler       4.47s ± 9%      4.49s ± 6%     ~           (p=0.890 n=29+29)

name       old user-ns/op  new user-ns/op  delta
Template        523M ±13%       516M ±17%     ~           (p=0.400 n=29+30)
Unicode         334M ±27%       314M ±30%     ~           (p=0.093 n=30+30)
GoTypes        1.53G ±10%      1.52G ±10%     ~           (p=0.572 n=30+30)
Compiler       6.28G ± 7%      6.34G ±11%     ~           (p=0.300 n=30+30)

name       old alloc/op    new alloc/op    delta
Template      44.5MB ± 0%     44.4MB ± 0%   -0.35%        (p=0.000 n=27+30)
Unicode       39.2MB ± 0%     34.5MB ± 0%  -11.79%        (p=0.000 n=26+30)
GoTypes        125MB ± 0%      125MB ± 0%   -0.12%        (p=0.000 n=29+30)
Compiler       515MB ± 0%      515MB ± 0%   -0.10%        (p=0.000 n=29+30)

name       old allocs/op   new allocs/op   delta
Template        426k ± 0%       424k ± 0%   -0.39%        (p=0.000 n=29+30)
Unicode         374k ± 0%       323k ± 0%  -13.67%        (p=0.000 n=29+30)
GoTypes        1.21M ± 0%      1.21M ± 0%   -0.14%        (p=0.000 n=29+29)
Compiler       4.40M ± 0%      4.39M ± 0%   -0.13%        (p=0.000 n=29+30)

Passes toolstash/buildall.

Change-Id: Iba4ee765dd1748f67e52fcade1cd75c9f6e13fa9
Reviewed-on: https://go-review.googlesource.com/30974
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: replace aindex with typArray
Matthew Dempsky [Thu, 13 Oct 2016 06:28:36 +0000 (23:28 -0700)]
cmd/compile: replace aindex with typArray

aindex is overkill when it's only ever used with known integer
constants, so just use typArray directly instead.

Change-Id: I43fc14e604172df859b3ad9d848d219bbe48e434
Reviewed-on: https://go-review.googlesource.com/30979
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoos: make readConsole handle its input and output correctly
Alex Brainman [Wed, 21 Sep 2016 01:19:36 +0000 (11:19 +1000)]
os: make readConsole handle its input and output correctly

This CL introduces first test for readConsole. And new test
discovered couple of problems with readConsole.

Console characters consist of multiple bytes each, but byte blocks
returned by syscall.ReadFile have no character boundaries. Some
multi-byte characters might start at the end of one block, and end
at the start of next block. readConsole feeds these blocks to
syscall.MultiByteToWideChar to convert them into utf16, but if some
multi-byte characters have no ending or starting bytes, the
syscall.MultiByteToWideChar might get confused. Current version of
syscall.MultiByteToWideChar call will make
syscall.MultiByteToWideChar ignore all these not complete
multi-byte characters.

The CL solves this issue by changing processing from "randomly
sized block of bytes at a time" to "one multi-byte character at a
time". New readConsole code calls syscall.ReadFile to get 1 byte
first. Then it feeds this byte to syscall.MultiByteToWideChar.
The new syscall.MultiByteToWideChar call uses MB_ERR_INVALID_CHARS
flag to make syscall.MultiByteToWideChar return error if input is
not complete character. If syscall.MultiByteToWideChar returns
correspondent error, we read another byte and pass 2 byte buffer
into syscall.MultiByteToWideChar, and so on until success.

Old readConsole code would also sometimes return no data if user
buffer was smaller then uint16 size, which would confuse callers
that supply 1 byte buffer. This CL fixes that problem too.

Fixes #17097

Change-Id: I88136cdf6a7bf3aed5fbb9ad2c759b6c0304ce30
Reviewed-on: https://go-review.googlesource.com/29493
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/compile/internal/gc: cleanup esc.go
Hiroshi Ioka [Wed, 12 Oct 2016 02:34:47 +0000 (11:34 +0900)]
cmd/compile/internal/gc: cleanup esc.go

* convert important functions to methods
* rename EscXXX to XXX in NodeEscState
* rename local variables more friendly
* simplify redundant code
* update comments

Change-Id: I8442bf4f8dde84523d9a2ad3d04b1cd326bd4719
Reviewed-on: https://go-review.googlesource.com/30893
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
8 years agocmd/vet: check for duplicate json, xml struct field tags
Alex Browne [Sun, 8 Nov 2015 04:54:41 +0000 (23:54 -0500)]
cmd/vet: check for duplicate json, xml struct field tags

It is easy to make the mistake of duplicating json struct field
tags especially when copy/pasting. This commit causes go vet to
report the mistake. Only field tags in the same struct type are
considered, because that is the only case which is undoubtedly an
error.

Fixes #12791.

Change-Id: I4130e4c04b177694cc0daf8f1acaf0751d4f062b
Reviewed-on: https://go-review.googlesource.com/16704
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/internal/obj: document Prog
Michael Pratt [Thu, 18 Feb 2016 07:06:56 +0000 (23:06 -0800)]
cmd/internal/obj: document Prog

Change-Id: Iafc392ba06452419542ec85e91d44991839eb6f8
Reviewed-on: https://go-review.googlesource.com/19593
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/objdump: enable tests on ppc64/ppc64le
Shenghou Ma [Mon, 4 May 2015 05:23:56 +0000 (01:23 -0400)]
cmd/objdump: enable tests on ppc64/ppc64le

Fixes #9039.

Change-Id: I7d213b4f8e4cda73ea7687fb97dbd22e58163949
Reviewed-on: https://go-review.googlesource.com/9683
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/internal/objfile: add ppc64/ppc64le disassembler support
Shenghou Ma [Mon, 4 May 2015 05:21:27 +0000 (01:21 -0400)]
cmd/internal/objfile: add ppc64/ppc64le disassembler support

Change-Id: I7d213b4f8e4cda73ea7687fb97dbd22e58163948
Reviewed-on: https://go-review.googlesource.com/9682
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd: add golang.org/x/arch/ppc64/ppc64asm for disassembly
Russ Cox [Wed, 12 Oct 2016 16:41:58 +0000 (12:41 -0400)]
cmd: add golang.org/x/arch/ppc64/ppc64asm for disassembly

For #9039.

Change-Id: I2b1bcd76857ff332411ca21a0cc5def3097a8eaf
Reviewed-on: https://go-review.googlesource.com/30936
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoencoding/xml: prevent omitempty from omitting non-nil pointers to empty values
Allan Simon [Sat, 10 Oct 2015 20:16:58 +0000 (04:16 +0800)]
encoding/xml: prevent omitempty from omitting non-nil pointers to empty values

There was an inconsistency between the (json encoding + documentation)
and the xml encoding implementation. Pointer to an empty value was
not being serialized (i.e simply ignored). Which had the effect of making
impossible to have a struct with a string field for which we wanted to
serialize the value ""

Fixes #5452

Change-Id: Id858701801158409be01e962d2cda843424bd22a
Reviewed-on: https://go-review.googlesource.com/15684
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agomisc/cgo/test: add test that gccgo fails
Xia Bin [Sun, 24 Jan 2016 06:22:54 +0000 (14:22 +0800)]
misc/cgo/test: add test that gccgo fails

Gccgo isn't locking the OS thread properly during calls.

Change-Id: Idb2475291405e390cbb83abb27a402fd0381d0c4
Reviewed-on: https://go-review.googlesource.com/18882
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agosyscall: update darwin/amd64 for timespec change
Russ Cox [Wed, 12 Oct 2016 19:10:15 +0000 (15:10 -0400)]
syscall: update darwin/amd64 for timespec change

Change-Id: I74f47f519dfee10cd079ad9a4e09e36e8d74c6dc
Reviewed-on: https://go-review.googlesource.com/30937
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agoarchive/tar: reduce allocations in formatOctal
Joe Tsai [Wed, 12 Oct 2016 18:36:18 +0000 (11:36 -0700)]
archive/tar: reduce allocations in formatOctal

Change-Id: I9ddb7d2a97d28aba7a107b65f278993daf7807fa
Reviewed-on: https://go-review.googlesource.com/30960
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/asm: recognize CR1-CR7 on ppc64x branch instructions
Lynn Boger [Wed, 12 Oct 2016 12:50:30 +0000 (07:50 -0500)]
cmd/asm: recognize CR1-CR7 on ppc64x branch instructions

Some of the branch instructions (BEQ, BNE, BLT, etc.) accept
all the valid CR values as operands, but the CR register value is
not parsed and not put into the instruction, so that CR0 is always
used regardless of what was specified on the instruction.  For example
BEQ CR2,label becomes beq cr0,label.

This adds the change to the PPC64 assembler to recognize the CR value
and set the approppriate field in the instruction so the correct
CR is used.  This also adds some general comments on the branch
instruction BC and its operand values.

Fixes #17408

Change-Id: I8e956372a42846a4c09a7259e9172eaa29118e71
Reviewed-on: https://go-review.googlesource.com/30930
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
8 years agocmd/compile,runtime: redo how map assignments work
Keith Randall [Tue, 11 Oct 2016 15:36:38 +0000 (08:36 -0700)]
cmd/compile,runtime: redo how map assignments work

To compile:
  m[k] = v
instead of:
  mapassign(maptype, m, &k, &v), do
do:
  *mapassign(maptype, m, &k) = v

mapassign returns a pointer to the value slot in the map.  It is just
like mapaccess except that it will allocate a new slot if k is not
already present in the map.

This makes map accesses faster but potentially larger (codewise).

It is faster because the write into the map is done when the compiler
knows the concrete type, so it can be done with a few store
instructions instead of calling typedmemmove.  We also potentially
avoid stack temporaries to hold v.

The code can be larger when the map has pointers in its value type,
since there is a write barrier call in addition to the mapassign call.
That makes the code at the callsite a bit bigger (go binary is 0.3%
bigger).

This CL is in preparation for doing operations like m[k] += v with
only a single runtime call.  That will roughly double the speed of
such operations.

Update #17133
Update #5147

Change-Id: Ia435f032090a2ed905dac9234e693972fe8c2dc5
Reviewed-on: https://go-review.googlesource.com/30815
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agounicode: change SimpleFold to handle invalid runes
Russ Cox [Wed, 12 Oct 2016 17:11:02 +0000 (13:11 -0400)]
unicode: change SimpleFold to handle invalid runes

Functions like ToLower and ToUpper return the invalid rune back,
so we might as well do the same here.

I changed my mind about panicking when I tried to document the behavior.

Fixes #16690 (again).

Change-Id: If1c68bfcd66daea160fd19948e7672b0e1add106
Reviewed-on: https://go-review.googlesource.com/30935
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
8 years agocmd/link: force external linking for plugins
David Crawshaw [Wed, 12 Oct 2016 16:45:16 +0000 (12:45 -0400)]
cmd/link: force external linking for plugins

Fixes #17415

Change-Id: I6f896d549092e5e0dba72351e5385992b4cbe90f
Reviewed-on: https://go-review.googlesource.com/30933
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocrypto/tls: enable X25519 by default.
Adam Langley [Tue, 11 Oct 2016 22:08:35 +0000 (15:08 -0700)]
crypto/tls: enable X25519 by default.

Since this changes the offered curves in the ClientHello, all the test
data needs to be updated too.

Change-Id: I227934711104349c0f0eab11d854e5a2adcbc363
Reviewed-on: https://go-review.googlesource.com/30825
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocrypto/tls: support X25519.
Adam Langley [Tue, 11 Oct 2016 01:23:37 +0000 (18:23 -0700)]
crypto/tls: support X25519.

X25519 (RFC 7748) is now commonly used for key agreement in TLS
connections, as specified in
https://tools.ietf.org/html/draft-ietf-tls-curve25519-01.

This change adds support for that in crypto/tls, but does not enabled it
by default so that there's less test noise. A future change will enable
it by default and will update all the test data at the same time.

Change-Id: I91802ecd776d73aae5c65bcb653d12e23c413ed4
Reviewed-on: https://go-review.googlesource.com/30824
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocrypto/tls: fix printing of OpenSSL output when updating a test fails.
Adam Langley [Tue, 11 Oct 2016 21:45:29 +0000 (14:45 -0700)]
crypto/tls: fix printing of OpenSSL output when updating a test fails.

When updating the test data against OpenSSL, the handshake can fail and
the stdout/stderr output of OpenSSL is very useful in finding out why.

However, printing that output has been broken for some time because its
no longer sent to a byte.Buffer. This change fixes that.

Change-Id: I6f846c7dc80f1ccee9fa1be36f0b579b3754e05f
Reviewed-on: https://go-review.googlesource.com/30823
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agovendor/golang_org/x/crypto/curve25519: new package
Adam Langley [Tue, 11 Oct 2016 21:59:55 +0000 (14:59 -0700)]
vendor/golang_org/x/crypto/curve25519: new package

This change imports the curve25519 package from x/crypto at revision
594708b89f21ece706681be23d04a6513a22de6e.

Change-Id: I379eaa71492959e404259fc1273d0057573bc243
Reviewed-on: https://go-review.googlesource.com/30822
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocrypto/tls: switch to OpenSSL 1.1.0 for test data.
Adam Langley [Tue, 11 Oct 2016 17:08:57 +0000 (10:08 -0700)]
crypto/tls: switch to OpenSSL 1.1.0 for test data.

We will need OpenSSL 1.1.0 in order to test some of the features
expected for Go 1.8. However, 1.1.0 also disables (by default) some
things that we still want to test, such as RC4, 3DES and SSLv3. Thus
developers wanting to update the crypto/tls test data will need to build
OpenSSL from source.

This change updates the test data with transcripts generated by 1.1.0
(in order to reduce future diffs) and also causes a banner to be printed
if 1.1.0 is not used when updating.

(The test for an ALPN mismatch is removed because OpenSSL now terminates
the connection with a fatal alert if no known ALPN protocols are
offered. There's no point testing against this because it's an OpenSSL
behaviour.)

Change-Id: I957516975e0b8c7def84184f65c81d0b68f1c551
Reviewed-on: https://go-review.googlesource.com/30821
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoarchive/tar: fix and cleanup readOldGNUSparseMap
Joe Tsai [Fri, 2 Sep 2016 23:17:37 +0000 (16:17 -0700)]
archive/tar: fix and cleanup readOldGNUSparseMap

* Assert that the format is GNU.
Both GNU and STAR have some form of sparse file support with
incompatible header structures. Worse yet, both formats use the
'S' type flag to indicate the presence of a sparse file.
As such, we should check the format (based on magic numbers)
and fail early.

* Move realsize parsing logic into readOldGNUSparseMap.
This is related to the sparse parsing logic and belongs here.

* Fix the termination condition for parsing sparse fields.
The termination condition for reading the sparse fields
is to simply check if the first byte of the offset field is NULL.
This does not seem to be documented in the GNU manual, but this is
the check done by the both the GNU and BSD implementations:
http://git.savannah.gnu.org/cgit/tar.git/tree/src/sparse.c?id=9a33077a7b7ad7d32815a21dee54eba63b38a81c#n731
https://github.com/libarchive/libarchive/blob/1fa9c7bf90f0862036a99896b0501c381584451a/libarchive/archive_read_support_format_tar.c#L2207

* Fix the parsing of sparse fields to use parseNumeric.
This is what GNU and BSD do. The previous two links show that
GNU and BSD both handle base-256 and base-8.

* Detect truncated streams.
The call to io.ReadFull does not check if the error is io.EOF.
Getting io.EOF in this method is never okay and should always be
converted to io.ErrUnexpectedEOF.

* Simplify the function.
The logic is essentially a do-while loop so we can remove
some redundant code.

Change-Id: Ib2f601b1a283eaec1e41b1d3396d649c80749c4e
Reviewed-on: https://go-review.googlesource.com/28471
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>

8 years agoarchive/tar: handle integer overflow on 32bit machines
Joe Tsai [Sat, 3 Sep 2016 04:03:57 +0000 (21:03 -0700)]
archive/tar: handle integer overflow on 32bit machines

Most calls to strconv.ParseInt(x, 10, 0) should really be
calls to strconv.ParseInt(x, 10, 64) in order to ensure that they
do not overflow on 32b architectures.

Furthermore, we should document a bug where Uid and Gid may
overflow on 32b machines since the type is declared as int.

Change-Id: I99c0670b3c2922e4a9806822d9ad37e1a364b2b8
Reviewed-on: https://go-review.googlesource.com/28472
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agounicode: panic if given rune is negative in SimpleFold
Hiroshi Ioka [Wed, 12 Oct 2016 14:05:35 +0000 (23:05 +0900)]
unicode: panic if given rune is negative in SimpleFold

Fixes #16690

Change-Id: I6db588c4b0f23c5ec6bc9b85a488b60fab3f2f13
Reviewed-on: https://go-review.googlesource.com/30892
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: trim more blocks
Momchil Velikov [Wed, 7 Sep 2016 12:10:07 +0000 (15:10 +0300)]
cmd/compile: trim more blocks

 - trim blocks with multiple predecessors
 - trim blocks, which contain only phi-functions
 - trim blocks, which can be merged into the successor block

As an example, compiling the following source:

---8<------
package p

type Node struct {
        Key         int
        Left, Right *Node
}

func Search(r *Node, k int) *Node {
        for r != nil {
                switch {
                case k == r.Key:
                        return r
                case k < r.Key:
                        r = r.Left
                default:
                        r = r.Right
                }
        }
        return nil
}
---8<------

with `GOSSAFUNC=Search" go tool compile t.go`, results in the following
code:

---8<------
genssa

      00000 (t.go:8) TEXT "".Search(SB), $0
      00001 (t.go:8) FUNCDATA $0, "".gcargs·0(SB)
      00002 (t.go:8) FUNCDATA $1, "".gclocals·1(SB)
      00003 (t.go:8) TYPE "".r(FP)type.*"".Node, $8
      00004 (t.go:8) TYPE "".k+8(FP)type.int, $8
      00005 (t.go:8) TYPE "".~r2+16(FP)type.*"".Node, $8
v40   00006 (t.go:9) MOVQ "".k+8(FP), AX
v34   00007 (t.go:9) MOVQ "".r(FP), CX
v33   00008 (t.go:9) TESTQ CX, CX
b2    00009 (t.go:9) JEQ $0, 22
v16   00010 (t.go:11) MOVQ (CX), DX
v21   00011 (t.go:11) CMPQ DX, AX
b9    00012 (t.go:11) JEQ $0, 19
v64   00013 (t.go:13) CMPQ AX, DX
b13   00014 (t.go:13) JGE 17
v36   00015 (t.go:14) MOVQ 8(CX), CX
b4    00016 (t.go:9) JMP 8                  <---+
v42   00017 (t.go:16) MOVQ 16(CX), CX             |
b21   00018 (t.go:10) JMP 16                 ----+
v28   00019 (t.go:12) VARDEF "".~r2+16(FP)
v29   00020 (t.go:12) MOVQ CX, "".~r2+16(FP)
b10   00021 (t.go:12) RET
v44   00022 (t.go:19) VARDEF "".~r2+16(FP)
v45   00023 (t.go:19) MOVQ $0, "".~r2+16(FP)
b5    00024 (t.go:19) RET
00025 (<unknown line number>) END
---8<------

Note the jump at 18 jumps to another jump at 16.

Looking at the function after trimming:

--8<------
after trim [199 ns]

b1:
v1 = InitMem <mem>
v2 = SP <uintptr> : SP
v67 = Arg <*Node> {r} : r[*Node]
v59 = Arg <int> {k} : k[int]
v40 = LoadReg <int> v59 : AX
v34 = LoadReg <*Node> v67 : CX
Plain → b2

b2: ← b1 b4
v8 = Phi <*Node> v34 v68 : CX
v33 = TESTQ <flags> v8 v8
NE v33 → b9 b5 (likely)

b9: ← b2
v16 = MOVQload <int> v8 v1 : DX
v21 = CMPQ <flags> v16 v40
EQ v21 → b10 b13 (unlikely)

b13: ← b9
v64 = CMPQ <flags> v40 v16
LT v64 → b19 b21

b19: ← b13
v36 = MOVQload <*Node> [8] v8 v1 : CX
Plain → b4

b4: ← b21 b19                       <
v68 = Phi <*Node> v42 v36 : CX      <- no actual code
Plain → b2                          <

b21: ← b13
v42 = MOVQload <*Node> [16] v8 v1 : CX
Plain → b4

b10: ← b9
v28 = VarDef <mem> {~r2} v1
v29 = MOVQstore <mem> {~r2} v2 v8 v28
v30 = Copy <mem> v29
Ret v30

b5: ← b2
v44 = VarDef <mem> {~r2} v1
v45 = MOVQstoreconst <mem> {~r2} [val=0,off=0] v2 v44
v47 = Copy <mem> v45
Ret v47

--8<------

The jump at 16 corresponds to the edge b21 -> b4. The block b4 contains
only phi-ops, i.e. no actual code besides the jump to b2. However b4 is
not trimmed, because it a) has more than one predecessor, and b) it is
not empty.

This change enhances trim.go to remove more blocks, subject to the
following criteria:

 - block has predecessors (i.e. not the start block)

 - block is BlockPlain

 - block does not loop back to itself

 - block is the single predecessor of its successor; the instructions of
   the block are merged into the successor

 - block does no emit actual code, besides a possible unconditional
   jump.
     Currently only OpPhi are considered to not be actual code,
   perhaps OpKeepAlive/others should be considered too?

As an example, after the change, the block b4 is trimmed and the jump at
18 jumps directly to 8.

Revision 1: Adjust phi-ops arguments after merge

Ensure the number of phi-ops arguments matches the new number of
predecessors in the merged block.
When moving values, make them refer to the merged block.

Revision 2:
 - Make clear the intent that we do not want to trim the entry block
 - Double check that we are merging a phi operation
 - Minor code style fix
 - Fix a potentially dangerous situation when a blocks refers to the
   inline value space in another block

Change-Id: I0ab91779f931f404d11008f5c45606d985d7fbaa
Reviewed-on: https://go-review.googlesource.com/28812
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agosyscall: document that Exec wraps execve(2)
Kevin Burke [Wed, 14 Sep 2016 06:31:07 +0000 (23:31 -0700)]
syscall: document that Exec wraps execve(2)

Change-Id: I611511434f37c75f77c22f61f469108243bc0101
Reviewed-on: https://go-review.googlesource.com/29121
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agonet/http: optimize internal cookie functions
Cyrill Schumacher [Sat, 20 Aug 2016 09:32:32 +0000 (11:32 +0200)]
net/http: optimize internal cookie functions

- precalculate *Cookie slice in read cookie functions
- readSetCookies: pre-allocs depending on the count of Set-Cookies
- rename success variable to ok; avoid else
- refactor Cookie.String to use less allocations
- remove fmt package and replace with writes to a bytes.Buffer
- add BenchmarkReadSetCookies and BenchmarkReadCookies

name              old time/op    new time/op    delta
CookieString-8      1.42µs ± 2%    0.78µs ± 1%  -45.36%        (p=0.000 n=10+10)
ReadSetCookies-8    3.46µs ± 1%    3.42µs ± 2%   -1.39%        (p=0.001 n=10+10)
ReadCookies-8       5.12µs ± 1%    5.15µs ± 2%     ~           (p=0.393 n=10+10)

name              old alloc/op   new alloc/op   delta
CookieString-8        520B ± 0%      384B ± 0%  -26.15%        (p=0.000 n=10+10)
ReadSetCookies-8      968B ± 0%      960B ± 0%   -0.83%        (p=0.000 n=10+10)
ReadCookies-8       2.01kB ± 0%    2.01kB ± 0%     ~     (all samples are equal)

name              old allocs/op  new allocs/op  delta
CookieString-8        10.0 ± 0%       3.0 ± 0%  -70.00%        (p=0.000 n=10+10)
ReadSetCookies-8      18.0 ± 0%      17.0 ± 0%   -5.56%        (p=0.000 n=10+10)
ReadCookies-8         16.0 ± 0%      16.0 ± 0%     ~     (all samples are equal)

Change-Id: I870670987f10f3e52f9c657cfb8e6eaaa97a6162
Reviewed-on: https://go-review.googlesource.com/27850
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agogo/types: expose Default function, which converts untyped T to T
Alan Donovan [Fri, 7 Oct 2016 22:11:06 +0000 (18:11 -0400)]
go/types: expose Default function, which converts untyped T to T

Change-Id: Ibcf5e0ba694b280744a00c2c6fda300f0a653455
Reviewed-on: https://go-review.googlesource.com/30715
Reviewed-by: Robert Griesemer <gri@golang.org>
8 years agotest: add test for issue 17039
Alan Donovan [Fri, 9 Sep 2016 15:14:41 +0000 (11:14 -0400)]
test: add test for issue 17039

Change-Id: Ieb3d605f03a7185a707621bef7160090c9bdb51f
Reviewed-on: https://go-review.googlesource.com/28873
Reviewed-by: Alan Donovan <adonovan@google.com>
8 years agoruntime: update mkduff legacy comments
Emmanuel Odeke [Mon, 12 Sep 2016 02:05:29 +0000 (19:05 -0700)]
runtime: update mkduff legacy comments

Update comments for duffzero and duffcopy
which referred to legacy locations:
+ cmd/?g/cgen.go
+ cmd/?g/ggen.go

Remnants of the old days when we had 5g, 6g etc.

Those locations have since moved to:
+ cmd/compile/internal/<arch>/cgen.go
+ cmd/compile/internal/<arch>/ggen.go

Change-Id: Ie2ea668559d52d42b747260ea69a6d5b3d70e859
Reviewed-on: https://go-review.googlesource.com/29073
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoos: add examples of environment functions
Jean-Nicolas Moal [Mon, 22 Aug 2016 17:02:33 +0000 (19:02 +0200)]
os: add examples of environment functions

For #16360.

Change-Id: Iaa3548704786018eacec530f7a907b976fa532fe
Reviewed-on: https://go-review.googlesource.com/27443
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agopath/filepath: add a test case for EvalSymlinks error
Hiroshi Ioka [Thu, 18 Aug 2016 09:40:02 +0000 (18:40 +0900)]
path/filepath: add a test case for EvalSymlinks error

EvalSymlinks returns error if given path or its target path don't exist.
Add a test for future improvement.

Change-Id: Ic9a4aa5eaee0fe7ac523d54d8eb3132a11b380b3
Reviewed-on: https://go-review.googlesource.com/27330
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>

8 years agocmd/compile/internal/gc: add runtime/trace support
Dave Cheney [Mon, 1 Aug 2016 10:34:12 +0000 (20:34 +1000)]
cmd/compile/internal/gc: add runtime/trace support

This change adds runtime/trace support to go tool compile.

Change-Id: I6c496b9b063796123f75eba6af511c53a57c0196
Reviewed-on: https://go-review.googlesource.com/25354
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
8 years agoruntime: check for errors returned by windows sema calls
Joshua Boelter [Wed, 10 Aug 2016 05:37:26 +0000 (22:37 -0700)]
runtime: check for errors returned by windows sema calls

Add checks for failure of CreateEvent, SetEvent or
WaitForSingleObject. Any failures are considered fatal and
will throw() after printing an informative message.

Updates #16646

Change-Id: I3bacf9001d2abfa8667cc3aff163ff2de1c99915
Reviewed-on: https://go-review.googlesource.com/26655
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/link: use HEADR to define FlagTextAddr (cosmetic change)
David du Colombier [Wed, 12 Oct 2016 12:57:19 +0000 (14:57 +0200)]
cmd/link: use HEADR to define FlagTextAddr (cosmetic change)

This cosmetic change defines ld.FlagTextAddr using ld.HEADR in
the Plan 9 cases, like it is done for other operating systems.

Change-Id: Ic929c1c437f25661058682cf3e159f0b16cdc538
Reviewed-on: https://go-review.googlesource.com/30912
Run-TryBot: David du Colombier <0intro@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agonet: update doc for unimplemented feature on Plan 9
Mikio Hara [Wed, 12 Oct 2016 10:41:29 +0000 (19:41 +0900)]
net: update doc for unimplemented feature on Plan 9

Also removes unnecessary allocation.

Change-Id: I3406cf75a7b64d93b2b99c7f1f5c78f580452b60
Reviewed-on: https://go-review.googlesource.com/30891
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/link: fix build on plan9/amd64
David du Colombier [Wed, 12 Oct 2016 12:24:39 +0000 (14:24 +0200)]
cmd/link: fix build on plan9/amd64

Support for multiple text sections was added in CL 27790.
However, this change broke the build on plan9/amd64.

In relocsym, the R_ADDROFF relocation was changed to
use offsets relative to the start of the first text
section. However, Segtext.Vaddr is the address of
the text segment, while we expect to start from
the first section (text.runtime) of the text segment.

Fixes #17411.

Change-Id: I86bbcbda81cea735b0ecf156eab2e6e5d63acce3
Reviewed-on: https://go-review.googlesource.com/30911
Run-TryBot: David du Colombier <0intro@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agosyscall: unify NsecToTime{spec,val}, fix for times < 1970
Ian Lance Taylor [Wed, 12 Oct 2016 04:04:16 +0000 (21:04 -0700)]
syscall: unify NsecToTime{spec,val}, fix for times < 1970

All the implementations of NsecToTimespec and NsecToTimeval were the
same other than types. Write a single version that uses
GOARCH/GOOS-specific setTimespec and setTimeval functions to handle the
types.

The logic in NsecToTimespec and NsecToTimeval caused times before 1970
to have a negative usec/nsec. The Linux kernel requires that usec
contain a positive number; for consistency, we do this for both
NsecToTimespec and NsecToTimeval.

Change-Id: I525eaba2e7cdb00cb57fa00182dabf19fec298ae
Reviewed-on: https://go-review.googlesource.com/30826
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agonet: implement network interface API for Plan 9
Chris McGee [Thu, 29 Sep 2016 01:29:08 +0000 (21:29 -0400)]
net: implement network interface API for Plan 9

The new implementation parses the plan9 interface files
and builds Interface representations for the net package.

Updates #17218

Change-Id: I3199d18d9e96a17e922186c3abff1d7cd9cbec2e
Reviewed-on: https://go-review.googlesource.com/29963
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoos: add example for IsNotExist
Sina Siadat [Sun, 7 Aug 2016 21:34:52 +0000 (02:04 +0430)]
os: add example for IsNotExist

Show usage of os.IsNotExist in an example.

Change-Id: I5306ea06c370099de5b02668dfa02b87b0c2beac
Reviewed-on: https://go-review.googlesource.com/25571
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/link: non-executable stack support for Solaris
Shawn Walker-Salas [Wed, 15 Jun 2016 20:44:03 +0000 (13:44 -0700)]
cmd/link: non-executable stack support for Solaris

Support the tagging of binaries created with the internal linker
on Solaris as having a non-executable stack by writing a PT_SUNWSTACK
program header.

Fixes #16074

Change-Id: I3888f2153083385d04a52f341570f93e5738b276
Reviewed-on: https://go-review.googlesource.com/24142
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoruntime/pprof: preallocate slice in pprof.go
Gyu-Ho Lee [Sun, 5 Jun 2016 06:20:45 +0000 (23:20 -0700)]
runtime/pprof: preallocate slice in pprof.go

To prevent slice growth when appending.

Change-Id: I2cdb9b09bc33f63188b19573c8b9a77601e63801
Reviewed-on: https://go-review.googlesource.com/23783
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoos: add new tests for symbolic links and directory junctions
Alex Brainman [Thu, 28 Jul 2016 00:33:26 +0000 (10:33 +1000)]
os: add new tests for symbolic links and directory junctions

Updates #15978
Updates #16145

Change-Id: I161f5bc97d41c08bf5e1405ccafa86232d70886d
Reviewed-on: https://go-review.googlesource.com/25320
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/go: added verbose error from matchGoImport
Tristan Ooohry [Fri, 22 Jul 2016 04:11:58 +0000 (04:11 +0000)]
cmd/go: added verbose error from matchGoImport

The error coming out of matchGoImport does not differentiate between
having no imports, and having some invalid imports.

This some extra context to the error message to help debug these issues.

Fixes #16467

Change-Id: I3e9a119ed73da1bed5e07365be0221ea6b7f19db
Reviewed-on: https://go-review.googlesource.com/25121
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoencoding/base64: This change modifies Go to take strict option when decoding base64
Xuyang Kang [Sun, 17 Jul 2016 07:23:56 +0000 (00:23 -0700)]
encoding/base64: This change modifies Go to take strict option when decoding base64

If strict option is enabled, when decoding, instead of skip the padding
bits, it will do strict check to enforce they are set to zero.

Fixes #15656

Change-Id: I869fb725a39cc9dde44dbc4ff0046446e7abc642
Reviewed-on: https://go-review.googlesource.com/24964
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/gofmt: simplify map key literals
Gustav Westling [Fri, 5 Aug 2016 14:13:23 +0000 (16:13 +0200)]
cmd/gofmt: simplify map key literals

Simplify map key literals in "gofmt -s"

Fixes #16461.

Change-Id: Ia61739b34a30ac27f6696f94a98809109a8a7b61
Reviewed-on: https://go-review.googlesource.com/25530
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/compile: update ssa html help text
Keith Randall [Tue, 11 Oct 2016 20:50:44 +0000 (13:50 -0700)]
cmd/compile: update ssa html help text

Update the description of the conditions under which highlighting might
be misleading.

Fixes #16754

Change-Id: I3078a09e0b9a76d12078352e15a3f26ba3f1bbee
Reviewed-on: https://go-review.googlesource.com/30818
Reviewed-by: David Chase <drchase@google.com>
8 years agopath/filepath: remove unneeded doc statement for SplitList
Dmitri Shuralyov [Tue, 26 Jul 2016 17:01:18 +0000 (13:01 -0400)]
path/filepath: remove unneeded doc statement for SplitList

This is a followup to CL 24747, where the package doc phrase
"Functions in this package replace occurrences of slash unless otherwise specified."
was removed. The phrase was originally added in CL 7310 together
with this explicit opt out statement for SplitList.

Remove it since it's no longer neccessary. This helps consistency.

Updates #16111.
Updates #10122.

Change-Id: Iba86de57c24100adecac9cb5892ce180126c0ea6
Reviewed-on: https://go-review.googlesource.com/25250
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoruntime: fix typo in comments
Gleb Stepanov [Mon, 25 Jul 2016 12:53:15 +0000 (15:53 +0300)]
runtime: fix typo in comments

Fix typo in word synchronization in comments.

Change-Id: I453b4e799301e758799c93df1e32f5244ca2fb84
Reviewed-on: https://go-review.googlesource.com/25174
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoruntime: remove canBackTrace variable from TestGdbPython
Michael Munday [Sun, 24 Apr 2016 21:36:41 +0000 (17:36 -0400)]
runtime: remove canBackTrace variable from TestGdbPython

The canBackTrace variable is true for all of the architectures
Go supports and this is likely to remain the case as new
architectures are added.

Change-Id: I73900c018eb4b2e5c02fccd8d3e89853b2ba9d90
Reviewed-on: https://go-review.googlesource.com/22423
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/pprof: instruction-level granularity in callgrind output
Michael Pratt [Thu, 21 Jul 2016 05:01:33 +0000 (22:01 -0700)]
cmd/pprof: instruction-level granularity in callgrind output

When generating callgrind format output, produce cost lines at
instruction granularity. This allows visualizers supporting the
callgrind format to display instruction-level profiling information.

We also need to provide the object file (ob=) in order for tools to find
the object file to disassemble when displaying assembly.

We opportunistically group cost lines corressponding to the same
function together, reducing the number of superfluous description lines.
Subposition compression (relative position numbering) is also used to
reduce the output size.

Change-Id: Id8e960b81dc7a47ec1dfbae877521f76972431c4
Reviewed-on: https://go-review.googlesource.com/23781
Run-TryBot: Michael Pratt <mpratt@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Raul Silvera <rsilvera@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/trace: add option to output pprof files
Filippo Valsorda [Tue, 24 May 2016 11:50:38 +0000 (12:50 +0100)]
cmd/trace: add option to output pprof files

The trace tool can generate some interesting profiles, but it was only
exposing them as svg through the web UI.  This adds command line options
to generate the raw pprof file.

Change-Id: I52e4f909fdca6f65c3616add444e3892783640f4
Reviewed-on: https://go-review.googlesource.com/23324
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agosyscall: unify TimespecToNsec and TimevalToNsec
Ian Lance Taylor [Tue, 11 Oct 2016 21:20:50 +0000 (14:20 -0700)]
syscall: unify TimespecToNsec and TimevalToNsec

All implementations of these functions are identical.

Change-Id: I7cbea53c02bb0cee75e30beed19d29ba0a7ef657
Reviewed-on: https://go-review.googlesource.com/30819
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agodebug/elf: add sparc64 relocations
James Clarke [Tue, 11 Oct 2016 18:08:45 +0000 (19:08 +0100)]
debug/elf: add sparc64 relocations

Change-Id: I1a2504ad9ca8607588d2d366598115fe360435b5
Reviewed-on: https://go-review.googlesource.com/30870
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agoarchive/zip: only use Extended Timestamp on non-zero MS-DOS timestamps
Joe Tsai [Tue, 11 Oct 2016 01:23:56 +0000 (18:23 -0700)]
archive/zip: only use Extended Timestamp on non-zero MS-DOS timestamps

We should preserve the fact that a roundtrip read on fields with the zero
value should remain the zero for those that are reasonable to stay that way.
If the zero value for a MS-DOS timestamp was used, then it is sensible for
that zero value to also be read back later.

Fixes #17403

Change-Id: I32c3915eab180e91ddd2499007374f7b85f0bd76
Reviewed-on: https://go-review.googlesource.com/30811
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile, runtime: stop padding stackmaps to 4 bytes
Matthew Dempsky [Tue, 11 Oct 2016 18:34:20 +0000 (11:34 -0700)]
cmd/compile, runtime: stop padding stackmaps to 4 bytes

Shrinks cmd/go's text segment by 0.9%.

   text    data     bss     dec     hex filename
6447148  231643  146328 6825119  68249f go.before
6387404  231643  146328 6765375  673b3f go.after

Change-Id: I431e8482dbb11a7c1c77f2196cada43d5dad2981
Reviewed-on: https://go-review.googlesource.com/30817
Reviewed-by: Austin Clements <austin@google.com>
8 years agocmd/compile: refactor stackmap dumping code
Matthew Dempsky [Tue, 11 Oct 2016 17:23:14 +0000 (10:23 -0700)]
cmd/compile: refactor stackmap dumping code

Also, fix a byte-ordering problem with stack maps for assembly
function signatures on big-endian targets.

Change-Id: I6e8698f5fbb04b31771a65f4a8f3f9c045ff3c98
Reviewed-on: https://go-review.googlesource.com/30816
Reviewed-by: Austin Clements <austin@google.com>
8 years agocmd/compile: make link register allocatable in non-leaf functions
Michael Munday [Thu, 6 Oct 2016 19:06:45 +0000 (15:06 -0400)]
cmd/compile: make link register allocatable in non-leaf functions

We save and restore the link register in non-leaf functions because
it is clobbered by CALLs. It is therefore available for general
purpose use.

Only enabled on s390x currently. The RC4 benchmarks in particular
benefit from the extra register:

name     old speed     new speed     delta
RC4_128  243MB/s ± 2%  341MB/s ± 2%  +40.46%  (p=0.008 n=5+5)
RC4_1K   267MB/s ± 0%  359MB/s ± 1%  +34.32%  (p=0.008 n=5+5)
RC4_8K   271MB/s ± 0%  362MB/s ± 0%  +33.61%  (p=0.008 n=5+5)

Change-Id: Id23bff95e771da9425353da2f32668b8e34ba09f
Reviewed-on: https://go-review.googlesource.com/30597
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Michael Munday <munday@ca.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocrypto/x509: parse all names in an RDN.
Adam Langley [Mon, 10 Oct 2016 23:26:51 +0000 (16:26 -0700)]
crypto/x509: parse all names in an RDN.

The Subject and Issuer names in a certificate look like they should be a
list of key-value pairs. However, they're actually a list of lists of
key-value pairs. Previously we only looked at the first element of each
sublist and the vast majority of certificates only have one element per
sublist.

However, it's possible to have multiple elements and some 360
certificates from the “Pilot” log are so constructed.

This change causes all elements of the sublists to be processed.

Fixes #16836.

Change-Id: Ie0a5159135b08226ec517fcf251aa17aada37857
Reviewed-on: https://go-review.googlesource.com/30810
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: remove redundant function idom
Hajime Hoshi [Sat, 8 Oct 2016 16:09:52 +0000 (01:09 +0900)]
cmd/compile: remove redundant function idom

Change-Id: Ib14b5421bb5e407bbd4d3cbfc68c92d3dd257cb1
Reviewed-on: https://go-review.googlesource.com/30732
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile: escape analysis needs to run "flood" to fixed point
David Chase [Sat, 8 Oct 2016 20:45:58 +0000 (16:45 -0400)]
cmd/compile: escape analysis needs to run "flood" to fixed point

In some cases the members of the root set from which flood
runs themselves escape, without their referents being also
tagged as escaping.  Fix this by reflooding from those roots
whose escape increases, and also enhance the "leak" test to
include reachability from a heap-escaped root.

Fixes #17318.

Change-Id: Ied1e75cee17ede8ca72a8b9302ce8201641ec593
Reviewed-on: https://go-review.googlesource.com/30693
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agomath/big: move ProbablyPrime into its own source file
Russ Cox [Mon, 10 Oct 2016 20:03:13 +0000 (16:03 -0400)]
math/big: move ProbablyPrime into its own source file

A later CL will be adding more code here.
It will help to keep it separate from the other code.

Change-Id: I971ba53de819cd10991b51fdec665984939a5f9b
Reviewed-on: https://go-review.googlesource.com/30709
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agomath/big: test and optimize Exp(2, y, n) for large y, odd n
Russ Cox [Mon, 10 Oct 2016 20:45:30 +0000 (16:45 -0400)]
math/big: test and optimize Exp(2, y, n) for large y, odd n

The Montgomery multiply code is applicable to this case
but was being bypassed. Don't do that.

The old test len(x) > 1 was really just a bad approximation to x > 1.

name    old time/op  new time/op  delta
Exp-8   5.56ms ± 4%  5.73ms ± 3%     ~     (p=0.095 n=5+5)
Exp2-8  7.59ms ± 1%  5.66ms ± 1%  -25.40%  (p=0.008 n=5+5)

This comes up especially when doing Fermat (Miller-Rabin)
primality tests with base 2.

Change-Id: I4cc02978db6dfa93f7f3c8f32718e25eedb4f5ed
Reviewed-on: https://go-review.googlesource.com/30708
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agomath/big: move exhaustive tests behind -long flag
Russ Cox [Mon, 10 Oct 2016 20:44:53 +0000 (16:44 -0400)]
math/big: move exhaustive tests behind -long flag

This way you can still run 'go test' or 'go bench -run Foo'
without wondering why it is taking so very long.

Change-Id: Icfa097a6deb1d6682acb7be9f34729215c29eabb
Reviewed-on: https://go-review.googlesource.com/30707
Reviewed-by: Robert Griesemer <gri@golang.org>
8 years agocmd/compile: intrinsify math/big.mulWW, divWW on AMD64
Cherry Zhang [Thu, 6 Oct 2016 19:43:47 +0000 (15:43 -0400)]
cmd/compile: intrinsify math/big.mulWW, divWW on AMD64

Change-Id: I59f7afa7a5803d19f8b21fe70fc85ef997bb3a85
Reviewed-on: https://go-review.googlesource.com/30542
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
8 years agocmd/link: insert trampolines for too-far jumps on ARM
Cherry Zhang [Wed, 14 Sep 2016 18:47:12 +0000 (14:47 -0400)]
cmd/link: insert trampolines for too-far jumps on ARM

ARM direct CALL/JMP instruction has 24 bit offset, which can only
encodes jumps within +/-32M. When the target is too far, the top
bits get truncated and the program jumps wild.

This CL detects too-far jumps and automatically insert trampolines,
currently only internal linking on ARM.

It is necessary to make the following changes to the linker:
- Resolve direct jump relocs when assigning addresses to functions.
  this allows trampoline insertion without moving all code that
  already laid down.
- Lay down packages in dependency order, so that when resolving a
  inter-package direct jump reloc, the target address is already
  known. Intra-package jumps are assumed never too far.
- a linker flag -debugtramp is added for debugging trampolines:
    "-debugtramp=1 -v" prints trampoline debug message
    "-debugtramp=2"    forces all inter-package jump to use
                       trampolines (currently ARM only)
    "-debugtramp=2 -v" does both
- Some data structures are changed for bookkeeping.

On ARM, pseudo DIV/DIVU/MOD/MODU instructions now clobber R8
(unfortunate). In the standard library there is no ARM assembly
code that uses these instructions, and the compiler no longer emits
them (CL 29390).

all.bash passes with -debugtramp=2, except a disassembly test (this
is unavoidable as we changed the instruction).

TBD: debug info of trampolines?

Fixes #17028.

Change-Id: Idcce347ea7e0af77c4079041a160b2f6e114b474
Reviewed-on: https://go-review.googlesource.com/29397
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime: record current PC for SIGPROF on non-Go thread
Ian Lance Taylor [Tue, 4 Oct 2016 14:11:55 +0000 (07:11 -0700)]
runtime: record current PC for SIGPROF on non-Go thread

If we get a SIGPROF on a non-Go thread, and the program has not called
runtime.SetCgoTraceback so we have no way to collect a stack trace, then
record a profile that is just the PC where the signal occurred. That
will at least point the user to the right area.

Retrieving the PC from the sigctxt in a signal handler on a non-G thread
required marking a number of trivial sigctxt methods as nosplit, and,
for extra safety, nowritebarrierrec.

The test shows that the existing test CgoPprofThread test does not test
the stack trace, just the profile signal. Leaving that for later.

Change-Id: I8f8f3ff09ac099fc9d9df94b5a9d210ffc20c4ab
Reviewed-on: https://go-review.googlesource.com/30252
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
8 years agocmd/trace: fix a runnable goroutine count bug
Hyang-Ah (Hana) Kim [Mon, 8 Aug 2016 21:24:07 +0000 (17:24 -0400)]
cmd/trace: fix a runnable goroutine count bug

When starting tracing, EvGoCreate events are added for existing
goroutines that may have been blocking in syscall. EvGoCreate
increments the runnable goroutine count. This change makes the
following EvGoInSyscall event decrement the runnable goroutine count
because we now know that goroutine is in syscall, and not runnable.

Made generateTrace return an error, at any given time, the number
of runnable/running/insyscall goroutines becomes non-negative.

Added a basic test that checks the number of runnable/running
goroutines don't include the goroutines in syscall - the test failed
before this change.

Change-Id: Ib732c382e7bd17158a437576f9d589ab89097ce6
Reviewed-on: https://go-review.googlesource.com/25552
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>