]> Cypherpunks repositories - gostls13.git/log
gostls13.git
8 years agocmd/compile: re-enable nilcheck removal in same block
Cherry Zhang [Fri, 20 Jan 2017 15:38:05 +0000 (10:38 -0500)]
cmd/compile: re-enable nilcheck removal in same block

Nil check removal in the same block is disabled due to issue 18725:
because the values are not ordered, a nilcheck may influence a
value that is logically before it. This CL re-enables same-block
nilcheck removal by ordering values in store order first.

Updates #18725.

Change-Id: I287a38525230c14c5412cbcdbc422547dabd54f6
Reviewed-on: https://go-review.googlesource.com/35496
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
8 years agomath/bits: expand doc strings for all functions
Robert Griesemer [Thu, 16 Feb 2017 22:15:23 +0000 (14:15 -0800)]
math/bits: expand doc strings for all functions

Follow-up on https://go-review.googlesource.com/36315.
No functionality change.

For #18616.

Change-Id: Id4df34dd7d0381be06eea483a11bf92f4a01f604
Reviewed-on: https://go-review.googlesource.com/37140
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agoall: fix a few typos in comments
Koki Ide [Thu, 16 Feb 2017 15:50:41 +0000 (00:50 +0900)]
all: fix a few typos in comments

Change-Id: I0455ffaa51c661803d8013c7961910f920d3c3cc
Reviewed-on: https://go-review.googlesource.com/37043
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agosync: make Mutex more fair
Dmitry Vyukov [Tue, 13 Dec 2016 15:45:55 +0000 (16:45 +0100)]
sync: make Mutex more fair

Add new starvation mode for Mutex.
In starvation mode ownership is directly handed off from
unlocking goroutine to the next waiter. New arriving goroutines
don't compete for ownership.
Unfair wait time is now limited to 1ms.
Also fix a long standing bug that goroutines were requeued
at the tail of the wait queue. That lead to even more unfair
acquisition times with multiple waiters.

Performance of normal mode is not considerably affected.

Fixes #13086

On the provided in the issue lockskew program:

done in 1.207853ms
done in 1.177451ms
done in 1.184168ms
done in 1.198633ms
done in 1.185797ms
done in 1.182502ms
done in 1.316485ms
done in 1.211611ms
done in 1.182418ms

name                    old time/op  new time/op   delta
MutexUncontended-48     0.65ns ± 0%   0.65ns ± 1%     ~           (p=0.087 n=10+10)
Mutex-48                 112ns ± 1%    114ns ± 1%   +1.69%        (p=0.000 n=10+10)
MutexSlack-48            113ns ± 0%     87ns ± 1%  -22.65%         (p=0.000 n=8+10)
MutexWork-48             149ns ± 0%    145ns ± 0%   -2.48%         (p=0.000 n=9+10)
MutexWorkSlack-48        149ns ± 0%    122ns ± 3%  -18.26%         (p=0.000 n=6+10)
MutexNoSpin-48           103ns ± 4%    105ns ± 3%     ~           (p=0.089 n=10+10)
MutexSpin-48             490ns ± 4%    515ns ± 6%   +5.08%        (p=0.006 n=10+10)
Cond32-48               13.4µs ± 6%   13.1µs ± 5%   -2.75%        (p=0.023 n=10+10)
RWMutexWrite100-48      53.2ns ± 3%   41.2ns ± 3%  -22.57%        (p=0.000 n=10+10)
RWMutexWrite10-48       45.9ns ± 2%   43.9ns ± 2%   -4.38%        (p=0.000 n=10+10)
RWMutexWorkWrite100-48   122ns ± 2%    134ns ± 1%   +9.92%        (p=0.000 n=10+10)
RWMutexWorkWrite10-48    206ns ± 1%    188ns ± 1%   -8.52%         (p=0.000 n=8+10)
Cond32-24               12.1µs ± 3%   12.4µs ± 3%   +1.98%         (p=0.043 n=10+9)
MutexUncontended-24     0.74ns ± 1%   0.75ns ± 1%     ~           (p=0.650 n=10+10)
Mutex-24                 122ns ± 2%    124ns ± 1%   +1.31%        (p=0.007 n=10+10)
MutexSlack-24           96.9ns ± 2%  102.8ns ± 2%   +6.11%        (p=0.000 n=10+10)
MutexWork-24             146ns ± 1%    135ns ± 2%   -7.70%         (p=0.000 n=10+9)
MutexWorkSlack-24        135ns ± 1%    128ns ± 2%   -5.01%         (p=0.000 n=10+9)
MutexNoSpin-24           114ns ± 3%    110ns ± 4%   -3.84%        (p=0.000 n=10+10)
MutexSpin-24             482ns ± 4%    475ns ± 8%     ~           (p=0.286 n=10+10)
RWMutexWrite100-24      43.0ns ± 3%   43.1ns ± 2%     ~           (p=0.956 n=10+10)
RWMutexWrite10-24       43.4ns ± 1%   43.2ns ± 1%     ~            (p=0.085 n=10+9)
RWMutexWorkWrite100-24   130ns ± 3%    131ns ± 3%     ~           (p=0.747 n=10+10)
RWMutexWorkWrite10-24    191ns ± 1%    192ns ± 1%     ~           (p=0.210 n=10+10)
Cond32-12               11.5µs ± 2%   11.7µs ± 2%   +1.98%        (p=0.002 n=10+10)
MutexUncontended-12     1.48ns ± 0%   1.50ns ± 1%   +1.08%        (p=0.004 n=10+10)
Mutex-12                 141ns ± 1%    143ns ± 1%   +1.63%        (p=0.000 n=10+10)
MutexSlack-12            121ns ± 0%    119ns ± 0%   -1.65%          (p=0.001 n=8+9)
MutexWork-12             141ns ± 2%    150ns ± 3%   +6.36%         (p=0.000 n=9+10)
MutexWorkSlack-12        131ns ± 0%    138ns ± 0%   +5.73%         (p=0.000 n=9+10)
MutexNoSpin-12          87.0ns ± 1%   83.7ns ± 1%   -3.80%        (p=0.000 n=10+10)
MutexSpin-12             364ns ± 1%    377ns ± 1%   +3.77%        (p=0.000 n=10+10)
RWMutexWrite100-12      42.8ns ± 1%   43.9ns ± 1%   +2.41%         (p=0.000 n=8+10)
RWMutexWrite10-12       39.8ns ± 4%   39.3ns ± 1%     ~            (p=0.433 n=10+9)
RWMutexWorkWrite100-12   131ns ± 1%    131ns ± 0%     ~            (p=0.591 n=10+9)
RWMutexWorkWrite10-12    173ns ± 1%    174ns ± 0%     ~            (p=0.059 n=10+8)
Cond32-6                10.9µs ± 2%   10.9µs ± 2%     ~           (p=0.739 n=10+10)
MutexUncontended-6      2.97ns ± 0%   2.97ns ± 0%     ~     (all samples are equal)
Mutex-6                  122ns ± 6%    122ns ± 2%     ~           (p=0.668 n=10+10)
MutexSlack-6             149ns ± 3%    142ns ± 3%   -4.63%        (p=0.000 n=10+10)
MutexWork-6              136ns ± 3%    140ns ± 5%     ~           (p=0.077 n=10+10)
MutexWorkSlack-6         152ns ± 0%    138ns ± 2%   -9.21%         (p=0.000 n=6+10)
MutexNoSpin-6            150ns ± 1%    152ns ± 0%   +1.50%         (p=0.000 n=8+10)
MutexSpin-6              726ns ± 0%    730ns ± 1%     ~           (p=0.069 n=10+10)
RWMutexWrite100-6       40.6ns ± 1%   40.9ns ± 1%   +0.91%         (p=0.001 n=8+10)
RWMutexWrite10-6        37.1ns ± 0%   37.0ns ± 1%     ~            (p=0.386 n=9+10)
RWMutexWorkWrite100-6    133ns ± 1%    134ns ± 1%   +1.01%         (p=0.005 n=9+10)
RWMutexWorkWrite10-6     152ns ± 0%    152ns ± 0%     ~     (all samples are equal)
Cond32-2                7.86µs ± 2%   7.95µs ± 2%   +1.10%        (p=0.023 n=10+10)
MutexUncontended-2      8.10ns ± 0%   9.11ns ± 4%  +12.44%         (p=0.000 n=9+10)
Mutex-2                 32.9ns ± 9%   38.4ns ± 6%  +16.58%        (p=0.000 n=10+10)
MutexSlack-2            93.4ns ± 1%   98.5ns ± 2%   +5.39%         (p=0.000 n=10+9)
MutexWork-2             40.8ns ± 3%   43.8ns ± 7%   +7.38%         (p=0.000 n=10+9)
MutexWorkSlack-2        98.6ns ± 5%  108.2ns ± 2%   +9.80%         (p=0.000 n=10+8)
MutexNoSpin-2            399ns ± 1%    398ns ± 2%     ~             (p=0.463 n=8+9)
MutexSpin-2             1.99µs ± 3%   1.97µs ± 1%   -0.81%          (p=0.003 n=9+8)
RWMutexWrite100-2       37.6ns ± 5%   46.0ns ± 4%  +22.17%         (p=0.000 n=10+8)
RWMutexWrite10-2        50.1ns ± 6%   36.8ns ±12%  -26.46%         (p=0.000 n=9+10)
RWMutexWorkWrite100-2    136ns ± 0%    134ns ± 2%   -1.80%          (p=0.001 n=7+9)
RWMutexWorkWrite10-2     140ns ± 1%    138ns ± 1%   -1.50%        (p=0.000 n=10+10)
Cond32                  5.93µs ± 1%   5.91µs ± 0%     ~            (p=0.411 n=9+10)
MutexUncontended        15.9ns ± 0%   15.8ns ± 0%   -0.63%          (p=0.000 n=8+8)
Mutex                   15.9ns ± 0%   15.8ns ± 0%   -0.44%        (p=0.003 n=10+10)
MutexSlack              26.9ns ± 3%   26.7ns ± 2%     ~           (p=0.084 n=10+10)
MutexWork               47.8ns ± 0%   47.9ns ± 0%   +0.21%          (p=0.014 n=9+8)
MutexWorkSlack          54.9ns ± 3%   54.5ns ± 3%     ~           (p=0.254 n=10+10)
MutexNoSpin              786ns ± 2%    765ns ± 1%   -2.66%        (p=0.000 n=10+10)
MutexSpin               3.87µs ± 1%   3.83µs ± 0%   -0.85%          (p=0.005 n=9+8)
RWMutexWrite100         21.2ns ± 2%   21.0ns ± 1%   -0.88%         (p=0.018 n=10+9)
RWMutexWrite10          22.6ns ± 1%   22.6ns ± 0%     ~             (p=0.471 n=9+9)
RWMutexWorkWrite100      132ns ± 0%    132ns ± 0%     ~     (all samples are equal)
RWMutexWorkWrite10       124ns ± 0%    123ns ± 0%     ~           (p=0.656 n=10+10)

Change-Id: I66412a3a0980df1233ad7a5a0cd9723b4274528b
Reviewed-on: https://go-review.googlesource.com/34310
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agosyscall: only call setgroups if we need to
Wander Lairson Costa [Fri, 10 Feb 2017 06:10:48 +0000 (04:10 -0200)]
syscall: only call setgroups if we need to

If the caller set ups a Credential in os/exec.Command,
os/exec.Command.Start will end up calling setgroups(2), even if no
supplementary groups were given.

Only root can call setgroups(2) on BSD kernels, which causes Start to
fail for non-root users when they try to set uid and gid for the new
process.

