]> Cypherpunks repositories - gostls13.git/log
gostls13.git
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>
8 years agocmd/trace: Record mark assists in execution traces
Heschi Kreinick [Tue, 31 Jan 2017 19:09:14 +0000 (14:09 -0500)]
cmd/trace: Record mark assists in execution traces

During the mark phase of garbage collection, goroutines that allocate
may be recruited to assist. This change creates trace events for mark
assists and displays them similarly to sweep assists in the trace
viewer.

Mark assists are different than sweeps in that they can be preempted, so
displaying them in the trace viewer is a little tricky -- we may need to
synthesize multiple slices for one mark assist. This could have been
done in the parser instead, but I thought it might be preferable to keep
the parser as true to the event stream as possible.

Change-Id: I381dcb1027a187a354b1858537851fa68a620ea7
Reviewed-on: https://go-review.googlesource.com/36015
Run-TryBot: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
8 years agocmd/compile/internal/gc: unexport or remove global functions
Hajime Hoshi [Fri, 10 Feb 2017 17:09:57 +0000 (02:09 +0900)]
cmd/compile/internal/gc: unexport or remove global functions

Change-Id: Ib2109ab773fbf2a35188300cf91a54735f75fc7c
Reviewed-on: https://go-review.googlesource.com/36736
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agoexpvar: parallelize BenchmarkMapAdd{Same,Different}
Bryan C. Mills [Thu, 9 Feb 2017 23:39:16 +0000 (18:39 -0500)]
expvar: parallelize BenchmarkMapAdd{Same,Different}

The other expvar tests are already parallelized, and this will help to
measure the impact of potential implementations for #18177.

updates #18177

Change-Id: I0f4f1a16a0285556cbcc8339855b6459af412675
Reviewed-on: https://go-review.googlesource.com/36717
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoreflect: clear ptrToThis in Ptr when allocating result on heap
Michael Hudson-Doyle [Fri, 10 Feb 2017 00:08:13 +0000 (13:08 +1300)]
reflect: clear ptrToThis in Ptr when allocating result on heap

Otherwise, calling PtrTo on the result will fail.

Fixes #19003

Change-Id: I8d7d1981a5d0417d5aee52740469d71e90734963
Reviewed-on: https://go-review.googlesource.com/36731
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agosort: optimize average calculation in symMerge and doPivot.
David R. Jenni [Wed, 8 Feb 2017 10:32:58 +0000 (11:32 +0100)]
sort: optimize average calculation in symMerge and doPivot.

Change code of the form `i + (j-i)/2` to `int(uint(i+j) >> 1)`.

The optimized average calculation uses fewer instructions to calculate
the average without overflowing at the addition.

Analogous to https://golang.org/cl/36332.

name                 old time/op  new time/op  delta
StableString1K-4     49.6µs ± 3%  49.1µs ± 8%    ~     (p=0.659 n=16+19)
StableInt1K-4         160µs ±10%   148µs ± 5%  -7.29%  (p=0.000 n=20+16)
StableInt1K_Slice-4   139µs ± 4%   136µs ± 3%  -2.52%  (p=0.000 n=20+16)
StableInt64K-4       8.84ms ± 6%  8.57ms ± 5%  -3.07%  (p=0.001 n=20+19)
Stable1e2-4           162µs ±19%   147µs ±16%  -8.79%  (p=0.002 n=20+20)
Stable1e4-4          31.0ms ± 5%  30.6ms ± 5%    ~     (p=0.221 n=20+20)
Stable1e6-4           6.37s ± 3%   6.27s ± 2%  -1.67%  (p=0.000 n=19+20)

Change-Id: I1cea0bcb9ace8ef7e48b8fab772e41b4b2170da9
Reviewed-on: https://go-review.googlesource.com/36570
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocrypto/sha512: Add AVX2 version for AMD64
Ilya Tocar [Wed, 8 Feb 2017 21:31:54 +0000 (15:31 -0600)]
crypto/sha512: Add AVX2 version for AMD64

name          old time/op    new time/op     delta
Hash8Bytes-6     913ns ± 0%      667ns ± 0%  -26.91%  (p=0.000 n=10+10)
Hash1K-6        6.58µs ± 0%     4.23µs ± 0%  -35.69%  (p=0.000 n=10+9)
Hash8K-6        45.9µs ± 0%     28.1µs ± 0%  -38.93%  (p=0.000 n=10+10)

name          old speed      new speed       delta
Hash8Bytes-6  8.76MB/s ± 0%  11.99MB/s ± 0%  +36.87%  (p=0.000 n=10+8)
Hash1K-6       156MB/s ± 0%    242MB/s ± 0%  +55.49%  (p=0.000 n=10+9)
Hash8K-6       178MB/s ± 0%    292MB/s ± 0%  +63.74%  (p=0.000 n=10+10)

Change-Id: Ic9211d68b02935b2195995f264ec57d6bc36f713
Reviewed-on: https://go-review.googlesource.com/36630
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agocrypto/x509: ignore CN if SAN extension present.
Adam Langley [Thu, 9 Feb 2017 23:57:53 +0000 (15:57 -0800)]
crypto/x509: ignore CN if SAN extension present.

The code previously tested only whether DNS-name SANs were present in a
certificate which is only approximately correct. In fact, /any/ SAN
extension, including one with no DNS names, should cause the CN to be
ignored.

Change-Id: I3d9824918975be6d4817e7cbb48ed1b0c5a2fc8b
Reviewed-on: https://go-review.googlesource.com/36696
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/{asm,internal/obj/s390x}, math: remove emulated float instructions
Michael Munday [Thu, 17 Nov 2016 16:53:21 +0000 (11:53 -0500)]
cmd/{asm,internal/obj/s390x}, math: remove emulated float instructions

The s390x port was based on the ppc64 port and, because of the way the
port was done, inherited some instructions from it. ppc64 supports
3-operand (4-operand for FMADD etc.) floating point instructions
but s390x doesn't (the destination register is always an input) and
so these were emulated.

There is a bug in the emulation of FMADD whereby if the destination
register is also a source for the multiplication it will be
clobbered. This doesn't break any assembly code in the std lib but
could affect future work.

To fix this I have gone through the floating point instructions and
removed all unnecessary 3-/4-operand emulation. The compiler doesn't
need it and assembly writers don't need it, it's just a source of
bugs.

I've also deleted the FNMADD family of emulated instructions. They
aren't used anywhere.

Change-Id: Ic07cedcf141a6a3b43a0c84895460f6cfbf56c04
Reviewed-on: https://go-review.googlesource.com/33350
Run-TryBot: Michael Munday <munday@ca.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agomath: check overflow in amd64 Exp implementation
Alberto Donizetti [Fri, 3 Feb 2017 09:36:47 +0000 (10:36 +0100)]
math: check overflow in amd64 Exp implementation

Unlike the pure go implementation used by every other architecture,
the amd64 asm implementation of Exp does not fail early if the
argument is known to overflow. Make it fail early.

Cost of the check is < 1ns (on an old Sandy Bridge machine):

name   old time/op  new time/op  delta
Exp-4  18.3ns ± 1%  18.7ns ± 1%  +2.08%  (p=0.000 n=18+20)

Fixes #14932
Fixes #18912

Change-Id: I04b3f9b4ee853822cbdc97feade726fbe2907289
Reviewed-on: https://go-review.googlesource.com/36271
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoencoding/json: clarify documention for Unmarshal into a pointer.
Tuo Shan [Tue, 7 Feb 2017 02:06:40 +0000 (18:06 -0800)]
encoding/json: clarify documention for Unmarshal into a pointer.