We fix by introducing a new field to syscall.Credential named
NoSetGroups, and setgroups(2) is only called if it is false.
We make this field with inverted logic to preserve backward
compatibility.

RELNOTES=yes

Change-Id: I3cff1f21c117a1430834f640ef21fd4e87e06804
Reviewed-on: https://go-review.googlesource.com/36697
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile: move constant divide strength reduction to SSA rules
Keith Randall [Tue, 14 Feb 2017 00:00:09 +0000 (16:00 -0800)]
cmd/compile: move constant divide strength reduction to SSA rules

Currently the conversion from constant divides to multiplies is mostly
done during the walk pass.  This is suboptimal because SSA can
determine that the value being divided by is constant more often
(e.g. after inlining).

Change-Id: If1a9b993edd71be37396b9167f77da271966f85f
Reviewed-on: https://go-review.googlesource.com/37015
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
8 years agocmd/compile: simplify needwritebarrier
Matthew Dempsky [Thu, 16 Feb 2017 02:43:34 +0000 (18:43 -0800)]
cmd/compile: simplify needwritebarrier

Currently, whether we need a write barrier is simply a property of the
pointer slot being written to.

The only optimization we currently apply using the value being written
is that pointers to stack variables can omit write barriers because
they're only written to stack slots... but we already omit write
barriers for all writes to the stack anyway.

Passes toolstash -cmp.

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

8 years agomath: fix typos in Bessel function docs
Shenghou Ma [Sat, 28 Jan 2017 07:01:50 +0000 (02:01 -0500)]
math: fix typos in Bessel function docs

While we're at it, also document Yn(0, 0) = -Inf for completeness.

Fixes #18823.

Change-Id: Ib6db68f76d29cc2373c12ebdf3fab129cac8c167
Reviewed-on: https://go-review.googlesource.com/35970
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agomath/bits: added package for bit-level counting and manipulation
Robert Griesemer [Fri, 3 Feb 2017 00:59:34 +0000 (16:59 -0800)]
math/bits: added package for bit-level counting and manipulation

Initial platform-independent implementation.

For #18616.

Change-Id: I4585c55b963101af9059c06c1b8a866cb384754c
Reviewed-on: https://go-review.googlesource.com/36315
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/compile/internal/syntax: better errors and recovery for invalid character literals
Robert Griesemer [Thu, 16 Feb 2017 20:52:01 +0000 (12:52 -0800)]
cmd/compile/internal/syntax: better errors and recovery for invalid character literals

Fixes #15611.

Change-Id: I352b145026466cafef8cf87addafbd30716bda24
Reviewed-on: https://go-review.googlesource.com/37138
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agoruntime: use balanced tree for addr lookup in semaphore implementation
Russ Cox [Sun, 12 Feb 2017 18:19:02 +0000 (13:19 -0500)]
runtime: use balanced tree for addr lookup in semaphore implementation

CL 36792 fixed #17953, a linear scan caused by n goroutines piling into
two different locks that hashed to the same bucket in the semaphore table.
In that CL, n goroutines contending for 2 unfortunately chosen locks
went from O(n²) to O(n).

This CL fixes a different linear scan, when n goroutines are contending for
n/2 different locks that all hash to the same bucket in the semaphore table.
In this CL, n goroutines contending for n/2 unfortunately chosen locks
goes from O(n²) to O(n log n). This case is much less likely, but any linear
scan eventually hurts, so we might as well fix it while the problem is fresh
in our minds.

The new test in this CL checks for both linear scans.

The effect of this CL on the sync benchmarks is negligible
(but it fixes the new test).

name                      old time/op    new time/op    delta
Cond1-48                     576ns ±10%     575ns ±13%     ~     (p=0.679 n=71+71)
Cond2-48                    1.59µs ± 8%    1.61µs ± 9%     ~     (p=0.107 n=73+69)
Cond4-48                    4.56µs ± 7%    4.55µs ± 7%     ~     (p=0.670 n=74+72)
Cond8-48                    9.87µs ± 9%    9.90µs ± 7%     ~     (p=0.507 n=69+73)
Cond16-48                   20.4µs ± 7%    20.4µs ±10%     ~     (p=0.588 n=69+71)
Cond32-48                   45.4µs ±10%    45.4µs ±14%     ~     (p=0.944 n=73+73)
UncontendedSemaphore-48     19.7ns ±12%    19.7ns ± 8%     ~     (p=0.589 n=65+63)
ContendedSemaphore-48       55.4ns ±26%    54.9ns ±32%     ~     (p=0.441 n=75+75)
MutexUncontended-48         0.63ns ± 0%    0.63ns ± 0%     ~     (all equal)
Mutex-48                     210ns ± 6%     213ns ±10%   +1.30%  (p=0.035 n=70+74)
MutexSlack-48                210ns ± 7%     211ns ± 9%     ~     (p=0.184 n=71+72)
MutexWork-48                 299ns ± 5%     300ns ± 5%     ~     (p=0.678 n=73+75)
MutexWorkSlack-48            302ns ± 6%     300ns ± 5%     ~     (p=0.149 n=74+72)
MutexNoSpin-48               135ns ± 6%     135ns ±10%     ~     (p=0.788 n=67+75)
MutexSpin-48                 693ns ± 5%     689ns ± 6%     ~     (p=0.092 n=65+74)
Once-48                     0.22ns ±25%    0.22ns ±24%     ~     (p=0.882 n=74+73)
Pool-48                     5.88ns ±36%    5.79ns ±24%     ~     (p=0.655 n=69+69)
PoolOverflow-48             4.79µs ±18%    4.87µs ±20%     ~     (p=0.233 n=75+75)
SemaUncontended-48          0.80ns ± 1%    0.82ns ± 8%   +2.46%  (p=0.000 n=60+74)
SemaSyntNonblock-48          103ns ± 4%     102ns ± 5%   -1.11%  (p=0.003 n=75+75)
SemaSyntBlock-48             104ns ± 4%     104ns ± 5%     ~     (p=0.231 n=71+75)
SemaWorkNonblock-48          128ns ± 4%     129ns ± 6%   +1.51%  (p=0.000 n=63+75)
SemaWorkBlock-48             129ns ± 8%     130ns ± 7%     ~     (p=0.072 n=75+74)
RWMutexUncontended-48       2.35ns ± 1%    2.35ns ± 0%     ~     (p=0.144 n=70+55)
RWMutexWrite100-48           139ns ±18%     141ns ±21%     ~     (p=0.071 n=75+73)
RWMutexWrite10-48            145ns ± 9%     145ns ± 8%     ~     (p=0.553 n=75+75)
RWMutexWorkWrite100-48       297ns ±13%     297ns ±15%     ~     (p=0.519 n=75+74)
RWMutexWorkWrite10-48        588ns ± 7%     585ns ± 5%     ~     (p=0.173 n=73+70)
WaitGroupUncontended-48     0.87ns ± 0%    0.87ns ± 0%     ~     (all equal)
WaitGroupAddDone-48         63.2ns ± 4%    62.7ns ± 4%   -0.82%  (p=0.027 n=72+75)
WaitGroupAddDoneWork-48      109ns ± 5%     109ns ± 4%     ~     (p=0.233 n=75+75)
WaitGroupWait-48            0.17ns ± 0%    0.16ns ±16%   -8.55%  (p=0.000 n=56+75)
WaitGroupWaitWork-48        1.78ns ± 1%    2.08ns ± 5%  +16.92%  (p=0.000 n=74+70)
WaitGroupActuallyWait-48    52.0ns ± 3%    50.6ns ± 5%   -2.70%  (p=0.000 n=71+69)

https://perf.golang.org/search?q=upload:20170215.1

Change-Id: Ia29a8bd006c089e401ec4297c3038cca656bcd0a
Reviewed-on: https://go-review.googlesource.com/37103
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile/internal/gc: drop unused src.XPos params in SSA builder
Matthew Dempsky [Thu, 16 Feb 2017 03:51:05 +0000 (19:51 -0800)]
cmd/compile/internal/gc: drop unused src.XPos params in SSA builder

Passes toolstash -cmp.

Change-Id: I037278404ebf762482557e2b6867cbc595074a83
Reviewed-on: https://go-review.googlesource.com/37023
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agoruntime: run mutexevent profiling without holding semaRoot lock
Russ Cox [Mon, 13 Feb 2017 14:24:05 +0000 (09:24 -0500)]
runtime: run mutexevent profiling without holding semaRoot lock

Suggested by Dmitry in CL 36792 review.
Clearly safe since there are many different semaRoots
that could all have profiled sudogs calling mutexevent.

Change-Id: I45eed47a5be3e513b2dad63b60afcd94800e16d1
Reviewed-on: https://go-review.googlesource.com/37104
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
8 years agosync: deflake TestWaitGroupMisuse2
Russ Cox [Mon, 13 Feb 2017 15:17:52 +0000 (10:17 -0500)]
sync: deflake TestWaitGroupMisuse2

Also runs 100X faster on average, because it takes so many
fewer attempts to trigger the failure.

Fixes #11443.

Change-Id: I8c39ee48bb3ff6c36fa63083e04076771b65a80d
Reviewed-on: https://go-review.googlesource.com/36841
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
8 years agodoc: document go1.8
Chris Broadfoot [Thu, 16 Feb 2017 16:29:46 +0000 (08:29 -0800)]
doc: document go1.8

Change-Id: Ie2144d001c6b4b2293d07b2acf62d7e3cd0b46a7
Reviewed-on: https://go-review.googlesource.com/37130
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/link: delay calculating pe file parameters after Linkmode is set
Alex Brainman [Tue, 14 Feb 2017 01:01:01 +0000 (12:01 +1100)]
cmd/link: delay calculating pe file parameters after Linkmode is set

For #10776.

Change-Id: Id64a7e35c7cdcd9be16cbe3358402fa379090e36
Reviewed-on: https://go-review.googlesource.com/36975
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/link: set pe section and file alignment to 0 during external linking
Alex Brainman [Sun, 5 Feb 2017 03:19:19 +0000 (14:19 +1100)]
cmd/link: set pe section and file alignment to 0 during external linking

This is what gcc does when it generates object files.
And it is easier to count everything, when it starts from 0.
Make go linker do the same.

gcc also does not output IMAGE_OPTIONAL_HEADER or
PE64_IMAGE_OPTIONAL_HEADER for object files.
Perhaps we should do the same, but not in this CL.

For #10776.

Change-Id: I9789c337648623b6cfaa7d18d1ac9cef32e180dc
Reviewed-on: https://go-review.googlesource.com/36974
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agodebug/pe: add test to check dwarf info
Alex Brainman [Thu, 2 Feb 2017 07:37:59 +0000 (18:37 +1100)]
debug/pe: add test to check dwarf info

For #10776.

Change-Id: I7931558257c1f6b895e4d44b46d320a54de0d677
Reviewed-on: https://go-review.googlesource.com/36973
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile/internal/gc: skip useless loads for non-SSA params
Matthew Dempsky [Wed, 15 Feb 2017 21:12:53 +0000 (13:12 -0800)]
cmd/compile/internal/gc: skip useless loads for non-SSA params

Change-Id: I78ca43a0f0a6a162a2ade1352e2facb29432d4ac
Reviewed-on: https://go-review.googlesource.com/37102
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agocmd/compile/internal/gc: document (*state).checkgoto
Matthew Dempsky [Tue, 14 Feb 2017 18:28:40 +0000 (10:28 -0800)]
cmd/compile/internal/gc: document (*state).checkgoto

No behavior change.

Change-Id: I595c15ee976adf21bdbabdf24edf203c9e446185
Reviewed-on: https://go-review.googlesource.com/36958
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agointernal/poll: define PollDescriptor on plan9
Ian Lance Taylor [Wed, 15 Feb 2017 22:26:42 +0000 (14:26 -0800)]
internal/poll: define PollDescriptor on plan9

Fixes #19114.

Change-Id: I352add53d6ee8bf78792564225099f8537ac6b46
Reviewed-on: https://go-review.googlesource.com/37106
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: David du Colombier <0intro@gmail.com>
8 years agodoc: update Code of Conduct wording and scope
Sarah Adams [Tue, 14 Feb 2017 23:34:46 +0000 (15:34 -0800)]
doc: update Code of Conduct wording and scope

This change removes the punitive language and anonymous reporting mechanism
from the Code of Conduct document. Read on for the rationale.

More than a year has passed since the Go Code of Conduct was introduced.
In that time, there have been a small number (<30) of reports to the Working Group.
Some reports we handled well, with positive outcomes for all involved.
A few reports we handled badly, resulting in hurt feelings and a bad
experience for all involved.

On reflection, the reports that had positive outcomes were ones where the
Working Group took the role of advisor/facilitator, listening to complaints and
providing suggestions and advice to the parties involved.
The reports that had negative outcomes were ones where the subject of the
report felt threatened by the Working Group and Code of Conduct.

After some discussion among the Working Group, we saw that we are most
effective as facilitators, rather than disciplinarians. The various Go spaces
already have moderators; this change to the CoC acknowledges their authority
and places the group in a purely advisory role. If an incident is
reported to the group we may provide information to or make a
suggestion the moderators, but the Working Group need not (and should not) have
any authority to take disciplinary action.

In short, we want it to be clear that the Working Group are here to help
resolve conflict, period.

The second change made here is the removal of the anonymous reporting mechanism.
To date, the quality of anonymous reports has been low, and with no way to
reach out to the reporter for more information there is often very little we
can do in response. Removing this one-way reporting mechanism strengthens the
message that the Working Group are here to facilitate a constructive dialogue.

Change-Id: Iee52aff5446accd0dae0c937bb3aa89709ad5fb4
Reviewed-on: https://go-review.googlesource.com/37014
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoos: skip TestPipeThreads on Solaris
Ian Lance Taylor [Wed, 15 Feb 2017 20:36:24 +0000 (12:36 -0800)]
os: skip TestPipeThreads on Solaris

I don't know why it is not working.  Filed issue 19111 for this.

Fixes build.

Update #19111.

Change-Id: I76f8d6aafba5951da2f3ad7d10960419cca7dd1f
Reviewed-on: https://go-review.googlesource.com/37092
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoos: skip TestPipeThreads on Plan 9
Ian Lance Taylor [Wed, 15 Feb 2017 20:32:14 +0000 (12:32 -0800)]
os: skip TestPipeThreads on Plan 9

It can't work since Plan 9 does not support the runtime poller.

Fixes build.

Change-Id: I9ec33eb66019d9364c6ff6519b61b32e59498559
Reviewed-on: https://go-review.googlesource.com/37091
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoruntime: do not call wakep from enlistWorker, to avoid possible deadlock
Russ Cox [Wed, 15 Feb 2017 20:41:50 +0000 (15:41 -0500)]
runtime: do not call wakep from enlistWorker, to avoid possible deadlock

We have seen one instance of a production job suddenly spinning to
100% CPU and becoming unresponsive. In that one instance, a SIGQUIT
was sent after 328 minutes of spinning, and the stacks showed a single
goroutine in "IO wait (scan)" state.

Looking for things that might get stuck if a goroutine got stuck in
scanning a stack, we found that injectglist does:

lock(&sched.lock)
var n int
for n = 0; glist != nil; n++ {
gp := glist
glist = gp.schedlink.ptr()
casgstatus(gp, _Gwaiting, _Grunnable)
globrunqput(gp)
}
unlock(&sched.lock)

and that casgstatus spins on gp.atomicstatus until the _Gscan bit goes
away. Essentially, this code locks sched.lock and then while holding
sched.lock, waits to lock gp.atomicstatus.

The code that is doing the scan is:

if castogscanstatus(gp, s, s|_Gscan) {
if !gp.gcscandone {
scanstack(gp, gcw)
gp.gcscandone = true
}
restartg(gp)
break loop
}

More analysis showed that scanstack can, in a rare case, end up
calling back into code that acquires sched.lock. For example:

runtime.scanstack at proc.go:866
calls runtime.gentraceback at mgcmark.go:842
calls runtime.scanstack$1 at traceback.go:378
calls runtime.scanframeworker at mgcmark.go:819
calls runtime.scanblock at mgcmark.go:904
calls runtime.greyobject at mgcmark.go:1221
calls (*runtime.gcWork).put at mgcmark.go:1412
calls (*runtime.gcControllerState).enlistWorker at mgcwork.go:127
calls runtime.wakep at mgc.go:632
calls runtime.startm at proc.go:1779
acquires runtime.sched.lock at proc.go:1675

This path was found with an automated deadlock-detecting tool.
There are many such paths but they all go through enlistWorker -> wakep.

The evidence strongly suggests that one of these paths is what caused
the deadlock we observed. We're running those jobs with
GOTRACEBACK=crash now to try to get more information if it happens
again.

Further refinement and analysis shows that if we drop the wakep call
from enlistWorker, the remaining few deadlock cycles found by the tool
are all false positives caused by not understanding the effect of calls
to func variables.

The enlistWorker -> wakep call was intended only as a performance
optimization, it rarely executes, and if it does execute at just the
wrong time it can (and plausibly did) cause the deadlock we saw.

Comment it out, to avoid the potential deadlock.

Fixes #19112.
Unfixes #14179.

Change-Id: I6f7e10b890b991c11e79fab7aeefaf70b5d5a07b
Reviewed-on: https://go-review.googlesource.com/37093
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
8 years agoruntime/pprof: print newly added fields of runtime.MemStats
Hana Kim [Tue, 14 Feb 2017 21:11:35 +0000 (16:11 -0500)]
runtime/pprof: print newly added fields of runtime.MemStats

in heap profile with debug mode

Change-Id: I3a80d03a4aa556614626067a8fd698b3b00f4290
Reviewed-on: https://go-review.googlesource.com/36962
Reviewed-by: Austin Clements <austin@google.com>
8 years agocmd/compile/internal/ssa: display NamedValues in SSA html output.
Heschi Kreinick [Tue, 7 Feb 2017 20:49:43 +0000 (15:49 -0500)]
cmd/compile/internal/ssa: display NamedValues in SSA html output.

Change-Id: If268b42b32e6bcd6e7913bffa6e493dc78af40aa
Reviewed-on: https://go-review.googlesource.com/36539
TryBot-Result: Gobot Gobot <gobot@golang.org>
Run-TryBot: Heschi Kreinick <heschi@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/go: improve stale reason for packages
Lynn Boger [Tue, 14 Feb 2017 17:30:53 +0000 (12:30 -0500)]
cmd/go: improve stale reason for packages

This adds more information to the pkg stale reason for debugging
purposes.

Change-Id: I7b626db4520baa1127195ae859f4da9b49304636
Reviewed-on: https://go-review.googlesource.com/36944
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoos: use poller for file I/O
Ian Lance Taylor [Fri, 10 Feb 2017 23:17:38 +0000 (15:17 -0800)]
os: use poller for file I/O

This changes the os package to use the runtime poller for file I/O
where possible. When a system call blocks on a pollable descriptor,
the goroutine will be blocked on the poller but the thread will be
released to run other goroutines. When using a non-pollable
descriptor, the os package will continue to use thread-blocking system
calls as before.

For example, on GNU/Linux, the runtime poller uses epoll. epoll does
not support ordinary disk files, so they will continue to use blocking
I/O as before. The poller will be used for pipes.

Since this means that the poller is used for many more programs, this
modifies the runtime to only block waiting for the poller if there is
some goroutine that is waiting on the poller. Otherwise, there is no
point, as the poller will never make any goroutine ready. This
preserves the runtime's current simple deadlock detection.

This seems to crash FreeBSD systems, so it is disabled on FreeBSD.
This is issue 19093.

Using the poller on Windows requires opening the file with
FILE_FLAG_OVERLAPPED. We should only do that if we can remove that
flag if the program calls the Fd method. This is issue 19098.

Update #6817.
Update #7903.
Update #15021.
Update #18507.
Update #19093.
Update #19098.

Change-Id: Ia5197dcefa7c6fbcca97d19a6f8621b2abcbb1fe
Reviewed-on: https://go-review.googlesource.com/36800
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agointernal/poll: remove unused poll.pollDesc methods
Dave Cheney [Wed, 15 Feb 2017 08:22:45 +0000 (19:22 +1100)]
internal/poll: remove unused poll.pollDesc methods

Change-Id: Ic2b20c8238ff0ca5513d32e54ef2945fa4d0c3d2
Reviewed-on: https://go-review.googlesource.com/37033
Run-TryBot: Dave Cheney <dave@cheney.net>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agotesting: fix stats bug for sub benchmarks
Marcel van Lohuizen [Tue, 14 Feb 2017 12:01:18 +0000 (13:01 +0100)]
testing: fix stats bug for sub benchmarks

Fixes golang/go#18815.

Change-Id: Ic9d5cb640a555c58baedd597ed4ca5dd9f275c97
Reviewed-on: https://go-review.googlesource.com/36990
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile/internal/syntax: compiler directives must start at beginning of line
Robert Griesemer [Wed, 15 Feb 2017 05:34:19 +0000 (21:34 -0800)]
cmd/compile/internal/syntax: compiler directives must start at beginning of line

- ignore them, if they don't.
- added tests

Fixes #18393.

Change-Id: I13f87b81ac6b9138ab5031bb3dd6bebc4c548156
Reviewed-on: https://go-review.googlesource.com/37020
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agointernal/testenv: do not delete target file
Alex Brainman [Wed, 15 Feb 2017 01:47:51 +0000 (12:47 +1100)]
internal/testenv: do not delete target file

We did not create it. We should not delete it.

Change-Id: If98454ab233ce25367e11a7c68d31b49074537dd
Reviewed-on: https://go-review.googlesource.com/37030
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: fix position for "missing type in composite literal" error
Robert Griesemer [Wed, 15 Feb 2017 01:13:13 +0000 (17:13 -0800)]
cmd/compile: fix position for "missing type in composite literal" error

Fixes #18231.

Change-Id: If1615da4db0e6f0516369a1dc37340d80c78f237
Reviewed-on: https://go-review.googlesource.com/37018
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile/internal/syntax: establish principled position information
Robert Griesemer [Tue, 14 Feb 2017 00:00:53 +0000 (16:00 -0800)]
cmd/compile/internal/syntax: establish principled position information

Until now, the parser set the position for each Node to the position of
the first token belonging to that node. For compatibility with the now
defunct gc parser, in many places that position information was modified
when the gcCompat flag was set (which it was, by default). Furthermore,
in some places, position information was not set at all.