Fixes #18730.

Change-Id: If3ef28e62f7e449d4c8dc1dfd78f7d6f5a87ed26
Reviewed-on: https://go-review.googlesource.com/36478
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agodatabase/sql: ensure driverConns are closed if not returned to pool
Daniel Theophanes [Thu, 9 Feb 2017 05:38:51 +0000 (21:38 -0800)]
database/sql: ensure driverConns are closed if not returned to pool

Previously if a connection was requested but timed out during the
request and when acquiring the db.Lock the connection request
is fulfilled and the request is unable to be returned to the
connection pool, then then driver connection would not be closed.

No tests were added or modified because I was unable to determine
how to trigger this situation without something invasive.

Change-Id: I9d4dc680e3fdcf63d79d212174a5b8b313f363f1
Reviewed-on: https://go-review.googlesource.com/36641
Reviewed-by: Russ Cox <rsc@golang.org>
8 years agoruntime/pprof: merge internal/protopprof into pprof package
Russ Cox [Thu, 9 Feb 2017 21:01:11 +0000 (16:01 -0500)]
runtime/pprof: merge internal/protopprof into pprof package

These are very tightly coupled, and internal/protopprof is small.
There's no point to having a separate package.

Change-Id: I2c8aa49c9e18a7128657bf2b05323860151b5606
Reviewed-on: https://go-review.googlesource.com/36711
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoimage: fix the overlap check in Rectangle.Intersect.
Nigel Tao [Fri, 10 Feb 2017 03:40:38 +0000 (14:40 +1100)]
image: fix the overlap check in Rectangle.Intersect.

This is a re-roll of a previous commit,
a855da29dbd7a80c4d87a421c1f88a8603c020fa, which was rolled back in
14347ee480968c712ea885a4ea62779fd8a0dc44.

It was rolled back because it broke a unit test in image/gif. The
image/gif code was fixed by 9ef65dbe0683634a2e8a557d12267d0309ae1570
"image/gif: fix frame-inside-image bounds checking".

The original commit message:

image: fix the overlap check in Rectangle.Intersect.

The doc comment for Rectangle.Intersect clearly states, "If the two
rectangles do not overlap then the zero rectangle will be returned."
Prior to this fix, calling Intersect on adjacent but non-overlapping
rectangles would return an empty but non-zero rectangle.

The fix essentially changes
if r.Min.X > r.Max.X || r.Min.Y > r.Max.Y { etc }
to
if r.Min.X >= r.Max.X || r.Min.Y >= r.Max.Y { etc }
(note that the > signs have become >= signs), but changing that line to:
if r.Empty() { etc }
seems clearer (and equivalent).

Change-Id: I2e3af1f1686064a573b2e513b39246fe60c03631
Reviewed-on: https://go-review.googlesource.com/36734
Reviewed-by: Rob Pike <r@golang.org>
Run-TryBot: Nigel Tao <nigeltao@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: use constants directly for fast map access calls
Josh Bleecher Snyder [Thu, 9 Feb 2017 22:00:23 +0000 (14:00 -0800)]
cmd/compile: use constants directly for fast map access calls

CL 35554 taught order.go to use static variables
for constants that needed to be addressable for runtime routines.
However, there is one class of runtime routines that
do not actually need an addressable value: fast map access routines.
This CL teaches order.go to avoid using static variables
for addressability in those cases.
Instead, it avoids introducing a temp at all,
which the backend would just have to optimize away.

Fixes #19015.

Change-Id: I5ef780c604fac3fb48dabb23a344435e283cb832
Reviewed-on: https://go-review.googlesource.com/36693
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agoimage/gif: fix frame-inside-image bounds checking.
Nigel Tao [Thu, 9 Feb 2017 04:18:47 +0000 (15:18 +1100)]
image/gif: fix frame-inside-image bounds checking.

The semantics of the Go image.Rectangle type is that the In and
Intersects methods treat empty rectangles specially. There are multiple
valid representations of an empty image.Rectangle. One of them is the
zero image.Rectangle but there are others. They're obviously not all
equal in the == sense, so we shouldn't use != to check GIF's semantics.

This change will allow us to re-roll
a855da29dbd7a80c4d87a421c1f88a8603c020fa "image: fix the overlap check
in Rectangle.Intersect" which was rolled back in
14347ee480968c712ea885a4ea62779fd8a0dc44.

Change-Id: Ie1a0d092510a7bb6170e61adbf334b21361ff9e6
Reviewed-on: https://go-review.googlesource.com/36639
Run-TryBot: Nigel Tao <nigeltao@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
8 years agonet/http: improve handling of errors in Dir.Open
Nathan Caza [Thu, 9 Feb 2017 00:42:52 +0000 (18:42 -0600)]
net/http: improve handling of errors in Dir.Open

The current implementation fails to produce an "IsNotExist" error on some
platforms (unix) for certain situations where it would be expected. This causes
downstream consumers, like FileServer, to emit 500 errors instead of a 404 for
some non-existant paths on certain platforms but not others.

As an example, os.Open("/index.html/foo") on a unix-type system will return
syscall.ENOTDIR, which os.IsNotExist cannot return true for (because the
error code is ambiguous without context). On windows, this same example
would result in os.IsNotExist returning true -- since the returned error is
specific.

This change alters Dir.Open to look up the tree for an "IsPermission" or
"IsNotExist" error to return, or a non-directory, returning os.ErrNotExist in
the last case. For all other error scenarios, the original error is returned.
This ensures that downstream code, like FileServer, receive errors that behave
the same across all platforms.

Fixes #18984

Change-Id: Id7d16591c24cd96afddb6d8ae135ac78da42ed37
Reviewed-on: https://go-review.googlesource.com/36635
Reviewed-by: Yasuhiro MATSUMOTO <mattn.jp@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agospec: refer to "not defined type" rather than "unnamed type" in conversions
Robert Griesemer [Thu, 9 Feb 2017 21:22:37 +0000 (13:22 -0800)]
spec: refer to "not defined type" rather than "unnamed type" in conversions

We missed this in https://golang.org/cl/36213.
Thanks to Chris Hines for pointing it out.

For #18130.

Change-Id: I6279ab19966c4391c4b4458b21fd2527d3f949dd
Reviewed-on: https://go-review.googlesource.com/36691
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/compile/internal/syntax: removed gcCompat code needed to pass orig. tests
Robert Griesemer [Fri, 10 Feb 2017 00:00:23 +0000 (16:00 -0800)]
cmd/compile/internal/syntax: removed gcCompat code needed to pass orig. tests

The gcCompat mode was introduced to match the new parser's node position
setup exactly with the positions used by the original parser. Some of the
gcCompat adjustments were required to satisfy syntax error test cases,
and the rest were required to make toolstash cmp pass.

This change removes the former gcCompat adjustments and instead adjusts
the respective test cases as necessary. In some cases this makes the error
lines consistent with the ones reported by gccgo.

Where it has changed, the position associated with a given syntactic construct
is the position (line/col number) of the left-most token belonging to the
construct.

Change-Id: I5b60c00c5999a895c4d6d6e9b383c6405ccf725c
Reviewed-on: https://go-review.googlesource.com/36695
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocrypto/dsa: also use fromHex in TestSignAndVerify.
Adam Langley [Wed, 30 Nov 2016 16:33:17 +0000 (08:33 -0800)]
crypto/dsa: also use fromHex in TestSignAndVerify.

This change contains a very minor tidy-up to a test.

Change-Id: I3a8c0168bcdcbf90cacbbac2566c8423c92129f8
Reviewed-on: https://go-review.googlesource.com/33726
Reviewed-by: Adam Langley <agl@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: disallow combining nosplit and systemstack
Austin Clements [Thu, 9 Feb 2017 22:08:27 +0000 (17:08 -0500)]
cmd/compile: disallow combining nosplit and systemstack

go:systemstack works by tweaking the stack check prologue to check
against a different bound, while go:nosplit removes the stack check
prologue entirely. Hence, they can't be used together. Make the build
fail if they are.

Change-Id: I2d180c4b1d31ff49ec193291ecdd42921d253359
Reviewed-on: https://go-review.googlesource.com/36710
Run-TryBot: Austin Clements <austin@google.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocrypto/aes: fix build failure by changing VORL to VOR
Paulo Flabiano Smorigo [Thu, 9 Feb 2017 20:28:08 +0000 (18:28 -0200)]
crypto/aes: fix build failure by changing VORL to VOR

Recently, a commit (85ecc51c) changed the instruction from VORL to VOR.

Fixes #19014

Change-Id: I9a7e0b5771842b1abb5afc73dc41d5e7960cf390
Reviewed-on: https://go-review.googlesource.com/36625
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agonet/rpc: fix aliasing in TestAcceptExitAfterListenerClose
Bryan C. Mills [Thu, 9 Feb 2017 19:34:38 +0000 (14:34 -0500)]
net/rpc: fix aliasing in TestAcceptExitAfterListenerClose

TestRPC writes to newServer and newServerAddr guarded with a
sync.Once.
TestAcceptExitAfterListenerClose was overwriting those variables,
which caused the second invocation of TestRPC within a single process
to fail.

A second invocation can occur as a result of running the test with
multiple values for the -cpu flag.

fixes #19001.

Change-Id: I291bacf44aefb49c2264ca0290a28248c026f80e
Reviewed-on: https://go-review.googlesource.com/36624
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>

8 years agocmd/compile: remove some allocs from CSE
Josh Bleecher Snyder [Thu, 9 Feb 2017 18:45:35 +0000 (10:45 -0800)]
cmd/compile: remove some allocs from CSE

Pick up a few pennies:

* CSE gets run twice for each function,
but the set of Aux values doesn't change.
Avoid populating it twice.

* Don't bother populating auxmap for values
that can't be CSE'd anyway.

name       old alloc/op     new alloc/op     delta
Template       41.0MB ± 0%      40.7MB ± 0%  -0.61%  (p=0.008 n=5+5)
Unicode        32.3MB ± 0%      32.3MB ± 0%  -0.22%  (p=0.008 n=5+5)
GoTypes         122MB ± 0%       121MB ± 0%  -0.55%  (p=0.008 n=5+5)
Compiler        482MB ± 0%       479MB ± 0%  -0.58%  (p=0.008 n=5+5)
SSA             865MB ± 0%       862MB ± 0%  -0.35%  (p=0.008 n=5+5)
Flate          26.5MB ± 0%      26.5MB ± 0%    ~     (p=0.056 n=5+5)
GoParser       32.6MB ± 0%      32.4MB ± 0%  -0.58%  (p=0.008 n=5+5)
Reflect        84.2MB ± 0%      83.8MB ± 0%  -0.57%  (p=0.008 n=5+5)
Tar            27.7MB ± 0%      27.6MB ± 0%  -0.37%  (p=0.008 n=5+5)
XML            44.7MB ± 0%      44.5MB ± 0%  -0.53%  (p=0.008 n=5+5)

name       old allocs/op    new allocs/op    delta
Template         373k ± 0%        373k ± 1%    ~     (p=1.000 n=5+5)
Unicode          326k ± 0%        325k ± 0%    ~     (p=0.548 n=5+5)
GoTypes         1.16M ± 0%       1.16M ± 0%    ~     (p=0.841 n=5+5)
Compiler        4.16M ± 0%       4.15M ± 0%    ~     (p=0.222 n=5+5)
SSA             7.57M ± 0%       7.56M ± 0%  -0.22%  (p=0.008 n=5+5)
Flate            238k ± 1%        239k ± 1%    ~     (p=0.690 n=5+5)
GoParser         304k ± 0%        304k ± 0%    ~     (p=1.000 n=5+5)
Reflect         1.01M ± 0%       1.00M ± 0%  -0.31%  (p=0.016 n=4+5)
Tar              245k ± 0%        245k ± 1%    ~     (p=0.548 n=5+5)
XML              393k ± 0%        391k ± 1%    ~     (p=0.095 n=5+5)

Change-Id: I78f1ffe129bd8fd590b7511717dd2bf9f5ecbd6d
Reviewed-on: https://go-review.googlesource.com/36690
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agocrypto/aes: improve performance for aes on ppc64le
Paulo Flabiano Smorigo [Thu, 8 Dec 2016 14:06:34 +0000 (12:06 -0200)]
crypto/aes: improve performance for aes on ppc64le

Add asm implementation for AES in order to make use of VMX cryptographic
acceleration instructions for POWER8. There is a speed boost of over 10
times using those instructions:

Fixes #18076

                        old ns/op  new ns/op  delta
BenchmarkEncrypt-20     337        30.3       -91.00%
BenchmarkDecrypt-20     347        30.5a      -91.21%
BenchmarkExpand-20      1180       130        -88.98%

                        old MB/s   new MB/s   speedup
BenchmarkEncrypt-20     47.38      527.68     11.13x
BenchmarkDecrypt-20     46.05      524.45     11.38x

Change-Id: Ifa4d1b508f4803cc72dcaad97acc8495d651b019
Reviewed-on: https://go-review.googlesource.com/33587
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
8 years agocrypto/tls: don't hold lock when closing underlying net.Conn.
Adam Langley [Wed, 8 Feb 2017 18:06:34 +0000 (10:06 -0800)]
crypto/tls: don't hold lock when closing underlying net.Conn.

There's no need to hold the handshake lock across this call and it can
lead to deadlocks if the net.Conn calls back into the tls.Conn.

Fixes #18426.

Change-Id: Ib1b2813cce385949d970f8ad2e52cfbd1390e624
Reviewed-on: https://go-review.googlesource.com/36561
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: rules change to use ANDN more effectively on ppc64x
Lynn Boger [Fri, 3 Feb 2017 13:40:18 +0000 (08:40 -0500)]
cmd/compile: rules change to use ANDN more effectively on ppc64x

Currently there are cases where an XOR with -1 followed by an AND
is generanted when it could be done with just an ANDN instruction.

Changes to PPC64.rules and required files allows this change
in generated code.  Examples of this occur in sha3 among others.

Fixes: #18918
Change-Id: I647cb9b4a4aaeebb27db85f8bf75487d78f720c9
Reviewed-on: https://go-review.googlesource.com/36218
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
8 years agoruntime: enable/disable SIGPROF if needed when profiling
Ian Lance Taylor [Wed, 7 Dec 2016 04:54:41 +0000 (20:54 -0800)]
runtime: enable/disable SIGPROF if needed when profiling

This ensures that SIGPROF is handled correctly when using
runtime/pprof in a c-archive or c-shared library.

Separate profiler handling into pre-process changes and per-thread
changes. Simplify the Windows code slightly accordingly.

Fixes #18220.

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

8 years agocrypto/x509: sort the list of fields used by CreateCertificateRequest.
Adam Langley [Wed, 8 Feb 2017 17:41:39 +0000 (09:41 -0800)]
crypto/x509: sort the list of fields used by CreateCertificateRequest.