This change removes the gcCompat flag and all associated code, and sets
position information for all nodes in a more principled way, as proposed
by mdempsky (see #16943 for details). Specifically, the position of a
node may not be at the very beginning of the respective production. For
instance for an Operation `a + b`, the position associated with the node
is the position of the `+`. Thus, for `a + b + c` we now get different
positions for the two additions.

This change does not pass toolstash -cmp because position information
recorded in export data and pcline tables is different. There are no
other functional changes.

Added test suite testing the position of all nodes.

Fixes #16943.

Change-Id: I3fc02bf096bc3b3d7d2fa655dfd4714a1a0eb90c
Reviewed-on: https://go-review.googlesource.com/37017
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agomath/big: simplify bool expression
Daniel Martí [Tue, 14 Feb 2017 15:52:44 +0000 (15:52 +0000)]
math/big: simplify bool expression

Change-Id: I280c53be455f2fe0474ad577c0f7b7908a4eccb2
Reviewed-on: https://go-review.googlesource.com/36993
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoencoding/xml: fix incorrect indirect code in chardata, comment, innerxml fields
Russ Cox [Tue, 14 Feb 2017 05:17:50 +0000 (00:17 -0500)]
encoding/xml: fix incorrect indirect code in chardata, comment, innerxml fields

The new tests in this CL have been checked against Go 1.7 as well
and all pass in Go 1.7, with the one exception noted in a comment
(an intentional change to omitempty already present before this CL).

CL 15684 made the intentional change to omitempty.
This CL fixes bugs introduced along the way.

Most of these are corner cases that are arguably not that important,
but they've always worked all the way back to Go 1, and someone
cared enough to file #19063. The most significant problem found
while adding tests is that in the case of a nil *string field with
`xml:",chardata"`, the existing code silently stops processing not just
that field but the entire remainder of the struct.
Even if #19063 were not worth fixing, this chardata bug would be.

Fixes #19063.

Change-Id: I318cf8f9945e1a4615982d9904e109fde577ebf9
Reviewed-on: https://go-review.googlesource.com/36954
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agomime: add benchmarks for TypeByExtension and ExtensionsByType
Bryan C. Mills [Tue, 14 Feb 2017 22:06:57 +0000 (17:06 -0500)]
mime: add benchmarks for TypeByExtension and ExtensionsByType

These are possible use-cases for sync.Map.

Updates golang/go#18177

Change-Id: I5e2a3d1249967c37d3f89a41122bf4a90522db11
Reviewed-on: https://go-review.googlesource.com/36964
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile/internal/ssa: combine 2 byte loads + shifts into word load + rolw 8 on...
Kirill Smelkov [Thu, 1 Dec 2016 20:43:21 +0000 (23:43 +0300)]
cmd/compile/internal/ssa: combine 2 byte loads + shifts into word load + rolw 8 on AMD64

... and same for stores. This does for binary.BigEndian.Uint16() what
was already done for Uint32 and Uint64 with BSWAP in 10f75748 (CL 32222).

Here is how generated code changes e.g. for the following function
(omitting saying the same prologue/epilogue):

func get16(b [2]byte) uint16 {
return binary.BigEndian.Uint16(b[:])
}

"".get16 t=1 size=21 args=0x10 locals=0x0

// before
        0x0000 00000 (x.go:15)  MOVBLZX "".b+9(FP), AX
        0x0005 00005 (x.go:15)  MOVBLZX "".b+8(FP), CX
        0x000a 00010 (x.go:15)  SHLL    $8, CX
        0x000d 00013 (x.go:15)  ORL     CX, AX

// after
0x0000 00000 (x.go:15) MOVWLZX "".b+8(FP), AX
0x0005 00005 (x.go:15) ROLW $8, AX

encoding/binary is speedup overall a bit:

name                    old time/op    new time/op    delta
ReadSlice1000Int32s-4     4.83µs ± 0%    4.83µs ± 0%     ~     (p=0.206 n=4+5)
ReadStruct-4              1.29µs ± 2%    1.28µs ± 1%   -1.27%  (p=0.032 n=4+5)
ReadInts-4                 384ns ± 1%     385ns ± 1%     ~     (p=0.968 n=4+5)
WriteInts-4                534ns ± 3%     526ns ± 0%   -1.54%  (p=0.048 n=4+5)
WriteSlice1000Int32s-4    5.02µs ± 0%    5.11µs ± 3%     ~     (p=0.175 n=4+5)
PutUint16-4               0.59ns ± 0%    0.49ns ± 2%  -16.95%  (p=0.016 n=4+5)
PutUint32-4               0.52ns ± 0%    0.52ns ± 0%     ~     (all equal)
PutUint64-4               0.53ns ± 0%    0.53ns ± 0%     ~     (all equal)
PutUvarint32-4            19.9ns ± 0%    19.9ns ± 1%     ~     (p=0.556 n=4+5)
PutUvarint64-4            54.5ns ± 1%    54.2ns ± 0%     ~     (p=0.333 n=4+5)

name                    old speed      new speed      delta
ReadSlice1000Int32s-4    829MB/s ± 0%   828MB/s ± 0%     ~     (p=0.190 n=4+5)
ReadStruct-4            58.0MB/s ± 2%  58.7MB/s ± 1%   +1.30%  (p=0.032 n=4+5)
ReadInts-4              78.0MB/s ± 1%  77.8MB/s ± 1%     ~     (p=0.968 n=4+5)
WriteInts-4             56.1MB/s ± 3%  57.0MB/s ± 0%     ~     (p=0.063 n=4+5)
WriteSlice1000Int32s-4   797MB/s ± 0%   783MB/s ± 3%     ~     (p=0.190 n=4+5)
PutUint16-4             3.37GB/s ± 0%  4.07GB/s ± 2%  +20.83%  (p=0.016 n=4+5)
PutUint32-4             7.73GB/s ± 0%  7.72GB/s ± 0%     ~     (p=0.556 n=4+5)
PutUint64-4             15.1GB/s ± 0%  15.1GB/s ± 0%     ~     (p=0.905 n=4+5)
PutUvarint32-4           201MB/s ± 0%   201MB/s ± 0%     ~     (p=0.905 n=4+5)
PutUvarint64-4           147MB/s ± 1%   147MB/s ± 0%     ~     (p=0.286 n=4+5)

( "a bit" only because most of the time is spent in reflection-like things
  there, not actual bytes decoding. Even for direct PutUint16 benchmark the
  looping adds overhead and lowers visible benefit. For code-generated encoders /
  decoders actual effect is more than 20% )

Adding Uint32 and Uint64 raw benchmarks too for completeness.

NOTE I had to adjust load-combining rule for bswap case to match first 2 bytes
loads as result of "2-bytes load+shift" -> "loadw + rorw 8" rewrite. Reason is:
for loads+shift, even e.g. into uint16 var

var b []byte
var v uin16
v = uint16(b[1]) | uint16(b[0])<<8

the compiler eventually generates L(ong) shift - SHLLconst [8], probably
because it is more straightforward / other reasons to work on the whole
register. This way 2 bytes rewriting rule is using SHLLconst (not SHLWconst) in
its pattern, and then it always gets matched first, even if 2-byte rule comes
syntactically after 4-byte rule in AMD64.rules because 4-bytes rule seemingly
needs more applyRewrite() cycles to trigger. If 2-bytes rule gets matched for
inner half of

var b []byte
var v uin32
v = uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24

and we keep 4-byte load rule unchanged, the result will be MOVW + RORW $8 and
then series of byte loads and shifts - not one MOVL + BSWAPL.

There is no such problem for stores: there compiler, since it probably knows
store destination is 2 bytes wide, uses SHRWconst 8 (not SHRLconst 8) and thus
2-byte store rule is not a subset of rule for 4-byte stores.

Fixes #17151  (int16 was last missing piece there)

Change-Id: Idc03ba965bfce2b94fef456b02ff6742194748f6
Reviewed-on: https://go-review.googlesource.com/34636
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoexpvar: add benchmarks for steady-state Map Add calls
Bryan C. Mills [Tue, 14 Feb 2017 06:00:49 +0000 (01:00 -0500)]
expvar: add benchmarks for steady-state Map Add calls

Add a benchmark for setting a String value, which we may
want to treat differently from Int or Float due to the need to support
Add methods for the latter.

Update tests to use only the exported API instead of making (fragile)
assumptions about unexported fields.

The existing Map benchmarks construct a new Map for each iteration, which
focuses the benchmark results on the initial allocation costs for the
Map and its entries. This change adds variants of the benchmarks which
use a long-lived map in order to measure steady-state performance for
Map updates on existing keys.

Updates #18177

Change-Id: I62c920991d17d5898c592446af382cd5c04c528a
Reviewed-on: https://go-review.googlesource.com/36959
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agomath/big: fix s390x test build tags
Michael Munday [Tue, 14 Feb 2017 17:46:37 +0000 (12:46 -0500)]
math/big: fix s390x test build tags

The tests failed to compile when using the math_big_pure_go tag on
s390x.

Change-Id: I2a09f53ff6562ab9bc9b886cffc0f6205bbfcfbb
Reviewed-on: https://go-review.googlesource.com/36956
Run-TryBot: Michael Munday <munday@ca.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: undo special handling of zero-valued STRUCTLIT
Cherry Zhang [Tue, 14 Feb 2017 16:01:04 +0000 (11:01 -0500)]
cmd/compile: undo special handling of zero-valued STRUCTLIT

CL 35261 introduces special handling of zero-valued STRUCTLIT for
efficient struct zeroing. But it didn't cover all use cases, for
example, CONVNOP STRUCTLIT is not handled.

On the other hand, CL 34566 handles zeroing earlier, so we don't
need the change in CL 35261 for efficient zeroing. Other uses of
zero-valued struct literals are very rare. So undo the change in
walk.go in CL 35261.

Add a test for efficient zeroing.

Fixes #19084.

Change-Id: I0807f7423fb44d47bf325b3c1ce9611a14953853
Reviewed-on: https://go-review.googlesource.com/36955
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agocmd/compile/internal/ssa: generate bswap/store for indexed bigendian byte stores...
Kirill Smelkov [Thu, 1 Dec 2016 19:13:16 +0000 (22:13 +0300)]
cmd/compile/internal/ssa: generate bswap/store for indexed bigendian byte stores too on AMD64

Commit 10f75748 (CL 32222) added rewrite rules to combine byte loads/stores +
shifts into larger loads/stores + bswap. For loads both MOVBload and
MOVBloadidx1 were handled but for store only MOVBstore was there without
MOVBstoreidx added to rewrite pattern. Fix it.

Here is how generated code changes for the following 2 functions
(ommitting staying the same prologue/epilogue):

    func put32(b []byte, i int, v uint32) {
            binary.BigEndian.PutUint32(b[i:], v)
    }

    func put64(b []byte, i int, v uint64) {
            binary.BigEndian.PutUint64(b[i:], v)
    }

"".put32 t=1 size=100 args=0x28 locals=0x0

// before
0x0032 00050 (x.go:5) MOVL CX, DX
0x0034 00052 (x.go:5) SHRL $24, CX
0x0037 00055 (x.go:5) MOVQ "".b+8(FP), BX
0x003c 00060 (x.go:5) MOVB CL, (BX)(AX*1)
0x003f 00063 (x.go:5) MOVL DX, CX
0x0041 00065 (x.go:5) SHRL $16, DX
0x0044 00068 (x.go:5) MOVB DL, 1(BX)(AX*1)
0x0048 00072 (x.go:5) MOVL CX, DX
0x004a 00074 (x.go:5) SHRL $8, CX
0x004d 00077 (x.go:5) MOVB CL, 2(BX)(AX*1)
0x0051 00081 (x.go:5) MOVB DL, 3(BX)(AX*1)

// after
0x0032 00050 (x.go:5) BSWAPL CX
0x0034 00052 (x.go:5) MOVQ "".b+8(FP), DX
0x0039 00057 (x.go:5) MOVL CX, (DX)(AX*1)

"".put64 t=1 size=155 args=0x28 locals=0x0

// before
0x0037 00055 (x.go:9) MOVQ CX, DX
0x003a 00058 (x.go:9) SHRQ $56, CX
0x003e 00062 (x.go:9) MOVQ "".b+8(FP), BX
0x0043 00067 (x.go:9) MOVB CL, (BX)(AX*1)
0x0046 00070 (x.go:9) MOVQ DX, CX
0x0049 00073 (x.go:9) SHRQ $48, DX
0x004d 00077 (x.go:9) MOVB DL, 1(BX)(AX*1)
0x0051 00081 (x.go:9) MOVQ CX, DX
0x0054 00084 (x.go:9) SHRQ $40, CX
0x0058 00088 (x.go:9) MOVB CL, 2(BX)(AX*1)
0x005c 00092 (x.go:9) MOVQ DX, CX
0x005f 00095 (x.go:9) SHRQ $32, DX
0x0063 00099 (x.go:9) MOVB DL, 3(BX)(AX*1)
0x0067 00103 (x.go:9) MOVQ CX, DX
0x006a 00106 (x.go:9) SHRQ $24, CX
0x006e 00110 (x.go:9) MOVB CL, 4(BX)(AX*1)
0x0072 00114 (x.go:9) MOVQ DX, CX
0x0075 00117 (x.go:9) SHRQ $16, DX
0x0079 00121 (x.go:9) MOVB DL, 5(BX)(AX*1)
0x007d 00125 (x.go:9) MOVQ CX, DX
0x0080 00128 (x.go:9) SHRQ $8, CX
0x0084 00132 (x.go:9) MOVB CL, 6(BX)(AX*1)
0x0088 00136 (x.go:9) MOVB DL, 7(BX)(AX*1)

// after
0x0033 00051 (x.go:9) BSWAPQ CX
0x0036 00054 (x.go:9) MOVQ "".b+8(FP), DX
0x003b 00059 (x.go:9) MOVQ CX, (DX)(AX*1)

Updates #17151

Change-Id: I3f4a7f28f210e62e153e60da5abd1d39508cc6c4
Reviewed-on: https://go-review.googlesource.com/34635
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
8 years agonet/http: document ErrServerClosed
Kale Blankenship [Tue, 14 Feb 2017 16:11:07 +0000 (08:11 -0800)]
net/http: document ErrServerClosed

Fixes #19085

Change-Id: Ib11b9a22ea8092aca9e1c9c36b1fb015dd555c4b
Reviewed-on: https://go-review.googlesource.com/36943
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoruntime: remove g.stackAlloc
Austin Clements [Thu, 9 Feb 2017 19:11:13 +0000 (14:11 -0500)]
runtime: remove g.stackAlloc

Since we're no longer stealing space for the stack barrier array from
the stack allocation, the stack allocation is simply
g.stack.hi-g.stack.lo.

Updates #17503.

Change-Id: Id9b450ae12c3df9ec59cfc4365481a0a16b7c601
Reviewed-on: https://go-review.googlesource.com/36621
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agoruntime: remove stack barriers
Austin Clements [Thu, 9 Feb 2017 19:03:49 +0000 (14:03 -0500)]
runtime: remove stack barriers

Now that we don't rescan stacks, stack barriers are unnecessary. This
removes all of the code and structures supporting them as well as
tests that were specifically for stack barriers.

Updates #17503.

Change-Id: Ia29221730e0f2bbe7beab4fa757f31a032d9690c
Reviewed-on: https://go-review.googlesource.com/36620
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoruntime: remove rescan list
Austin Clements [Thu, 9 Feb 2017 16:50:26 +0000 (11:50 -0500)]
runtime: remove rescan list

With the hybrid barrier, rescanning stacks is no longer necessary so
the rescan list is no longer necessary. Remove it.

This leaves the gcrescanstacks GODEBUG variable, since it's useful for
debugging, but changes it to simply walk all of the Gs to rescan
stacks rather than using the rescan list.

We could also remove g.gcscanvalid, which is effectively a distributed
rescan list. However, it's still useful for gcrescanstacks mode and it
adds little complexity, so we'll leave it in.

Fixes #17099.
Updates #17503.

Change-Id: I776d43f0729567335ef1bfd145b75c74de2cc7a9
Reviewed-on: https://go-review.googlesource.com/36619
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agoruntime: remove unused debug.wbshadow
Austin Clements [Thu, 9 Feb 2017 16:36:25 +0000 (11:36 -0500)]
runtime: remove unused debug.wbshadow

The wbshadow implementation was removed a year and a half ago in
1635ab7dfe, but the GODEBUG setting remained. Remove the GODEBUG
setting since it doesn't do anything.

Change-Id: I19cde324a79472aff60acb5cc9f7d4aa86c0c0ed
Reviewed-on: https://go-review.googlesource.com/36618
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
8 years agonet/http: handle absolute paths in mapDirOpenError
Nathan Caza [Sat, 11 Feb 2017 03:09:21 +0000 (21:09 -0600)]
net/http: handle absolute paths in mapDirOpenError

The current implementation does not account for Dir being
initialized with an absolute path on systems that start
paths with filepath.Separator. In this scenario, the
original error is returned, and not checked for file
segments.

This change adds a test for this case, and corrects the
behavior by ignoring blank path segments in the loop.

Refs #18984

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

8 years agoruntime: fix some assembly offset names
Josh Bleecher Snyder [Mon, 13 Feb 2017 17:06:08 +0000 (09:06 -0800)]
runtime: fix some assembly offset names

For vet. There are more. This is a start.

Change-Id: Ibbbb2b20b5db60ee3fac4a1b5913d18fab01f6b9
Reviewed-on: https://go-review.googlesource.com/36939
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoall: fix some printf format strings
Josh Bleecher Snyder [Mon, 13 Feb 2017 06:56:50 +0000 (22:56 -0800)]
all: fix some printf format strings

Appease vet.

Change-Id: Ie88de08b91041990c0eaf2e15628cdb98d40c660
Reviewed-on: https://go-review.googlesource.com/36938
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoall: use keyed composite literals
Josh Bleecher Snyder [Mon, 13 Feb 2017 06:56:28 +0000 (22:56 -0800)]
all: use keyed composite literals

Makes vet happy.

Change-Id: I7250f283c96e82b9796c5672a0a143ba7568fa63
Reviewed-on: https://go-review.googlesource.com/36937
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agointernal/poll: only build str.go on plan9
Dave Cheney [Tue, 14 Feb 2017 01:51:50 +0000 (12:51 +1100)]
internal/poll: only build str.go on plan9

Alternatively the contents of str.go could be moved into fd_io_plan9.go

Change-Id: I9d7ec85bbb376f4244eeca732f25c0b77cadc6a6
Reviewed-on: https://go-review.googlesource.com/36971
Run-TryBot: Dave Cheney <dave@cheney.net>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agointernal/poll: remove named return values and naked returns
Dave Cheney [Mon, 13 Feb 2017 22:18:12 +0000 (09:18 +1100)]
internal/poll: remove named return values and naked returns

Change-Id: I283f4453e5cf8b22995b3abffccae182cfbb6945
Reviewed-on: https://go-review.googlesource.com/36970
Reviewed-by: Dave Cheney <dave@cheney.net>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Dave Cheney <dave@cheney.net>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agotime: add Duration.Truncate and Duration.Round
Caleb Spare [Thu, 9 Feb 2017 03:47:23 +0000 (19:47 -0800)]
time: add Duration.Truncate and Duration.Round

Fixes #18996

Change-Id: I0b0f7270960b368ce97ad4456f60bcc1fc2a8313
Reviewed-on: https://go-review.googlesource.com/36615
Run-TryBot: Caleb Spare <cespare@gmail.com>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime: speed up fastrand() % n
Josh Bleecher Snyder [Mon, 13 Feb 2017 20:46:17 +0000 (12:46 -0800)]
runtime: speed up fastrand() % n

This occurs a fair amount in the runtime for non-power-of-two n.
Use an alternative, faster formulation.

name           old time/op  new time/op  delta
Fastrandn/2-8  4.45ns ± 2%  2.09ns ± 3%  -53.12%  (p=0.000 n=14+14)
Fastrandn/3-8  4.78ns ±11%  2.06ns ± 2%  -56.94%  (p=0.000 n=15+15)
Fastrandn/4-8  4.76ns ± 9%  1.99ns ± 3%  -58.28%  (p=0.000 n=15+13)
Fastrandn/5-8  4.96ns ±13%  2.03ns ± 6%  -59.14%  (p=0.000 n=15+15)

name                    old time/op  new time/op  delta
SelectUncontended-8     33.7ns ± 2%  33.9ns ± 2%  +0.70%  (p=0.000 n=49+50)
SelectSyncContended-8   1.68µs ± 4%  1.65µs ± 4%  -1.54%  (p=0.000 n=50+45)
SelectAsyncContended-8   282ns ± 1%   277ns ± 1%  -1.50%  (p=0.000 n=48+43)
SelectNonblock-8        5.31ns ± 1%  5.32ns ± 1%    ~     (p=0.275 n=45+44)
SelectProdCons-8         585ns ± 3%   577ns ± 2%  -1.35%  (p=0.000 n=50+50)
GoroutineSelect-8       1.59ms ± 2%  1.59ms ± 1%    ~     (p=0.084 n=49+48)

Updates #16213

Change-Id: Ib555a4d7da2042a25c3976f76a436b536487d5b7
Reviewed-on: https://go-review.googlesource.com/36932
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agointernal/poll: return error if WriteConsole fails
Ian Lance Taylor [Mon, 13 Feb 2017 23:33:03 +0000 (15:33 -0800)]
internal/poll: return error if WriteConsole fails

Fixes #19068.

Change-Id: Id76037826376b5fe8b588fe3dc02182dfaff8c21
Reviewed-on: https://go-review.googlesource.com/36935
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoruntime: if runtime is stale while testing, show StaleReason
Ian Lance Taylor [Mon, 13 Feb 2017 23:30:42 +0000 (15:30 -0800)]
runtime: if runtime is stale while testing, show StaleReason

Update #19062.

Change-Id: I7397b573389145b56e73d2150ce0fc9aa75b3caa
Reviewed-on: https://go-review.googlesource.com/36934
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile/internal/syntax: generalize error about var decls in init clauses
Robert Griesemer [Mon, 13 Feb 2017 23:08:04 +0000 (15:08 -0800)]
cmd/compile/internal/syntax: generalize error about var decls in init clauses

Change-Id: I62f9748b97bec245338ebf9686fbf6ad6dc6a9c2
Reviewed-on: https://go-review.googlesource.com/36931
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile/internal/syntax: better error for malformed 'if' statements
Robert Griesemer [Mon, 13 Feb 2017 20:48:39 +0000 (12:48 -0800)]
cmd/compile/internal/syntax: better error for malformed 'if' statements

Use distinction between explicit and automatically inserted semicolons
to provide a better error message if the condition in an 'if' statement
is missing.

For #18747.

Change-Id: Iac167ae4e5ad53d2dc73f746b4dee9912434bb59
Reviewed-on: https://go-review.googlesource.com/36930
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/internal/obj: add AddrName type and cleanup AddrType values
Matthew Dempsky [Mon, 13 Feb 2017 21:34:30 +0000 (13:34 -0800)]
cmd/internal/obj: add AddrName type and cleanup AddrType values

Passes toolstash -cmp.

Change-Id: Ida3eda9bd9d79a34c1c3f18cb41aea9392698076
Reviewed-on: https://go-review.googlesource.com/36950
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
8 years agocmd/compile: Show arch/os when something in TestAssembly fails
Kirill Smelkov [Mon, 13 Feb 2017 19:28:26 +0000 (22:28 +0300)]
cmd/compile: Show arch/os when something in TestAssembly fails

It is not always obvious from the first glance when looking at
TestAssembly failure in which context the code was generated. For
example x86 and x86-64 are similar, and those of us who do not work with
assembly every day can even take s390x version as something similar to x86.

So when something fails lets print the whole test context - this
includes os and arch which were previously missing. An example failure:

before:

--- FAIL: TestAssembly (40.48s)
        asm_test.go:46: expected:       MOVWZ   \(.*\),
                go:
                import "encoding/binary"
                func f(b []byte) uint32 {
                        return binary.LittleEndian.Uint32(b)
                }

                asm:"".f t=1 size=160 args=0x20 locals=0x0
...

after:

--- FAIL: TestAssembly (40.43s)
        asm_test.go:46: linux/s390x: expected:  MOVWZ   \(.*\),
                go:
                import "encoding/binary"
                func f(b []byte) uint32 {
                        return binary.LittleEndian.Uint32(b)
                }

                asm:"".f t=1 size=160 args=0x20 locals=0x0

Motivated-by: #18946#issuecomment-279491071
Change-Id: I61089ceec05da7a165718a7d69dec4227dd0e993
Reviewed-on: https://go-review.googlesource.com/36881
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/go: add "syscall" to the set of packages that run extFiles++
Sameer Ajmani [Mon, 13 Feb 2017 19:59:45 +0000 (14:59 -0500)]
cmd/go: add "syscall" to the set of packages that run extFiles++

This eliminates the need for syscall/asm.s, which is now empty.

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

8 years agoruntime: make fastrand to generate 32bit values
Sokolov Yura [Sun, 12 Feb 2017 10:18:22 +0000 (13:18 +0300)]
runtime: make fastrand to generate 32bit values

Extend period of fastrand from (1<<31)-1 to (1<<32)-1 by
choosing other polynom and reacting on high bit before shift.

Polynomial is taken at https://users.ece.cmu.edu/~koopman/lfsr/index.html
from 32.dat.gz . It is referred as F7711115 cause this list of
polynomials is for LFSR with shift to right (and fastrand uses shift to
left). (old polynomial is referred in 31.dat.gz as 7BB88888).

There were couple of places with conversation of fastrand to int, which
leads to negative values on 32bit platforms. They are fixed.

Change-Id: Ibee518a3f9103e0aea220ada494b3aec77babb72
Reviewed-on: https://go-review.googlesource.com/36875
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Minux Ma <minux@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agonet/http: document Response.Header values that are subordinate to other fields
Sameer Ajmani [Mon, 13 Feb 2017 19:40:48 +0000 (14:40 -0500)]
net/http: document Response.Header values that are subordinate to other fields

I noticed that Content-Length may appear in http.Response.Header, but the docs
say it should be omitted.  Per discussion with bradfitz@, updating the docs to
indicate that the struct fields are authoritative.

Change-Id: Id1807ff9d4ba5de425d8b147205f29b18351230f
Reviewed-on: https://go-review.googlesource.com/36842
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: fix s390x load-combining rules
Michael Munday [Mon, 13 Feb 2017 19:39:58 +0000 (14:39 -0500)]
cmd/compile: fix s390x load-combining rules

MOVD{reg,nop} operations (added in CL 36256) inserted to preserve
type information were blocking the load-combining rules. Fix this
by merging type changes into loads wherever possible.

Fixes #19059.

Change-Id: I8a1df06eb0f231b40ae43107d4a3bd0b9c441b59
Reviewed-on: https://go-review.googlesource.com/36843
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime: if runtime is stale while testing, show cmd/go output
Ian Lance Taylor [Mon, 13 Feb 2017 19:46:48 +0000 (11:46 -0800)]
runtime: if runtime is stale while testing, show cmd/go output

Update #19062.

Change-Id: If6a4c4f8d12e148b162256f13a8ee423f6e30637
Reviewed-on: https://go-review.googlesource.com/36918
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agosyscall: delete the "use" function and calls in non-generated files.
Sameer Ajmani [Fri, 10 Feb 2017 14:22:35 +0000 (09:22 -0500)]
syscall: delete the "use" function and calls in non-generated files.

Delete use stub from asm.s, leaving only a dummy file.
Deleting the file causes Windows build to fail.

Fixes #16607

Change-Id: Ic5a55e042e588f1e1bc6605a3d309d1eabdeb288
Reviewed-on: https://go-review.googlesource.com/36716
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/go: respect group sticky bit on install.
Chris Manghane [Fri, 10 Feb 2017 22:36:59 +0000 (14:36 -0800)]
cmd/go: respect group sticky bit on install.

When installing a package to a different directory using `go build`,
`mv` cannot be used if the destination directory has the group sticky
bit set.  Instead, `cp` should be used to make sure the destination
file has the correct permissions.

Fixes golang/go#18878.

Change-Id: I5423f559e7f84df080ed47816e19a22c6d00ab6d
Reviewed-on: https://go-review.googlesource.com/36797
Run-TryBot: Chris Manghane <cmang@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agonet: use internal/poll for DragonFly setKeepAlivePeriod
Ian Lance Taylor [Mon, 13 Feb 2017 19:08:21 +0000 (11:08 -0800)]
net: use internal/poll for DragonFly setKeepAlivePeriod

Fixes DragonFly build.

Change-Id: Id6b439cd4023ea8e3ed7cd9b70eec553c9eee4be
Reviewed-on: https://go-review.googlesource.com/36916
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agointernal/poll: only export FD.eofError for testing on posix systems
Ian Lance Taylor [Mon, 13 Feb 2017 18:57:07 +0000 (10:57 -0800)]
internal/poll: only export FD.eofError for testing on posix systems

Fixes build on plan9.

Change-Id: Idbb1e6887c24a873de77c92095198847ed953278
Reviewed-on: https://go-review.googlesource.com/36915
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agodatabase/sql: convert test timeouts to explicit waits with checks
Daniel Theophanes [Sun, 12 Feb 2017 23:12:52 +0000 (15:12 -0800)]
database/sql: convert test timeouts to explicit waits with checks

When testing context cancelation behavior do not rely on context
timeouts. Use explicit checks in all such tests. In closeDB
convert the simple check for zero open conns with a wait loop
for zero open conns.

Fixes #19024
Fixes #19041

Change-Id: Iecfcc4467e91249fceb21ffd1f7c62c58140d8e9
Reviewed-on: https://go-review.googlesource.com/36902
Run-TryBot: Daniel Theophanes <kardianos@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agonet: refactor poller into new internal/poll package
Ian Lance Taylor [Fri, 10 Feb 2017 22:59:38 +0000 (14:59 -0800)]
net: refactor poller into new internal/poll package

This will make it possible to use the poller with the os package.

This is a lot of code movement but the behavior is intended to be
unchanged.

Update #6817.
Update #7903.
Update #15021.
Update #18507.

Change-Id: I1413685928017c32df5654ded73a2643820977ae
Reviewed-on: https://go-review.googlesource.com/36799
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocmd/compile: fix load-combining rules
Keith Randall [Mon, 13 Feb 2017 17:37:06 +0000 (09:37 -0800)]
cmd/compile: fix load-combining rules

CL 33632 reorders args of commutative ops in order to make
CSE for commutative ops more robust.  Unfortunately, that
broke the load-combining rules which depend on a certain ordering
of OR ops' arguments.

Introduce some additional rules that order OR ops' arguments
consistently so that the load-combining rules fire.

Note: there's also something else wrong with the s390x rules.
I've filed #19059 for that.

Fixes #18946

Change-Id: I0a5447196bd88a55ccee683c69a57b943a9972e1
Reviewed-on: https://go-review.googlesource.com/36911
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
8 years agocmd/trace: document the final step to use pprof-like profiles
Jaana Burcu Dogan [Sat, 11 Feb 2017 01:23:55 +0000 (17:23 -0800)]
cmd/trace: document the final step to use pprof-like profiles

The tutorial ends without mentioning how to use the generated
pprof-like profile with the pprof tool. This may be very trivial
for users who are already very familiar with the Go tools, but
for the newcomers, it saves a lot of time to finalize the tutorial
with an example of `go tool pprof` invocation.

Change-Id: Idf034eb4bfb9672ef10190e66fcbf873e8f08f6a
Reviewed-on: https://go-review.googlesource.com/36803
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
8 years agocmd/compile: cull some dead arch-specific Ops
Josh Bleecher Snyder [Mon, 13 Feb 2017 05:11:16 +0000 (21:11 -0800)]
cmd/compile: cull some dead arch-specific Ops

Change-Id: Iee7daa5b91b7896ce857321e307f2ee47b7f095f
Reviewed-on: https://go-review.googlesource.com/36906
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile: optimize non-empty-interface type conversions
Keith Randall [Wed, 4 Jan 2017 00:15:38 +0000 (16:15 -0800)]
cmd/compile: optimize non-empty-interface type conversions

When doing i.(T) for non-empty-interface i and concrete type T,
there's no need to read the type out of the itab. Just compare the
itab to the itab we expect for that interface/type pair.

Also optimize type switches by putting the type hash of the
concrete type in the itab. That way we don't need to load the
type pointer out of the itab.

Update #18492

Change-Id: I49e280a21e5687e771db5b8a56b685291ac168ce
Reviewed-on: https://go-review.googlesource.com/34810
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: David Chase <drchase@google.com>
8 years agocmd/compile/internal/parser: don't crash after unexpected token
Robert Griesemer [Mon, 13 Feb 2017 17:22:46 +0000 (09:22 -0800)]
cmd/compile/internal/parser: don't crash after unexpected token

Added missing nil-check. We will get rid of the gcCompat corrections
shortly but it's still worthwhile having the new test case added.

Fixes #19056.

Change-Id: I35bd938a4d789058da15724e34c05e5e631ecad0
Reviewed-on: https://go-review.googlesource.com/36908
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agoruntime: add Frames example
Josh Bleecher Snyder [Sat, 11 Feb 2017 22:56:16 +0000 (14:56 -0800)]
runtime: add Frames example

Based on sample code from iant.

Fixes #18788.

Change-Id: I6bb33ed05af2538fbde42ddcac629280ef7c00a6
Reviewed-on: https://go-review.googlesource.com/36892
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agonet: use bytes.Equal instead of bytesEqual
Erik Dubbelboer [Thu, 9 Feb 2017 04:54:25 +0000 (12:54 +0800)]
net: use bytes.Equal instead of bytesEqual

bytes.Equal is written in assembly and is slightly faster than the
current Go bytesEqual from the net package.

benchcmp:
benchmark                 old ns/op     new ns/op     delta
BenchmarkIPCompare4-8     7.74          7.01          -9.43%
BenchmarkIPCompare6-8     8.47          6.86          -19.01%

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

8 years agopath/filepath: add test for directory junction walk
Alex Brainman [Sun, 12 Feb 2017 07:23:34 +0000 (18:23 +1100)]
path/filepath: add test for directory junction walk

For #10424.

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

8 years agoruntime: use two-level list for semaphore address search in semaRoot
Russ Cox [Fri, 10 Feb 2017 19:45:41 +0000 (14:45 -0500)]
runtime: use two-level list for semaphore address search in semaRoot

If there are many goroutines contending for two different locks
and both locks hash to the same semaRoot, the scans to find the
goroutines for a particular lock can end up being O(n), making
n lock acquisitions quadratic.

As long as only one actively-used lock hashes to each semaRoot
there's no problem, since the list operations in that case are O(1).
But when the second actively-used lock hits the same semaRoot,
then scans for entries with for a given lock have to scan over the
entries for the other lock.

Fix this problem by changing the semaRoot to hold only one sudog
per unique address. In the running example, this drops the length of
that list from O(n) to 2. Then attach other goroutines waiting on the
same address to a separate list headed by the sudog in the semaRoot list.
Those "same address list" operations are still O(1), so now the
example from above works much better.

There is still an assumption here that in real programs you don't have
many many goroutines queueing up on many many distinct addresses.
If we end up with that problem, we can replace the top-level list with
a treap.

Fixes #17953.

Change-Id: I78c5b1a5053845275ab31686038aa4f6db5720b2
Reviewed-on: https://go-review.googlesource.com/36792
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agoimage/png: reduce memory allocs encoding images by reusing buffers
Cezar Sa Espinola [Thu, 8 Dec 2016 00:45:06 +0000 (22:45 -0200)]
image/png: reduce memory allocs encoding images by reusing buffers

This change allows greatly reducing memory allocations with a slightly
performance improvement as well.

Instances of (*png).Encoder can have a optional BufferPool attached to
them. This allows reusing temporary buffers used when encoding a new
image. This buffers include instances to zlib.Writer and bufio.Writer.

Also, buffers for current and previous rows are saved in the encoder
instance and reused as long as their cap() is enough to fit the current
image row.

A new benchmark was added to demonstrate the performance improvement
when setting a BufferPool to an Encoder instance:

$ go test -bench BenchmarkEncodeGray -benchmem
BenchmarkEncodeGray-4                      1000    2349584 ns/op  130.75 MB/s   852230 B/op       32 allocs/op
BenchmarkEncodeGrayWithBufferPool-4        1000    2241650 ns/op  137.04 MB/s      900 B/op        3 allocs/op

Change-Id: I4488201ae53cb2ad010c68c1e0118ee12beae14e
Reviewed-on: https://go-review.googlesource.com/34150
Reviewed-by: Nigel Tao <nigeltao@golang.org>
Run-TryBot: Nigel Tao <nigeltao@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/internal/obj/x86: add comments to wrapper prologue insertion
Josh Bleecher Snyder [Fri, 10 Feb 2017 22:56:05 +0000 (14:56 -0800)]
cmd/internal/obj/x86: add comments to wrapper prologue insertion

Make the comments a bit clearer and more accurate,
in anticipation of updating the code.

Change-Id: I1111e6c3405a8688fcd29b809a48a762ff41edaa
Reviewed-on: https://go-review.googlesource.com/36833
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: make panicwrap argument-free
Josh Bleecher Snyder [Sat, 11 Feb 2017 05:49:07 +0000 (21:49 -0800)]
cmd/compile: make panicwrap argument-free

When code defines a method on T,
the compiler generates a corresponding wrapper method on *T.
The first thing the wrapper does is check whether
the pointer is nil and if so, call panicwrap.
This is done to provide a useful error message.

The existing implementation gets its information
from arguments set up by the compiler.
However, with some trouble, this information can
be extracted from the name of the wrapper method itself.

Removing the arguments to panicwrap simplifies and
shrinks the wrapper method.
It also means that the call to panicwrap does not
require any stack space.
This enables a further optimization on amd64/x86,
which is to skip the function prologue if nothing
else in the method requires stack space.
This is frequently the case in simple, hot methods,
such as Less and Swap in sort.Interface implementations.

Fixes #19040.

Benchmarks for package sort on amd64:

name                  old time/op  new time/op  delta
SearchWrappers-8       104ns ± 1%   104ns ± 1%    ~     (p=0.286 n=27+27)
SortString1K-8         128µs ± 1%   128µs ± 1%  -0.44%  (p=0.004 n=30+30)
SortString1K_Slice-8   118µs ± 2%   117µs ± 1%    ~     (p=0.106 n=30+30)
StableString1K-8      18.6µs ± 1%  18.6µs ± 1%    ~     (p=0.446 n=28+26)
SortInt1K-8           65.9µs ± 1%  60.7µs ± 1%  -7.96%  (p=0.000 n=28+30)
StableInt1K-8         75.3µs ± 2%  72.8µs ± 1%  -3.41%  (p=0.000 n=30+30)
StableInt1K_Slice-8   57.7µs ± 1%  57.7µs ± 1%    ~     (p=0.515 n=30+30)
SortInt64K-8          6.28ms ± 1%  6.01ms ± 1%  -4.19%  (p=0.000 n=28+28)
SortInt64K_Slice-8    5.04ms ± 1%  5.04ms ± 1%    ~     (p=0.927 n=28+27)
StableInt64K-8        6.65ms ± 1%  6.38ms ± 1%  -3.97%  (p=0.000 n=26+30)
Sort1e2-8             37.9µs ± 1%  37.2µs ± 1%  -1.89%  (p=0.000 n=29+27)
Stable1e2-8           77.0µs ± 1%  74.7µs ± 1%  -3.06%  (p=0.000 n=27+30)
Sort1e4-8             8.21ms ± 2%  7.98ms ± 1%  -2.77%  (p=0.000 n=29+30)
Stable1e4-8           24.8ms ± 1%  24.3ms ± 1%  -2.31%  (p=0.000 n=28+30)
Sort1e6-8              1.27s ± 4%   1.22s ± 1%  -3.42%  (p=0.000 n=30+29)
Stable1e6-8            5.06s ± 1%   4.92s ± 1%  -2.77%  (p=0.000 n=25+29)
[Geo mean]             731µs        714µs       -2.29%

Before/after assembly for sort.(*intPairs).Less follows.
It can be optimized further, but that's for a follow-up CL.

Before:

"".(*intPairs).Less t=1 size=214 args=0x20 locals=0x38
0x0000 00000 (<autogenerated>:1) TEXT "".(*intPairs).Less(SB), $56-32
0x0000 00000 (<autogenerated>:1) MOVQ (TLS), CX
0x0009 00009 (<autogenerated>:1) CMPQ SP, 16(CX)
0x000d 00013 (<autogenerated>:1) JLS 204
0x0013 00019 (<autogenerated>:1) SUBQ $56, SP
0x0017 00023 (<autogenerated>:1) MOVQ BP, 48(SP)
0x001c 00028 (<autogenerated>:1) LEAQ 48(SP), BP
0x0021 00033 (<autogenerated>:1) MOVQ 32(CX), BX
0x0025 00037 (<autogenerated>:1) TESTQ BX, BX
0x0028 00040 (<autogenerated>:1) JEQ 55
0x002a 00042 (<autogenerated>:1) LEAQ 64(SP), DI
0x002f 00047 (<autogenerated>:1) CMPQ (BX), DI
0x0032 00050 (<autogenerated>:1) JNE 55
0x0034 00052 (<autogenerated>:1) MOVQ SP, (BX)
0x0037 00055 (<autogenerated>:1) NOP
0x0037 00055 (<autogenerated>:1) FUNCDATA $0, gclocals·4032f753396f2012ad1784f398b170f4(SB)
0x0037 00055 (<autogenerated>:1) FUNCDATA $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
0x0037 00055 (<autogenerated>:1) MOVQ ""..this+64(FP), AX
0x003c 00060 (<autogenerated>:1) TESTQ AX, AX
0x003f 00063 (<autogenerated>:1) JEQ $0, 135
0x0041 00065 (<autogenerated>:1) MOVQ (AX), CX
0x0044 00068 (<autogenerated>:1) MOVQ 8(AX), AX
0x0048 00072 (<autogenerated>:1) MOVQ "".i+72(FP), DX
0x004d 00077 (<autogenerated>:1) CMPQ DX, AX
0x0050 00080 (<autogenerated>:1) JCC $0, 128
0x0052 00082 (<autogenerated>:1) SHLQ $4, DX
0x0056 00086 (<autogenerated>:1) MOVQ (CX)(DX*1), DX
0x005a 00090 (<autogenerated>:1) MOVQ "".j+80(FP), BX
0x005f 00095 (<autogenerated>:1) CMPQ BX, AX
0x0062 00098 (<autogenerated>:1) JCC $0, 128
0x0064 00100 (<autogenerated>:1) SHLQ $4, BX
0x0068 00104 (<autogenerated>:1) MOVQ (CX)(BX*1), AX
0x006c 00108 (<autogenerated>:1) CMPQ DX, AX
0x006f 00111 (<autogenerated>:1) SETLT AL
0x0072 00114 (<autogenerated>:1) MOVB AL, "".~r2+88(FP)
0x0076 00118 (<autogenerated>:1) MOVQ 48(SP), BP
0x007b 00123 (<autogenerated>:1) ADDQ $56, SP
0x007f 00127 (<autogenerated>:1) RET
0x0080 00128 (<autogenerated>:1) PCDATA $0, $1
0x0080 00128 (<autogenerated>:1) CALL runtime.panicindex(SB)
0x0085 00133 (<autogenerated>:1) UNDEF
0x0087 00135 (<autogenerated>:1) LEAQ go.string."sort_test"(SB), AX
0x008e 00142 (<autogenerated>:1) MOVQ AX, (SP)
0x0092 00146 (<autogenerated>:1) MOVQ $9, 8(SP)
0x009b 00155 (<autogenerated>:1) LEAQ go.string."intPairs"(SB), AX
0x00a2 00162 (<autogenerated>:1) MOVQ AX, 16(SP)
0x00a7 00167 (<autogenerated>:1) MOVQ $8, 24(SP)
0x00b0 00176 (<autogenerated>:1) LEAQ go.string."Less"(SB), AX
0x00b7 00183 (<autogenerated>:1) MOVQ AX, 32(SP)
0x00bc 00188 (<autogenerated>:1) MOVQ $4, 40(SP)
0x00c5 00197 (<autogenerated>:1) PCDATA $0, $1
0x00c5 00197 (<autogenerated>:1) CALL runtime.panicwrap(SB)
0x00ca 00202 (<autogenerated>:1) UNDEF
0x00cc 00204 (<autogenerated>:1) NOP
0x00cc 00204 (<autogenerated>:1) PCDATA $0, $-1
0x00cc 00204 (<autogenerated>:1) CALL runtime.morestack_noctxt(SB)
0x00d1 00209 (<autogenerated>:1) JMP 0

After:

"".(*intPairs).Swap t=1 size=147 args=0x18 locals=0x8
0x0000 00000 (<autogenerated>:1) TEXT "".(*intPairs).Swap(SB), $8-24
0x0000 00000 (<autogenerated>:1) MOVQ (TLS), CX
0x0009 00009 (<autogenerated>:1) SUBQ $8, SP
0x000d 00013 (<autogenerated>:1) MOVQ BP, (SP)
0x0011 00017 (<autogenerated>:1) LEAQ (SP), BP
0x0015 00021 (<autogenerated>:1) MOVQ 32(CX), BX
0x0019 00025 (<autogenerated>:1) TESTQ BX, BX
0x001c 00028 (<autogenerated>:1) JEQ 43
0x001e 00030 (<autogenerated>:1) LEAQ 16(SP), DI
0x0023 00035 (<autogenerated>:1) CMPQ (BX), DI
0x0026 00038 (<autogenerated>:1) JNE 43
0x0028 00040 (<autogenerated>:1) MOVQ SP, (BX)
0x002b 00043 (<autogenerated>:1) NOP
0x002b 00043 (<autogenerated>:1) FUNCDATA $0, gclocals·e6397a44f8e1b6e77d0f200b4fba5269(SB)
0x002b 00043 (<autogenerated>:1) FUNCDATA $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
0x002b 00043 (<autogenerated>:1) MOVQ ""..this+16(FP), AX
0x0030 00048 (<autogenerated>:1) TESTQ AX, AX
0x0033 00051 (<autogenerated>:1) JEQ $0, 140
0x0035 00053 (<autogenerated>:1) MOVQ (AX), CX
0x0038 00056 (<autogenerated>:1) MOVQ 8(AX), AX
0x003c 00060 (<autogenerated>:1) MOVQ "".i+24(FP), DX
0x0041 00065 (<autogenerated>:1) CMPQ DX, AX
0x0044 00068 (<autogenerated>:1) JCC $0, 133
0x0046 00070 (<autogenerated>:1) SHLQ $4, DX
0x004a 00074 (<autogenerated>:1) MOVQ 8(CX)(DX*1), BX
0x004f 00079 (<autogenerated>:1) MOVQ (CX)(DX*1), SI
0x0053 00083 (<autogenerated>:1) MOVQ "".j+32(FP), DI
0x0058 00088 (<autogenerated>:1) CMPQ DI, AX
0x005b 00091 (<autogenerated>:1) JCC $0, 133
0x005d 00093 (<autogenerated>:1) SHLQ $4, DI
0x0061 00097 (<autogenerated>:1) MOVQ 8(CX)(DI*1), AX
0x0066 00102 (<autogenerated>:1) MOVQ (CX)(DI*1), R8
0x006a 00106 (<autogenerated>:1) MOVQ R8, (CX)(DX*1)
0x006e 00110 (<autogenerated>:1) MOVQ AX, 8(CX)(DX*1)
0x0073 00115 (<autogenerated>:1) MOVQ SI, (CX)(DI*1)
0x0077 00119 (<autogenerated>:1) MOVQ BX, 8(CX)(DI*1)
0x007c 00124 (<autogenerated>:1) MOVQ (SP), BP
0x0080 00128 (<autogenerated>:1) ADDQ $8, SP
0x0084 00132 (<autogenerated>:1) RET
0x0085 00133 (<autogenerated>:1) PCDATA $0, $1
0x0085 00133 (<autogenerated>:1) CALL runtime.panicindex(SB)
0x008a 00138 (<autogenerated>:1) UNDEF
0x008c 00140 (<autogenerated>:1) PCDATA $0, $1
0x008c 00140 (<autogenerated>:1) CALL runtime.panicwrap(SB)
0x0091 00145 (<autogenerated>:1) UNDEF

Change-Id: I15bb8435f0690badb868799f313ed8817335efd3
Reviewed-on: https://go-review.googlesource.com/36809
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agotesting: fix copy/paste in docs
Josh Bleecher Snyder [Sat, 11 Feb 2017 22:22:33 +0000 (14:22 -0800)]
testing: fix copy/paste in docs

Follow-up to CL 36791.

Change-Id: I1c4831e5dfe90c205782e970ada7faff8a009daa
Reviewed-on: https://go-review.googlesource.com/36890
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: Ensure left-to-right assignment
Dhananjay Nakrani [Sat, 24 Dec 2016 06:28:45 +0000 (22:28 -0800)]
cmd/compile: Ensure left-to-right assignment

Add temporaries to reorder the assignment for OAS2XXX nodes.
This makes orderstmt(), rewrite
  a, b, c = ...
as
  tmp1, tmp2, tmp3 = ...
  a, b, c = tmp1, tmp2, tmp3
and
  a, ok = ...
as
  t1, t2 = ...
  a  = t1
  ok = t2

Fixes #13433.

Change-Id: Id0f5956e3a254d0a6f4b89b5f7b0e055b1f0e21f
Reviewed-on: https://go-review.googlesource.com/34713
Run-TryBot: Dhananjay Nakrani <dhananjayn@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
8 years agodoc: improve issue template and contribution guidelines
Paul Jolly [Fri, 9 Dec 2016 11:15:23 +0000 (11:15 +0000)]
doc: improve issue template and contribution guidelines

Encourage people towards the various help forums as a first port of
call. Better sign-posting will reduce the incidence or questions being
asked in the issue tracker that should otherwise be handled elsewhere,
thereby keeping the issue tracker email traffic more focussed.

Change-Id: I13b2e498d88be010fca421067ae6fb579a46d6b7
Reviewed-on: https://go-review.googlesource.com/34250
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agostrings: make parameters names less confusing
Alberto Donizetti [Sat, 11 Feb 2017 19:06:54 +0000 (20:06 +0100)]
strings: make parameters names less confusing

Using 'sep' as parameter name for strings functions that take a
separator argument is fine, but for functions like Index or Count that
look for a substring it's better to use 'substr' (like Contains
already does).

Fixes #19039

Change-Id: Idd557409c8fea64ce830ab0e3fec37d3d56a79f0
Reviewed-on: https://go-review.googlesource.com/36874
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agopath/filepath: fix TestWinSplitListTestsAreValid on some systems
Remi Gillig [Sat, 11 Feb 2017 17:34:48 +0000 (17:34 +0000)]
path/filepath: fix TestWinSplitListTestsAreValid on some systems

The environment variables used in those tests override the default
OS ones. However, one of them (SystemRoot) seems to be required on
some Windows systems for invoking cmd.exe properly.

This fixes #4930 and #6568.

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

8 years agocmd/nm: extend help text to document the flags
Jaana Burcu Dogan [Fri, 10 Feb 2017 22:34:37 +0000 (14:34 -0800)]
cmd/nm: extend help text to document the flags

Change-Id: Ia2852666ef44e7ef0bba2360e92caccc83fd0e5c
Reviewed-on: https://go-review.googlesource.com/36796
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agotesting: only call ReadMemStats if necessary when benchmarking
Josh Bleecher Snyder [Fri, 10 Feb 2017 19:44:19 +0000 (11:44 -0800)]
testing: only call ReadMemStats if necessary when benchmarking

When running benchmarks with -cpuprofile,
the entire process gets profiled,
and ReadMemStats is surprisingly expensive.
Running the sort benchmarks right now with
-cpuprofile shows almost half of all execution
time in ReadMemStats.