Change-Id: I67589cb9e728e6c7df5ef6e981189193154338d3
Reviewed-on: https://go-review.googlesource.com/36559
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocrypto/x509: CreateCertificateRequest reads ExtraExtensions, not Extensions.
Adam Langley [Wed, 8 Feb 2017 17:40:14 +0000 (09:40 -0800)]
crypto/x509: CreateCertificateRequest reads ExtraExtensions, not Extensions.

Fixes #18899.

Change-Id: I6a4bf0aad9cf1dbe6691ba4e4c478fcb33c44528
Reviewed-on: https://go-review.googlesource.com/36558
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocrypto/x509: sort the list of fields used by CreateCertificate.
Adam Langley [Wed, 8 Feb 2017 17:32:24 +0000 (09:32 -0800)]
crypto/x509: sort the list of fields used by CreateCertificate.

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

8 years agocrypto/x509: document AuthorityKeyId and don't mutate it.
Adam Langley [Wed, 8 Feb 2017 17:28:53 +0000 (09:28 -0800)]
crypto/x509: document AuthorityKeyId and don't mutate it.

The AuthorityKeyId value from the template was used by
CreateCertificate, but that wasn't documented. Also, CreateCertificate
would stash a value in the template if it needed to override it, which
was wrong: template should be read-only.

Fixes #18962.

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

8 years agoplugin: remove unnecessary import "C" from example
Francesc Campoy [Thu, 9 Feb 2017 03:12:19 +0000 (19:12 -0800)]
plugin: remove unnecessary import "C" from example

It seems that it is not needed to import the pseudo package "C"
for the plugin to be built correctly.
Removing it to avoid confusion.

Change-Id: I62838a953ad2889881bfbfd1a36141661565f033
Reviewed-on: https://go-review.googlesource.com/36638
Reviewed-by: David Crawshaw <crawshaw@golang.org>
8 years agosyscall: remove "use" function and calls from generated code.
Sameer Ajmani [Thu, 9 Feb 2017 15:44:26 +0000 (10:44 -0500)]
syscall: remove "use" function and calls from generated code.

Update syscall code generators to set build tags.

Regenerate zsyscall files, which makes the following changes:
- remove calls to "use"
- update build tags, adding missing ones in some cases
- "stat" renamed to "st" in some cases
- "libc_Utimes" renamed "libc_utimes" in one case

I'll mirror this change to x/sys/unix once committed.

Change-Id: Ic07e0ae1433dd133eb57e8dd2a3b86a62aab4eda
Reviewed-on: https://go-review.googlesource.com/36616
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/asm, cmd/internal/obj/ppc64: Add ISA 2.05, 2.06 and 2.07 instructions.
Carlos Eduardo Seo [Thu, 2 Feb 2017 19:59:18 +0000 (17:59 -0200)]
cmd/asm, cmd/internal/obj/ppc64: Add ISA 2.05, 2.06 and 2.07 instructions.

This change adds instructions from ISA 2.05, 2.06 and 2.07 that are frequently
used in assembly optimizations for ppc64.

It also fixes two problems:

  * the implementation of RLDICR[CC]/RLDICL[CC] did not consider all possible
  cases for the bit mask.
  * removed two non-existing instructions that were added by mistake in the VMX
  implementation (VORL/VANDL).

Change-Id: Iaef4e5c6a5240c2156c6c0f28ad3bcd8780e9830
Reviewed-on: https://go-review.googlesource.com/36230
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
8 years agotext/template: fix method lookup on addressable nil pointer
Russ Cox [Fri, 27 Jan 2017 19:14:05 +0000 (14:14 -0500)]
text/template: fix method lookup on addressable nil pointer

Fixes #18816.

Change-Id: I4f8f1cac2680dbde492c56d3a5a038577605e7c1
Reviewed-on: https://go-review.googlesource.com/36542
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agotime: optimize Now on darwin, windows
Russ Cox [Sat, 4 Feb 2017 00:26:13 +0000 (19:26 -0500)]
time: optimize Now on darwin, windows

Fetch both monotonic and wall time together when possible.
Avoids skew and is cheaper.

Also shave a few ns off in conversion in package time.

Compared to current implementation (after monotonic changes):

name   old time/op  new time/op  delta
Now    19.6ns ± 1%   9.7ns ± 1%  -50.63%  (p=0.000 n=41+49) darwin/amd64
Now    23.5ns ± 4%  10.6ns ± 5%  -54.61%  (p=0.000 n=30+28) windows/amd64
Now    54.5ns ± 5%  29.8ns ± 9%  -45.40%  (p=0.000 n=27+29) windows/386

More importantly, compared to Go 1.8:

name   old time/op  new time/op  delta
Now     9.5ns ± 1%   9.7ns ± 1%   +1.94%  (p=0.000 n=41+49) darwin/amd64
Now    12.9ns ± 5%  10.6ns ± 5%  -17.73%  (p=0.000 n=30+28) windows/amd64
Now    15.3ns ± 5%  29.8ns ± 9%  +94.36%  (p=0.000 n=30+29) windows/386

This brings time.Now back in line with Go 1.8 on darwin/amd64 and windows/amd64.

It's not obvious why windows/386 is still noticeably worse than Go 1.8,
but it's better than before this CL. The windows/386 speed is not too
important; the changes just keep the two architectures similar.

Change-Id: If69b94970c8a1a57910a371ee91e0d4e82e46c5d
Reviewed-on: https://go-review.googlesource.com/36428
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agodatabase/sql: replace the expr of timeunit * N with N * timeunit in test
Mikio Hara [Thu, 9 Feb 2017 03:32:33 +0000 (12:32 +0900)]
database/sql: replace the expr of timeunit * N with N * timeunit in test

Change-Id: I97981b30a9629916f896cb989cc2a42a8bdbef47
Reviewed-on: https://go-review.googlesource.com/36672
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agodatabase/sql: fix nits in test
Mikio Hara [Thu, 9 Feb 2017 03:28:51 +0000 (12:28 +0900)]
database/sql: fix nits in test

Change-Id: I451b33d8da8d97917f2b257e6a25392c6e6582db
Reviewed-on: https://go-review.googlesource.com/36671
Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile/internal/parser: improved syntax error for incorrect if/for/switch header
Robert Griesemer [Thu, 9 Feb 2017 01:56:41 +0000 (17:56 -0800)]
cmd/compile/internal/parser: improved syntax error for incorrect if/for/switch header

Starting the error message with "expecting" rather than "missing"
causes the syntax error mechanism to add additional helpful info
(it recognizes "expecting" but not "missing").

Fixes #17328.

Change-Id: I8482ca5e5a6a6b22e0ed0d831b7328e264156334
Reviewed-on: https://go-review.googlesource.com/36637
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agotime: format negative monotonic times correctly in Time.String
Caleb Spare [Wed, 8 Feb 2017 21:05:25 +0000 (13:05 -0800)]
time: format negative monotonic times correctly in Time.String

Fixes #18993

Change-Id: Ia1fa20b6d82384b07e9ba5512b909439e0bec2a5
Reviewed-on: https://go-review.googlesource.com/36611
Run-TryBot: Caleb Spare <cespare@gmail.com>
Reviewed-by: 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/syntax: differentiate between ';' and '\n' in syntax errors
Robert Griesemer [Thu, 9 Feb 2017 01:30:45 +0000 (17:30 -0800)]
cmd/compile/internal/syntax: differentiate between ';' and '\n' in syntax errors

Towards better syntax error messages: With this change, the parser knows whether
a semicolon was an actual ';' in the source, or whether it was an automatically
inserted semicolon as result of a '\n' or EOF. Using this information in error
messages makes them more understandable.