Since ReadMemStats is not required if the benchmark
does not need allocation stats, simply skip it.
This will make cpu profiles nicer to read
and significantly speed up the process of running benchmarks.
It might also make sense to toggle cpu profiling
on/off as we begin/end individual benchmarks,
but that wouldn't get us the time savings of
skipping ReadMemStats, so this CL is useful in itself.

Change-Id: I425197b1ee11be4bc91d22b929e2caf648ebd7c5
Reviewed-on: https://go-review.googlesource.com/36791
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agoimage/color: tweak the YCbCr to RGBA conversion formula again.
Nigel Tao [Fri, 10 Feb 2017 03:04:59 +0000 (14:04 +1100)]
image/color: tweak the YCbCr to RGBA conversion formula again.

The 0x10101 magic constant is a little more principled than 0x10100, as
the rounding adjustment now spans the complete range [0, 0xffff] instead
of [0, 0xff00].

Consider this round-tripping code:

y, cb, cr := color.RGBToYCbCr(r0, g0, b0)
r1, g1, b1 := color.YCbCrToRGB(y, cb, cr)

Due to rounding errors both ways, we often but not always get a perfect
round trip (where r0 == r1 && g0 == g1 && b0 == b1). This is true both
before and after this commit. In some cases we got luckier, in others we
got unluckier.