For #17328.

Change-Id: I8cd9accee8681b62569d0ecef922d38682b401eb
Reviewed-on: https://go-review.googlesource.com/36636
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agodatabase/sql: do not exhaust connection pool on conn request timeout
Daniel Theophanes [Wed, 8 Feb 2017 18:32:22 +0000 (10:32 -0800)]
database/sql: do not exhaust connection pool on conn request timeout

Previously if a context was canceled while it was waiting for a
connection request, that connection request would leak.

To prevent this remove the pending connection request if the
context is canceled and ensure no connection has been sent on the channel.
This requires a change to how the connection requests are represented in the DB.

Fixes #18995

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

8 years agodatabase/sql: fix typo
Kevin Burke [Wed, 8 Feb 2017 23:31:33 +0000 (15:31 -0800)]
database/sql: fix typo

Change-Id: I09fdcebb939417f18af09ed57f24460724cab64f
Reviewed-on: https://go-review.googlesource.com/36632
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agonet: merge FreeBSD and DragonFly sendfile support
Ian Lance Taylor [Wed, 8 Feb 2017 23:03:56 +0000 (15:03 -0800)]
net: merge FreeBSD and DragonFly sendfile support

The two files were identical except for comments.

Change-Id: Ifc300026c8e4584afa50a7b669099eaff146ea5d
Reviewed-on: https://go-review.googlesource.com/36631
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/gofmt: fix diff on Plan 9
David du Colombier [Wed, 8 Feb 2017 22:11:15 +0000 (23:11 +0100)]
cmd/gofmt: fix diff on Plan 9

On Plan 9, GNU diff is called ape/diff.

Fixes #18999.

Change-Id: I7cf6c23c97bcc47172bbf838fd9dd72aefa4c18b
Reviewed-on: https://go-review.googlesource.com/36650
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: David du Colombier <0intro@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agonet/http: don't modify Request in StripPrefix
Dmitri Shuralyov [Tue, 7 Feb 2017 15:57:33 +0000 (10:57 -0500)]
net/http: don't modify Request in StripPrefix

As of https://golang.org/cl/21530, rules are updated to state
that Handlers shouldn't modify the provided Request. This change
updates StripPrefix to follow that rule.

Resolves #18952.

Change-Id: I29bbb580722e871131fa75a97e6e038ec64fdfcd
Reviewed-on: https://go-review.googlesource.com/36483
Reviewed-by: Matt Layher <mdlayher@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/compile: handle DOT STRUCTLIT for zero-valued struct in SSA
Cherry Zhang [Wed, 8 Feb 2017 20:31:24 +0000 (15:31 -0500)]
cmd/compile: handle DOT STRUCTLIT for zero-valued struct in SSA

CL 35261 makes SSA handle zero-valued STRUCTLIT, but DOT operation
was not handled.

Fixes #18994.

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

8 years agocmd/compile: include linknames in export data
David Lazar [Fri, 2 Dec 2016 18:55:25 +0000 (13:55 -0500)]
cmd/compile: include linknames in export data

This lets the compiler inline functions that contain a linknamed symbol.
Previously, the net/http tests would fail to build with -l=4 because
the compiler inlined functions that call net.byteIndex (which is
linknamed to strings.IndexByte).

This changes only the compiler-specific export data, so we don't need to
bump the export format version number.

The following benchmark results show how the size of package export data
is impacted by this change. These benchmarks were created by compiling
the go1 benchmark and running `go tool pack x` to extract the export
data from the resulting .a files.