For example, before this commit, (180, 135, 164) doesn't round trip
perfectly (it's off by 1) but (180, 135, 165) does. After this commit,
both cases are reversed: the former does and the latter doesn't (again
off by 1). Over all possible (r, g, b) triples, there doesn't seem to be
a big change for better or worse.

There is some history in these CLs:

image/color: tweak the YCbCr to RGBA conversion formula.
https://go-review.googlesource.com/#/c/12220/2/src/image/color/ycbcr.go

image/color: have YCbCr.RGBA work in 16-bit color, per the Color
interface.
https://go-review.googlesource.com/#/c/8073/2/src/image/color/ycbcr.go

Change-Id: Ib25ba7039f49feab2a9d1a4141b86db17db7b3e1
Reviewed-on: https://go-review.googlesource.com/36732
Run-TryBot: Nigel Tao <nigeltao@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
8 years agocmd/compile: eliminate OASWB
Matthew Dempsky [Mon, 19 Dec 2016 18:30:44 +0000 (10:30 -0800)]
cmd/compile: eliminate OASWB

Instead we can just call needwritebarrier when constructing the SSA
representation.

Change-Id: I6fefaad49daada9cdb3050f112889e49dca0047b
Reviewed-on: https://go-review.googlesource.com/34566
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agocmd/go: copy FFLAGS from build.Package
Ian Lance Taylor [Tue, 7 Feb 2017 15:28:49 +0000 (07:28 -0800)]
cmd/go: copy FFLAGS from build.Package