name                                          old bytes   new bytes   delta
bufio                                        3.48k ± 0%  3.58k ± 0%  +2.90%
bytes                                        5.05k ± 0%  5.16k ± 0%  +2.16%
compress/bzip2                               2.61k ± 0%  2.68k ± 0%  +2.68%
compress/flate                               5.07k ± 0%  5.14k ± 0%  +1.40%
compress/gzip                                8.26k ± 0%  8.40k ± 0%  +1.70%
container/list                               1.69k ± 0%  1.76k ± 0%  +4.07%
context                                      3.93k ± 0%  4.01k ± 0%  +1.86%
crypto                                       1.03k ± 0%  1.03k ± 0%  +0.39%
crypto/aes                                     475 ± 0%    475 ± 0%  +0.00%
crypto/cipher                                1.18k ± 0%  1.18k ± 0%  +0.00%
crypto/des                                     502 ± 0%    502 ± 0%  +0.00%
crypto/dsa                                   5.71k ± 0%  5.77k ± 0%  +1.16%
crypto/ecdsa                                 6.67k ± 0%  6.75k ± 0%  +1.08%
crypto/elliptic                              6.28k ± 0%  6.35k ± 0%  +1.07%
crypto/hmac                                    464 ± 0%    464 ± 0%  +0.00%
crypto/internal/cipherhw                       313 ± 0%    313 ± 0%  +0.00%
crypto/md5                                     691 ± 0%    695 ± 0%  +0.58%
crypto/rand                                  5.37k ± 0%  5.43k ± 0%  +1.23%
crypto/rc4                                     512 ± 0%    512 ± 0%  +0.00%
crypto/rsa                                   7.05k ± 0%  7.12k ± 0%  +1.05%
crypto/sha1                                    756 ± 0%    760 ± 0%  +0.53%
crypto/sha256                                  523 ± 0%    523 ± 0%  +0.00%
crypto/sha512                                  662 ± 0%    662 ± 0%  +0.00%
crypto/subtle                                  835 ± 0%    873 ± 0%  +4.55%
crypto/tls                                   28.1k ± 0%  28.5k ± 0%  +1.30%
crypto/x509                                  17.7k ± 0%  17.9k ± 0%  +1.04%
crypto/x509/pkix                             9.75k ± 0%  9.90k ± 0%  +1.50%
encoding                                       473 ± 0%    473 ± 0%  +0.00%
encoding/asn1                                1.41k ± 0%  1.42k ± 0%  +1.00%
encoding/base64                              1.67k ± 0%  1.69k ± 0%  +0.90%
encoding/binary                              2.65k ± 0%  2.76k ± 0%  +4.07%
encoding/gob                                 13.3k ± 0%  13.5k ± 0%  +1.65%
encoding/hex                                   854 ± 0%    857 ± 0%  +0.35%
encoding/json                                11.9k ± 0%  12.1k ± 0%  +1.71%
encoding/pem                                   484 ± 0%    484 ± 0%  +0.00%
errors                                         360 ± 0%    361 ± 0%  +0.28%
flag                                         7.32k ± 0%  7.42k ± 0%  +1.48%
fmt                                          1.42k ± 0%  1.42k ± 0%  +0.00%
go/ast                                       15.7k ± 0%  15.8k ± 0%  +1.07%
go/parser                                    7.48k ± 0%  7.59k ± 0%  +1.55%
go/scanner                                   3.88k ± 0%  3.94k ± 0%  +1.39%
go/token                                     3.51k ± 0%  3.53k ± 0%  +0.60%
hash                                           507 ± 0%    507 ± 0%  +0.00%
hash/crc32                                     685 ± 0%    685 ± 0%  +0.00%
internal/nettrace                              474 ± 0%    474 ± 0%  +0.00%
internal/pprof/profile                       8.29k ± 0%  8.36k ± 0%  +0.89%
internal/race                                  511 ± 0%    511 ± 0%  +0.00%
internal/singleflight                          966 ± 0%    969 ± 0%  +0.31%
internal/syscall/unix                          427 ± 0%    427 ± 0%  +0.00%
io                                           3.48k ± 0%  3.52k ± 0%  +1.15%
io/ioutil                                    5.30k ± 0%  5.38k ± 0%  +1.53%
log                                          4.46k ± 0%  4.53k ± 0%  +1.59%
math                                         3.72k ± 0%  3.75k ± 0%  +0.75%
math/big                                     8.91k ± 0%  9.01k ± 0%  +1.15%
math/rand                                    1.29k ± 0%  1.30k ± 0%  +0.46%
mime                                         2.59k ± 0%  2.63k ± 0%  +1.55%
mime/multipart                               3.61k ± 0%  3.68k ± 0%  +1.80%
mime/quotedprintable                         2.20k ± 0%  2.25k ± 0%  +2.50%
net                                          21.1k ± 0%  21.3k ± 0%  +1.10%
net/http                                     56.6k ± 0%  57.3k ± 0%  +1.28%
net/http/httptest                            33.6k ± 0%  34.1k ± 0%  +1.38%
net/http/httptrace                           14.4k ± 0%  14.5k ± 0%  +1.29%
net/http/internal                            2.70k ± 0%  2.77k ± 0%  +2.59%
net/textproto                                4.51k ± 0%  4.60k ± 0%  +1.82%
net/url                                      1.71k ± 0%  1.73k ± 0%  +1.41%
os                                           11.3k ± 0%  11.4k ± 0%  +1.36%
path                                           587 ± 0%    589 ± 0%  +0.34%
path/filepath                                4.46k ± 0%  4.55k ± 0%  +1.88%
reflect                                      6.39k ± 0%  6.43k ± 0%  +0.72%
regexp                                       5.82k ± 0%  5.88k ± 0%  +1.12%
regexp/syntax                                3.22k ± 0%  3.24k ± 0%  +0.62%
runtime                                      12.9k ± 0%  13.2k ± 0%  +1.94%
runtime/cgo                                    229 ± 0%    229 ± 0%  +0.00%
runtime/debug                                3.66k ± 0%  3.72k ± 0%  +1.86%
runtime/internal/atomic                        905 ± 0%    905 ± 0%  +0.00%
runtime/internal/sys                         2.00k ± 0%  2.05k ± 0%  +2.55%
runtime/pprof                                4.16k ± 0%  4.23k ± 0%  +1.66%
runtime/pprof/internal/protopprof            11.5k ± 0%  11.7k ± 0%  +1.27%
runtime/trace                                  354 ± 0%    354 ± 0%  +0.00%
sort                                         1.63k ± 0%  1.68k ± 0%  +2.94%
strconv                                      1.84k ± 0%  1.85k ± 0%  +0.54%
strings                                      3.87k ± 0%  3.97k ± 0%  +2.48%
sync                                         1.51k ± 0%  1.52k ± 0%  +0.33%
sync/atomic                                  1.58k ± 0%  1.60k ± 0%  +1.27%
syscall                                      53.2k ± 0%  53.3k ± 0%  +0.20%
testing                                      8.14k ± 0%  8.26k ± 0%  +1.49%
testing/internal/testdeps                      597 ± 0%    598 ± 0%  +0.17%
text/tabwriter                               3.09k ± 0%  3.14k ± 0%  +1.85%
text/template                                15.4k ± 0%  15.7k ± 0%  +1.89%
text/template/parse                          8.90k ± 0%  9.12k ± 0%  +2.46%
time                                         5.75k ± 0%  5.86k ± 0%  +1.86%
unicode                                      4.62k ± 0%  4.62k ± 0%  +0.07%
unicode/utf16                                  693 ± 0%    706 ± 0%  +1.88%
unicode/utf8                                 1.05k ± 0%  1.07k ± 0%  +1.14%
vendor/golang_org/x/crypto/chacha20poly1305  1.25k ± 0%  1.26k ± 0%  +0.64%
vendor/golang_org/x/crypto/curve25519          392 ± 0%    392 ± 0%  +0.00%
vendor/golang_org/x/crypto/poly1305            426 ± 0%    426 ± 0%  +0.00%
vendor/golang_org/x/net/http2/hpack          4.19k ± 0%  4.26k ± 0%  +1.69%
vendor/golang_org/x/net/idna                   355 ± 0%    355 ± 0%  +0.00%
vendor/golang_org/x/net/lex/httplex            609 ± 0%    615 ± 0%  +0.99%
vendor/golang_org/x/text/transform           1.31k ± 0%  1.31k ± 0%  +0.08%
vendor/golang_org/x/text/unicode/norm        5.78k ± 0%  5.90k ± 0%  +2.06%
vendor/golang_org/x/text/width               1.24k ± 0%  1.24k ± 0%  +0.16%
[Geo mean]                                    2.49k       2.52k       +1.10%

Fixes #18167.

Change-Id: Ia5b7e70adc9652c7ee9954ca2efc1c59fa79be2b
Reviewed-on: https://go-review.googlesource.com/33911
Run-TryBot: David Lazar <lazard@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Reviewed-by: David Chase <drchase@google.com>
8 years agonet/http/pprof: return error when requested profile duration exceeds WriteTimeout
Kale Blankenship [Mon, 23 Jan 2017 01:16:59 +0000 (17:16 -0800)]
net/http/pprof: return error when requested profile duration exceeds WriteTimeout

Updates Profile and Trace handlers to reject requests for durations >=
WriteTimeout.

Modifies go tool pprof to print the body of the http response when
status != 200.

Fixes #18755

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

8 years agocrypto/tls: fix link to more info about channel bindings
Максим Федосеев [Mon, 30 Jan 2017 12:11:01 +0000 (17:11 +0500)]
crypto/tls: fix link to more info about channel bindings

Link in the description of TLSUnique field of ConnectionState struct
leads to an article that is no longer available, so this commit
replaces it with link to a copy of the very same article on another
site.

Fixes #18842.

Change-Id: I8f8d298c4774dc0fbbad5042db0684bb3220aee8
Reviewed-on: https://go-review.googlesource.com/36052
Reviewed-by: Filippo Valsorda <hi@filippo.io>
Reviewed-by: Adam Langley <agl@golang.org>
8 years agodoc: remove the confusing use of CL
Jaana Burcu Dogan [Wed, 8 Feb 2017 19:17:47 +0000 (11:17 -0800)]
doc: remove the confusing use of CL

CL (change list) pops out of nowhere and confuses the
reader. Use "change" instead to be consistent with the
rest of the document.

Fixes #18989.

Change-Id: I525a63a195dc6bb992c8ad0f10c2f2e1b2b952df
Reviewed-on: https://go-review.googlesource.com/36564
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: remove unnecessary type conversions on s390x
Michael Munday [Tue, 7 Feb 2017 23:32:27 +0000 (18:32 -0500)]
cmd/compile: remove unnecessary type conversions on s390x

Some rules insert MOVDreg ops to ensure that type changes are kept.
If there is no type change (or the input is constant) then the MOVDreg
can be omitted, allowing further optimization.

Reduces the size of the .text section in the asm tool by ~33KB.

Change-Id: I386883bb35b843c7b99a269cd6840dca77cf4371
Reviewed-on: https://go-review.googlesource.com/36547
Run-TryBot: Michael Munday <munday@ca.ibm.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
8 years agogo/constant: use new math/big.IsInt and isUint predicates
Robert Griesemer [Wed, 8 Feb 2017 18:56:30 +0000 (10:56 -0800)]
go/constant: use new math/big.IsInt and isUint predicates

Slightly cleaner and more readable code.