Fixes #18975.

Change-Id: I60dfb299233ecfed4b2da93750ea84e7921f1fbb
Reviewed-on: https://go-review.googlesource.com/36482
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoexpvar: make BenchmarkAdd{Same,Different} comparable to 1.8
Bryan C. Mills [Fri, 10 Feb 2017 19:46:22 +0000 (14:46 -0500)]
expvar: make BenchmarkAdd{Same,Different} comparable to 1.8

bradfitz noted in change 36717 that the new behavior was no longer
comparable with the old.  This change restores comparable behavior
for -cpu=1.

BenchmarkMapAddSame                 909           909           +0.00%
BenchmarkMapAddSame-6               1309          262           -79.98%
BenchmarkMapAddDifferent            2856          3030          +6.09%
BenchmarkMapAddDifferent-6          3803          581           -84.72%

updates #18177

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

8 years agocmd/go: use Bitbucket v2 REST API when determining VCS
Mark Adams [Fri, 3 Feb 2017 14:46:25 +0000 (08:46 -0600)]
cmd/go: use Bitbucket v2 REST API when determining VCS

The existing implementation uses v1.0 of Bitbucket's REST API. The newer
version 2.0 of Bitbucket's REST API provides the same information but
with support for partial responses allowing the client to request only
the response fields that are relevant to their usage of the API
resulting in a much smaller payload size.

The partial response functionality in the Bitbucket API is documented here:
https://developer.atlassian.com/bitbucket/api/2/reference/meta/partial-response

The v2.0 of the Bitbucket repositories API is documented here:
https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D#get

Fixes #18919

Change-Id: I319947d5c51adc241cfe3a2228a667cc43fb1f56
Reviewed-on: https://go-review.googlesource.com/36219
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agogo/types: unsafe.Pointer is not an alias
Alan Donovan [Thu, 9 Feb 2017 19:51:29 +0000 (14:51 -0500)]
go/types: unsafe.Pointer is not an alias

Change-Id: Ieb0808caa24c9a5e599084183ba5ee8a6536f7d8
Reviewed-on: https://go-review.googlesource.com/36622
Reviewed-by: Robert Griesemer <gri@golang.org>
8 years agoruntime: implement fastrand in go
Sokolov Yura [Thu, 5 Jan 2017 06:36:27 +0000 (09:36 +0300)]
runtime: implement fastrand in go

So it could be inlined.

Using bit-tricks it could be implemented without condition
(improved trick version by Minux Ma).

Simple benchmark shows it is faster on i386 and x86_64, though
I don't know will it be faster on other architectures?

benchmark                       old ns/op     new ns/op     delta
BenchmarkFastrand-3             2.79          1.48          -46.95%
BenchmarkFastrandHashiter-3     25.9          24.9          -3.86%

Change-Id: Ie2eb6d0f598c0bb5fac7f6ad0f8b5e3eddaa361b
Reviewed-on: https://go-review.googlesource.com/34782
Reviewed-by: Minux Ma <minux@golang.org>
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime/debug: don't run a GC when setting SetGCPercent negative
Brad Fitzpatrick [Tue, 6 Dec 2016 19:55:10 +0000 (19:55 +0000)]
runtime/debug: don't run a GC when setting SetGCPercent negative

If the user is calling SetGCPercent(-1), they intend to disable GC.
They probably don't intend to run one. If they do, they can call
runtime.GC themselves.

Change-Id: I40ef40dfc7e15193df9ff26159cd30e56b666f73
Reviewed-on: https://go-review.googlesource.com/34013
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>