Change-Id: I35263dbf338861b0a1bd62d59417b6a2c6a4e670
Reviewed-on: https://go-review.googlesource.com/36562
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agocmd/gofmt: use actual filename in gofmt -d output
haya14busa [Sat, 4 Feb 2017 13:22:14 +0000 (22:22 +0900)]
cmd/gofmt: use actual filename in gofmt -d output

By using actual filename, diff output of "gofmt -d" can be used with
other commands like "diffstat" and "patch".

Example:
  $ gofmt -d path/to/file.go | diffstat
  $ gofmt -d path/to/file.go > gofmt.patch
  $ patch -u -p0 < gofmt.patch

Fixes #18932

Change-Id: I21ce15eb77870d72f2c14bfd5e7c21e2c77dc9ab
Reviewed-on: https://go-review.googlesource.com/36374
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agobytes, strings: optimize Split*
Aliaksandr Valialkin [Tue, 7 Feb 2017 11:38:52 +0000 (13:38 +0200)]
bytes, strings: optimize Split*

The relevant benchmark results on linux/amd64:

bytes:

SplitSingleByteSeparator-4   25.7ms ± 5%   9.1ms ± 4%  -64.40%  (p=0.000 n=10+10)
SplitMultiByteSeparator-4    13.8ms ±20%   4.3ms ± 8%  -69.23%  (p=0.000 n=10+10)
SplitNSingleByteSeparator-4  1.88µs ± 9%  0.88µs ± 4%  -53.25%  (p=0.000 n=10+10)
SplitNMultiByteSeparator-4   4.83µs ±10%  1.32µs ± 9%  -72.65%  (p=0.000 n=10+10)

strings:

name                         old time/op  new time/op  delta
SplitSingleByteSeparator-4   21.4ms ± 8%   8.5ms ± 5%  -60.19%  (p=0.000 n=10+10)
SplitMultiByteSeparator-4    13.2ms ± 9%   3.9ms ± 4%  -70.29%  (p=0.000 n=10+10)
SplitNSingleByteSeparator-4  1.54µs ± 5%  0.75µs ± 7%  -51.21%  (p=0.000 n=10+10)
SplitNMultiByteSeparator-4   3.57µs ± 8%  1.01µs ±11%  -71.76%  (p=0.000 n=10+10)

Fixes #18973

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

8 years agodatabase/sql: record the context error in Rows if canceled
Daniel Theophanes [Tue, 7 Feb 2017 18:19:02 +0000 (10:19 -0800)]
database/sql: record the context error in Rows if canceled

Previously it was intended that Rows.Scan would return
an error and Rows.Err would return nil. This was problematic
because drivers could not differentiate between a normal
Rows.Close or a context cancel close.

The alternative is to require drivers to return a Scan to return
an error if the driver is closed while there are still rows to be read.
This is currently not how several drivers currently work and may be
difficult to detect when there are additional rows.

At the same time guard the the Rows.lasterr and prevent a close
while a Rows operation is active.

For the drivers that do not have Context methods, do not check for
context cancelation after the operation, but before for any operation
that may modify the database state.

Fixes #18961

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

8 years agocrypto/tls: document that only tickets are supported.
Adam Langley [Wed, 8 Feb 2017 17:47:34 +0000 (09:47 -0800)]
crypto/tls: document that only tickets are supported.

This change clarifies that only ticket-based resumption is supported by
crypto/tls. It's not clear where to document this for a server,
although perhaps it's obvious there because there's nowhere to plug in
the storage that would be needed by SessionID-based resumption.

Fixes #18607

Change-Id: Iaaed53e8d8f2f45c2f24c0683052df4be6340922
Reviewed-on: https://go-review.googlesource.com/36560
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agobytes: use Index in Count
Ilya Tocar [Tue, 7 Feb 2017 22:00:39 +0000 (16:00 -0600)]
bytes: use Index in Count

Similar to https://go-review.googlesource.com/28586,
but for package bytes instead of strings.
This provides simpler code and some performance gain.
Also update strings.Count to use the same code.

On AMD64 with heavily optimized Index I see:

name             old time/op    new time/op     delta
Count/10-6         47.3ns ± 0%     36.8ns ± 0%    -22.35%  (p=0.000 n=10+10)
Count/32-6          286ns ± 0%       38ns ± 0%    -86.71%  (p=0.000 n=10+10)
Count/4K-6         50.1µs ± 0%      4.4µs ± 0%    -91.18%  (p=0.000 n=10+10)
Count/4M-6         48.1ms ± 1%      4.5ms ± 0%    -90.56%  (p=0.000 n=10+9)
Count/64M-6         784ms ± 0%       73ms ± 0%    -90.73%  (p=0.000 n=10+10)
CountEasy/10-6     28.4ns ± 0%     31.0ns ± 0%     +9.23%  (p=0.000 n=10+10)
CountEasy/32-6     30.6ns ± 0%     37.0ns ± 0%    +20.92%  (p=0.000 n=10+10)
CountEasy/4K-6      186ns ± 0%      198ns ± 0%     +6.45%  (p=0.000 n=9+10)
CountEasy/4M-6      233µs ± 2%      234µs ± 2%       ~     (p=0.912 n=10+10)
CountEasy/64M-6    6.70ms ± 0%     6.68ms ± 1%       ~     (p=0.762 n=8+10)

name             old speed      new speed       delta
Count/10-6        211MB/s ± 0%    272MB/s ± 0%    +28.77%  (p=0.000 n=10+9)
Count/32-6        112MB/s ± 0%    842MB/s ± 0%   +652.84%  (p=0.000 n=10+10)
Count/4K-6       81.8MB/s ± 0%  927.6MB/s ± 0%  +1033.63%  (p=0.000 n=10+9)
Count/4M-6       87.2MB/s ± 1%  924.0MB/s ± 0%   +959.25%  (p=0.000 n=10+9)
Count/64M-6      85.6MB/s ± 0%  922.9MB/s ± 0%   +978.31%  (p=0.000 n=10+10)
CountEasy/10-6    352MB/s ± 0%    322MB/s ± 0%     -8.41%  (p=0.000 n=10+10)
CountEasy/32-6   1.05GB/s ± 0%   0.87GB/s ± 0%    -17.35%  (p=0.000 n=9+10)
CountEasy/4K-6   22.0GB/s ± 0%   20.6GB/s ± 0%     -6.33%  (p=0.000 n=10+10)
CountEasy/4M-6   18.0GB/s ± 2%   18.0GB/s ± 2%       ~     (p=0.912 n=10+10)
CountEasy/64M-6  10.0GB/s ± 0%   10.0GB/s ± 1%       ~     (p=0.762 n=8+10)

On 386, without asm version of Index:

Count/10-6         57.0ns ± 0%     56.9ns ± 0%   -0.11%  (p=0.006 n=10+9)
Count/32-6          340ns ± 0%      274ns ± 0%  -19.48%  (p=0.000 n=10+9)
Count/4K-6         49.5µs ± 0%     37.1µs ± 0%  -24.96%  (p=0.000 n=10+10)
Count/4M-6         51.1ms ± 0%     38.2ms ± 0%  -25.21%  (p=0.000 n=10+10)
Count/64M-6         818ms ± 0%      613ms ± 0%  -25.07%  (p=0.000 n=8+10)
CountEasy/10-6     60.0ns ± 0%     70.4ns ± 0%  +17.34%  (p=0.000 n=10+10)
CountEasy/32-6     81.1ns ± 0%     94.0ns ± 0%  +15.97%  (p=0.000 n=9+10)
CountEasy/4K-6     4.37µs ± 0%     4.39µs ± 0%   +0.30%  (p=0.000 n=10+9)
CountEasy/4M-6     4.43ms ± 0%     4.43ms ± 0%     ~     (p=0.579 n=10+10)
CountEasy/64M-6    70.9ms ± 0%     70.9ms ± 0%     ~     (p=0.912 n=10+10)

name             old speed      new speed       delta
Count/10-6        176MB/s ± 0%    176MB/s ± 0%   +0.10%  (p=0.000 n=10+9)
Count/32-6       93.9MB/s ± 0%  116.5MB/s ± 0%  +24.06%  (p=0.000 n=10+9)
Count/4K-6       82.7MB/s ± 0%  110.3MB/s ± 0%  +33.26%  (p=0.000 n=10+10)
Count/4M-6       82.1MB/s ± 0%  109.7MB/s ± 0%  +33.70%  (p=0.000 n=10+10)
Count/64M-6      82.0MB/s ± 0%  109.5MB/s ± 0%  +33.46%  (p=0.000 n=8+10)
CountEasy/10-6    167MB/s ± 0%    142MB/s ± 0%  -14.75%  (p=0.000 n=9+10)
CountEasy/32-6    395MB/s ± 0%    340MB/s ± 0%  -13.77%  (p=0.000 n=10+10)
CountEasy/4K-6    936MB/s ± 0%    934MB/s ± 0%   -0.29%  (p=0.000 n=10+9)
CountEasy/4M-6    947MB/s ± 0%    946MB/s ± 0%     ~     (p=0.591 n=10+10)
CountEasy/64M-6   947MB/s ± 0%    947MB/s ± 0%     ~     (p=0.867 n=10+10)

Change-Id: Ia76b247372b6f5b5d23a9f10253a86536a5153b3
Reviewed-on: https://go-review.googlesource.com/36489
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agohash/crc32: use sub-benchmarks
Russ Cox [Fri, 27 Jan 2017 19:14:50 +0000 (14:14 -0500)]
hash/crc32: use sub-benchmarks

Change-Id: Iae68a097a6897f1616f94fdc3548837ef200e66f
Reviewed-on: https://go-review.googlesource.com/36541
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
8 years agotime: bound file reads and validate LoadLocation argument
Brad Fitzpatrick [Tue, 7 Feb 2017 23:15:24 +0000 (23:15 +0000)]
time: bound file reads and validate LoadLocation argument

Fixes #18985

Change-Id: I956117f47d1d2b453b4786c7b78c1c944defeca0
Reviewed-on: https://go-review.googlesource.com/36551
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agocmd/gofmt: clear pattern match map at the correct time
Matthew Dempsky [Tue, 7 Feb 2017 23:29:18 +0000 (15:29 -0800)]
cmd/gofmt: clear pattern match map at the correct time

We need to clear the pattern match map after the recursive rewrite
applications, otherwise there might be lingering entries that cause
match to fail.

Fixes #18987.

Change-Id: I7913951c455c98932bda790861db6a860ebad032
Reviewed-on: https://go-review.googlesource.com/36546
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime: use atomic ops for fwdSig, make sigtable immutable
Ian Lance Taylor [Sat, 4 Feb 2017 05:13:30 +0000 (21:13 -0800)]
runtime: use atomic ops for fwdSig, make sigtable immutable

The fwdSig array is accessed by the signal handler, which may run in
parallel with other threads manipulating it via the os/signal package.
Use atomic accesses to ensure that there are no problems.

Move the _SigHandling flag out of the sigtable array. This makes sigtable
immutable and safe to read from the signal handler.

Change-Id: Icfa407518c4ebe1da38580920ced764898dfc9ad
Reviewed-on: https://go-review.googlesource.com/36321
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

8 years agoruntime: update android time_now call
David Crawshaw [Tue, 7 Feb 2017 22:35:51 +0000 (17:35 -0500)]
runtime: update android time_now call

This was broken in https://golang.org/cl/36255

Change-Id: Ib23323a745a650ac51b0ead161076f97efe6d7b7
Reviewed-on: https://go-review.googlesource.com/36543
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/go: clarify that tag lists are space-separated
Alberto Donizetti [Sat, 28 Jan 2017 10:29:53 +0000 (11:29 +0100)]
cmd/go: clarify that tag lists are space-separated

Apparently the current documentation is confusing users that
quickly skim the flags list at the top. Make very clear that
build tags are space-separated.

Updates #18800

Change-Id: I473552c5a2b70ca03d8bbbd2c76805f7f82b49a2
Reviewed-on: https://go-review.googlesource.com/35951
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Minux Ma <minux@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
8 years agoos: make Stdin.Stat() return ModeCharDevice if Stdin is console
Alex Brainman [Tue, 6 Dec 2016 23:49:45 +0000 (10:49 +1100)]
os: make Stdin.Stat() return ModeCharDevice if Stdin is console

CL 20845 changed Stdin.Stat() so it returns ModeNamedPipe.
But introduced TestStatStdin does not test what Stdin.Stat()
returns when Stdin is console.

This CL adjusts both TestStatStdin and Stdin.Stat
implementations to handle console. Return ModeCharDevice
from Stdin.Stat() when Stdin is console on windows,
just like it does on unix.

Fixes #14853.

Change-Id: I54d73caee2aea45a99618d11600d8e82fe20d0c0
Reviewed-on: https://go-review.googlesource.com/34090
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agoencoding/json: add Valid for checking validity of input bytes
Matt Layher [Tue, 13 Dec 2016 22:57:06 +0000 (17:57 -0500)]
encoding/json: add Valid for checking validity of input bytes

Fixes #18086

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

8 years agomath/big: add IsInt64/IsUint64 predicates
Robert Griesemer [Tue, 7 Feb 2017 19:34:20 +0000 (11:34 -0800)]
math/big: add IsInt64/IsUint64 predicates

Change-Id: Ia5ed3919cb492009ac8f66d175b47a69f83ee4f1
Reviewed-on: https://go-review.googlesource.com/36487
Reviewed-by: Alan Donovan <adonovan@google.com>
8 years agocmd/internal/obj: remove ATYPE
Matthew Dempsky [Tue, 7 Feb 2017 01:06:02 +0000 (17:06 -0800)]
cmd/internal/obj: remove ATYPE

In cmd/compile, we can directly construct obj.Auto to represent local
variables and attach them to the function's obj.LSym.

In preparation for being able to emit more precise DWARF info based on
other compiler available information (e.g., lexical scoping).

Change-Id: I9c4225ec59306bec42552838493022e0e9d70228
Reviewed-on: https://go-review.googlesource.com/36420
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
8 years agoruntime/pprof: document that profile names should not contain spaces.
Sameer Ajmani [Tue, 7 Feb 2017 18:12:25 +0000 (13:12 -0500)]
runtime/pprof: document that profile names should not contain spaces.

Change-Id: I967d897e812bee63b32bc2a7dcf453861b89b7e3
Reviewed-on: https://go-review.googlesource.com/36533
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
8 years agocmd/compile: do not use statictmp for zeroing
Cherry Zhang [Mon, 16 Jan 2017 17:37:11 +0000 (12:37 -0500)]
cmd/compile: do not use statictmp for zeroing

Also fixes #18687.

Change-Id: I7c6d47c71e632adf4c16937a29074621f771844c
Reviewed-on: https://go-review.googlesource.com/35261
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
8 years agocmd/compile/internal/ssa: use *obj.LSym in ExternSymbol
Matthew Dempsky [Tue, 7 Feb 2017 02:18:49 +0000 (18:18 -0800)]
cmd/compile/internal/ssa: use *obj.LSym in ExternSymbol

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