]> Cypherpunks.ru repositories - gostls13.git/log
gostls13.git
9 years ago[dev.power64] all: merge default (dd5014ed9b01) into dev.power64
Russ Cox [Wed, 29 Oct 2014 15:45:01 +0000 (11:45 -0400)]
[dev.power64] all: merge default (dd5014ed9b01) into dev.power64

Still passes on amd64.

LGTM=austin
R=austin
CC=golang-codereviews
https://golang.org/cl/165110043

9 years agofmt: fix one-letter typo in doc.go
Rob Pike [Wed, 29 Oct 2014 13:53:05 +0000 (06:53 -0700)]
fmt: fix one-letter typo in doc.go
Stupid mistake in previous CL.

TBR=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/166880043

9 years agocmd/objdump: skip extld test on plan9
Russ Cox [Wed, 29 Oct 2014 04:03:17 +0000 (00:03 -0400)]
cmd/objdump: skip extld test on plan9

TBR=iant
CC=golang-codereviews
https://golang.org/cl/164180043

9 years agoruntime: fix windows build
Russ Cox [Wed, 29 Oct 2014 04:02:29 +0000 (00:02 -0400)]
runtime: fix windows build

TBR=austin
CC=golang-codereviews
https://golang.org/cl/167820043

9 years agocmd/gc: fix build - remove unused variables in walkprint
Russ Cox [Wed, 29 Oct 2014 03:45:01 +0000 (23:45 -0400)]
cmd/gc: fix build - remove unused variables in walkprint

TBR=austin
CC=golang-codereviews
https://golang.org/cl/162420043

9 years agocmd/objdump: disassemble local text symbols
Ian Lance Taylor [Wed, 29 Oct 2014 03:25:55 +0000 (23:25 -0400)]
cmd/objdump: disassemble local text symbols

Fixes #8803.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/169720043

9 years agocmd/gc: fix internal compiler error in struct compare
Russ Cox [Wed, 29 Oct 2014 03:22:46 +0000 (23:22 -0400)]
cmd/gc: fix internal compiler error in struct compare

Fixes #9006.

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/167800043

9 years agofmt: fix documentation for %g and %G
Rob Pike [Wed, 29 Oct 2014 03:19:03 +0000 (20:19 -0700)]
fmt: fix documentation for %g and %G
It now echoes what strconv.FormatFloat says.

Fixes #9012.

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/169730043

9 years agodoc/go1.4.html: GODEBUG and assembler changes
Rob Pike [Wed, 29 Oct 2014 03:12:17 +0000 (20:12 -0700)]
doc/go1.4.html: GODEBUG and assembler changes

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/160660046

9 years agoruntime: add GODEBUG invalidptr setting
Russ Cox [Wed, 29 Oct 2014 01:53:31 +0000 (21:53 -0400)]
runtime: add GODEBUG invalidptr setting

Fixes #8861.
Fixes #8911.

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/165780043

9 years agoruntime: fix unrecovered panic on external thread
Russ Cox [Wed, 29 Oct 2014 01:53:09 +0000 (21:53 -0400)]
runtime: fix unrecovered panic on external thread

Fixes #8588.

LGTM=austin
R=austin
CC=golang-codereviews, khr
https://golang.org/cl/159700044

9 years agocmd/gc: avoid use of goprintf
Russ Cox [Wed, 29 Oct 2014 01:52:53 +0000 (21:52 -0400)]
cmd/gc: avoid use of goprintf

goprintf is a printf-like print for Go.
It is used in the code generated by 'defer print(...)' and 'go print(...)'.

Normally print(1, 2, 3) turns into

        printint(1)
        printint(2)
        printint(3)

but defer and go need a single function call to give the runtime;
they give the runtime something like goprintf("%d%d%d", 1, 2, 3).

Variadic functions like goprintf cannot be described in the new
type information world, so we have to replace it.

Replace with a custom function, so that defer print(1, 2, 3) turns
into

        defer func(a1, a2, a3 int) {
                print(a1, a2, a3)
        }(1, 2, 3)

(and then the print becomes three different printints as usual).

Fixes #8614.

LGTM=austin
R=austin
CC=golang-codereviews, r
https://golang.org/cl/159700043

9 years ago[dev.power64] cmd/5a, cmd/6a, cmd/8a, cmd/9a: make labels function-scoped
Russ Cox [Wed, 29 Oct 2014 01:50:16 +0000 (21:50 -0400)]
[dev.power64] cmd/5a, cmd/6a, cmd/8a, cmd/9a: make labels function-scoped

I removed support for jumping between functions years ago,
as part of doing the instruction layout for each function separately.

Given that, it makes sense to treat labels as function-scoped.
This lets each function have its own 'loop' label, for example.

Makes the assembly much cleaner and removes the last
reason anyone would reach for the 123(PC) form instead.

Note that this is on the dev.power64 branch, but it changes all
the assemblers. The change will ship in Go 1.5 (perhaps after
being ported into the new assembler).

Came up as part of CL 167730043.

LGTM=r
R=r
CC=austin, dave, golang-codereviews, minux
https://golang.org/cl/159670043

9 years agoos: fix write on Plan 9
David du Colombier [Tue, 28 Oct 2014 21:44:59 +0000 (22:44 +0100)]
os: fix write on Plan 9

In CL 160670043 the write function was changed
so a zero-length write is now allowed. This leads
the ExampleWriter_Init test to fail.

The reason is that Plan 9 preserves message
boundaries, while the os library expects systems
that don't preserve them. We have to ignore
zero-length writes so they will never turn into EOF.

This issue was previously discussed in CL 7406046.

LGTM=bradfitz
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/163510043

9 years agodoc/go1.4.html: breaking compiler change, no plugins in misc
Rob Pike [Tue, 28 Oct 2014 20:49:41 +0000 (13:49 -0700)]
doc/go1.4.html: breaking compiler change, no plugins in misc

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/166850043

9 years ago[dev.power64] runtime: fix atomicor8 for power64x
Austin Clements [Tue, 28 Oct 2014 19:57:33 +0000 (15:57 -0400)]
[dev.power64] runtime: fix atomicor8 for power64x

Power64 servers do not currently support sub-word size atomic
memory access, so atomicor8 uses word size atomic access.
However, previously atomicor8 made no attempt to align this
access, resulting in errors.  Fix this by aligning the pointer
to a word boundary and shifting the value appropriately.
Since atomicor8 is used in GC, add a test to runtime·check to
make sure this doesn't break in the future.

This also fixes an incorrect branch label, an incorrectly
sized argument move, and adds argument names to help go vet.

LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://golang.org/cl/165820043

9 years agodoc/asm: explain coordination with garbage collector
Russ Cox [Tue, 28 Oct 2014 19:51:06 +0000 (15:51 -0400)]
doc/asm: explain coordination with garbage collector

Also a few other minor changes.

Fixes #8712.

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/164150043

9 years agoos: fix build
Russ Cox [Tue, 28 Oct 2014 19:34:50 +0000 (15:34 -0400)]
os: fix build

TBR=crawshaw
CC=golang-codereviews
https://golang.org/cl/162390043

9 years agodoc/go1.4.html: new ports
Rob Pike [Tue, 28 Oct 2014 19:11:34 +0000 (12:11 -0700)]
doc/go1.4.html: new ports

LGTM=rsc, aram, minux
R=golang-codereviews, aram, minux, rsc
CC=golang-codereviews
https://golang.org/cl/162370045

9 years ago[dev.power64] 9a: correct generation of four argument ops
Austin Clements [Tue, 28 Oct 2014 19:08:09 +0000 (15:08 -0400)]
[dev.power64] 9a: correct generation of four argument ops

The "to" field was the penultimate argument to outgcode,
instead of the last argument, which swapped the third and
fourth operands.  The argument order was correct in a.y, so
just swap the meaning of the arguments in outgcode.  This
hadn't come up because we hadn't used these more obscure
operations in any hand-written assembly until now.

LGTM=rsc, dave
R=rsc, dave
CC=golang-codereviews
https://golang.org/cl/160690043

9 years agoos: do not assume syscall i/o funcs return n=0 on error
Russ Cox [Tue, 28 Oct 2014 19:00:13 +0000 (15:00 -0400)]
os: do not assume syscall i/o funcs return n=0 on error

Fixes #9007.

LGTM=iant, r
R=r, iant
CC=golang-codereviews
https://golang.org/cl/160670043

9 years agodoc/go1.4.html: vanity imports and internal packages
Rob Pike [Tue, 28 Oct 2014 17:51:28 +0000 (10:51 -0700)]
doc/go1.4.html: vanity imports and internal packages

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/165800043

9 years agoruntime: add PauseEnd array to MemStats and GCStats
Jens Frederich [Tue, 28 Oct 2014 16:35:25 +0000 (12:35 -0400)]
runtime: add PauseEnd array to MemStats and GCStats

Fixes #8787.

LGTM=rsc
R=rsc, dvyukov
CC=golang-codereviews
https://golang.org/cl/153670043

9 years agosyscall: fix ParseRoutingSockaddr with unexpected submessages
Russ Cox [Tue, 28 Oct 2014 15:35:00 +0000 (11:35 -0400)]
syscall: fix ParseRoutingSockaddr with unexpected submessages

No easy way to test (would have to actually trigger some routing
events from kernel) but the code is clearly wrong as written.
If the header says there is a submessage, we need to at least
skip over its bytes, not just continue to the next iteration.

Fixes #8203.

LGTM=r
R=r
CC=golang-codereviews, mikioh.mikioh, p
https://golang.org/cl/164140044

9 years agocmd/go: add get -f flag
Russ Cox [Tue, 28 Oct 2014 15:14:25 +0000 (11:14 -0400)]
cmd/go: add get -f flag

get -u now checks that remote repo paths match the
ones predicted by the import paths: if you are get -u'ing
rsc.io/pdf, it has to be checked out from the right location.
This is important in case the rsc.io/pdf redirect changes.

In some cases, people have good reasons to use
non-standard remote repos. Add -f flag to allow that.
The f can stand for force or fork, as you see fit.

Fixes #8850.

LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/164120043

9 years ago[dev.power64] liblink: emit wrapper code in correct place
Austin Clements [Tue, 28 Oct 2014 14:14:19 +0000 (10:14 -0400)]
[dev.power64] liblink: emit wrapper code in correct place

The wrapper code was being emitted before the stack
reservation, rather than after.

LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://golang.org/cl/161540043

9 years agonet: add test for lookupIPDeadline
Mikio Hara [Tue, 28 Oct 2014 07:20:49 +0000 (16:20 +0900)]
net: add test for lookupIPDeadline

Just to confirm the fix, by typing the follwing:
go test -run=TestLookupIPDeadline -dnsflood or
go test -run=TestLookupIPDeadline -dnsflood -tags netgo

Update #8602

LGTM=iant
R=iant
CC=golang-codereviews
https://golang.org/cl/166740043

9 years agodoc/go1.4.html: much of the go command's changes
Rob Pike [Tue, 28 Oct 2014 05:47:50 +0000 (22:47 -0700)]
doc/go1.4.html: much of the go command's changes
still need to do internal and import comments

LGTM=adg
R=golang-codereviews, adg
CC=golang-codereviews
https://golang.org/cl/160600043

9 years agodoc/go1.4.html: runtime and performance
Rob Pike [Tue, 28 Oct 2014 03:35:34 +0000 (20:35 -0700)]
doc/go1.4.html: runtime and performance

LGTM=adg, rsc
R=golang-codereviews, adg, bradfitz, dave, rsc
CC=golang-codereviews
https://golang.org/cl/164090044

9 years agoruntime: disable fake time on nacl
Russ Cox [Tue, 28 Oct 2014 00:47:15 +0000 (20:47 -0400)]
runtime: disable fake time on nacl

This leaked into the CL I submitted for Minux,
because I was testing it.

TBR=adg
CC=golang-codereviews
https://golang.org/cl/159600044

9 years agosyscall: accept pre-existing directories in nacl zip file
Russ Cox [Tue, 28 Oct 2014 00:45:16 +0000 (20:45 -0400)]
syscall: accept pre-existing directories in nacl zip file

NaCl creates /tmp. This lets the zip file populate it.

LGTM=adg
R=adg
CC=golang-codereviews
https://golang.org/cl/159600043

9 years agoruntime: add fake time support back.
Shenghou Ma [Tue, 28 Oct 2014 00:35:15 +0000 (20:35 -0400)]
runtime: add fake time support back.
Revived from CL 15690048.

Fixes #5356.

LGTM=rsc
R=adg, dvyukov, rsc
CC=golang-codereviews
https://golang.org/cl/101400043

9 years ago[dev.power64] runtime: fix cas64 on power64x
Dave Cheney [Tue, 28 Oct 2014 00:15:48 +0000 (11:15 +1100)]
[dev.power64] runtime: fix cas64 on power64x

cas64 was jumping to the wrong offset.

LGTM=minux, rsc
R=rsc, austin, minux
CC=golang-codereviews
https://golang.org/cl/158710043

9 years agodoc/go_mem.html: don't be clever
Rob Pike [Tue, 28 Oct 2014 00:08:50 +0000 (17:08 -0700)]
doc/go_mem.html: don't be clever

Add a short introductory section saying what most Go
programmers really need to know, which is that you
shouldn't have to read this document to understand
the behavior of your program.

LGTM=bradfitz, adg, tracey.brendan, iant, rsc, dsymonds
R=golang-codereviews, bradfitz, tracey.brendan, adg, iant, rsc, dsymonds
CC=golang-codereviews
https://golang.org/cl/158500043

9 years agospec: permit parentheses around builtin function names
Robert Griesemer [Mon, 27 Oct 2014 23:31:15 +0000 (16:31 -0700)]
spec: permit parentheses around builtin function names

Not a language change.

This is simply documenting the status quo which permits
builtin function names to be parenthesized in calls; e.g.,
both

        len(s)
and
        (((len)))(s)

are accepted by all compilers and go/types.

Changed the grammar by merging the details of BuiltinCall
with ordinary Calls. Also renamed the Call production to
Arguments which more clearly identifies that part of the
grammar and also matches better with its counterpart on
the declaration side (Parameters).

The fact that the first argument can be a type (for builtins)
or cannot be a type (for regular function calls) is expressed
in the prose, no need to make the grammar more complicated.

Fixes #9001.

LGTM=iant, r, rsc
R=r, rsc, iant, ken, dave
CC=golang-codereviews
https://golang.org/cl/160570043

9 years agohtml/template: fix build after encoding/js escaping change
Andrew Gerrand [Mon, 27 Oct 2014 23:18:44 +0000 (10:18 +1100)]
html/template: fix build after encoding/js escaping change

TBR=rsc
R=golang-codereviews
CC=golang-codereviews
https://golang.org/cl/159590043

9 years agotest: make maplinear more robust
Russ Cox [Mon, 27 Oct 2014 22:59:02 +0000 (18:59 -0400)]
test: make maplinear more robust

The test just doubled a certain number of times
and then gave up. On a mostly fast but occasionally
slow machine this may never make the test run
long enough to see the linear growth.

Change test to keep doubling until the first round
takes at least a full second, to reduce the effect of
occasional scheduling or other jitter.

The failure we saw had a time for the first round
of around 100ms.

Note that this test still passes once it sees a linear
effect, even with a very small total time.
The timeout here only applies to how long the execution
must be to support a reported failure.

LGTM=khr
R=khr
CC=golang-codereviews, rlh
https://golang.org/cl/164070043

9 years agoencoding/json: encode \t as \t instead of \u0009
Russ Cox [Mon, 27 Oct 2014 22:58:25 +0000 (18:58 -0400)]
encoding/json: encode \t as \t instead of \u0009

Shorter and easier to read form for a common character.

LGTM=bradfitz
R=adg, bradfitz
CC=golang-codereviews, zimmski
https://golang.org/cl/162340043

9 years ago[dev.power64] runtime: fix power64le build
Dave Cheney [Mon, 27 Oct 2014 22:56:33 +0000 (09:56 +1100)]
[dev.power64] runtime: fix power64le build

Brings defs_linux_power64le.h up to date with the big endian version.

LGTM=rsc
R=rsc, austin
CC=golang-codereviews
https://golang.org/cl/161470043

9 years ago[dev.power64] runtime: power64 fixes and ports of changes
Austin Clements [Mon, 27 Oct 2014 21:27:03 +0000 (17:27 -0400)]
[dev.power64] runtime: power64 fixes and ports of changes

Fix include paths that got moved in the great pkg/ rename.  Add
missing runtime/arch_* files for power64.  Port changes that
happened on default since branching to
runtime/{asm,atomic,sys_linux}_power64x.s (precise stacks,
calling convention change, various new and deleted functions.
Port struct renaming and fix some bugs in
runtime/defs_linux_power64.h.

LGTM=rsc
R=rsc, dave
CC=golang-codereviews
https://golang.org/cl/161450043

9 years agodoc/go1.4.html: first pieces of release notes
Rob Pike [Mon, 27 Oct 2014 21:23:24 +0000 (14:23 -0700)]
doc/go1.4.html: first pieces of release notes
Move the release notes into an HTML file.
Start writing the text.

LGTM=rsc
R=golang-codereviews, bradfitz, kamil.kisiel, tracey.brendan, rsc
CC=golang-codereviews
https://golang.org/cl/161350043

9 years ago[dev.power64] liblink: fix lost branch target
Austin Clements [Mon, 27 Oct 2014 21:19:41 +0000 (17:19 -0400)]
[dev.power64] liblink: fix lost branch target

A recent commit lost the branch target in the really-big-stack
case of splitstack, causing an infinite loop stack preempt
case.  Revive the branch target.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/157790044

9 years ago[dev.power64] all: merge default into dev.power64
Austin Clements [Mon, 27 Oct 2014 21:17:06 +0000 (17:17 -0400)]
[dev.power64] all: merge default into dev.power64

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/164110043

9 years agoruntime: fix endianness assumption when decoding ftab
Austin Clements [Mon, 27 Oct 2014 21:12:48 +0000 (17:12 -0400)]
runtime: fix endianness assumption when decoding ftab

The ftab ends with a half functab record consisting only of
the 'entry' field followed by a uint32 giving the offset of
the next table.  Previously, symtabinit assumed it could read
this uint32 as a uintptr.  Since this is unsafe on big endian,
explicitly read the offset as a uint32.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/157660043

9 years ago[dev.power64] liblink: power64 fixes and ports of changes
Austin Clements [Mon, 27 Oct 2014 19:25:40 +0000 (15:25 -0400)]
[dev.power64] liblink: power64 fixes and ports of changes

Ports of platform-specific changes that happened on default
after dev.power64 forked (fixes for c2go, wrapper math fixes,
moved stackguard field, stackguard1 support, precise stacks).
Bug fixes (missing AMOVW in instruction table, correct
unsigned 32-bit remainder).

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/164920044

9 years ago[dev.power64] cc: 8-byte align argument size on power64
Austin Clements [Mon, 27 Oct 2014 19:10:54 +0000 (15:10 -0400)]
[dev.power64] cc: 8-byte align argument size on power64

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/163370043

9 years agonet: if a DNS lookup times out, forget that it is in flight
Ian Lance Taylor [Mon, 27 Oct 2014 15:46:18 +0000 (08:46 -0700)]
net: if a DNS lookup times out, forget that it is in flight

Before this CL, if the system resolver does a very slow DNS
lookup for a particular host, all subsequent requests for that
host will hang waiting for that lookup to complete.  That is
more or less expected when Dial is called with no deadline.
When Dial has a deadline, though, we can accumulate a large
number of goroutines waiting for that slow DNS lookup.  Try to
avoid this problem by restarting the DNS lookup when it is
redone after a deadline is passed.

This CL also avoids creating an extra goroutine purely to
handle the deadline.

No test because we would have to simulate a slow DNS lookup
followed by a fast DNS lookup.

Fixes #8602.

LGTM=bradfitz
R=bradfitz, mikioh.mikioh
CC=golang-codereviews, r, rsc
https://golang.org/cl/154610044

9 years agomisc/makerelease/windows: fix 404 help URL in installer
Emil Hessman [Mon, 27 Oct 2014 01:43:14 +0000 (12:43 +1100)]
misc/makerelease/windows: fix 404 help URL in installer

ARPHELPLINK yields 404; update the URL.

While here, also prefix the ARPREADME and ARPURLINFOABOUT URL's with the HTTP scheme to make 'em clickable links in the Add or Remove Programs listing.

LGTM=adg
R=golang-codereviews
CC=adg, golang-codereviews
https://golang.org/cl/154580045

9 years agodoc/go_faq.html: fix a couple of nits
Rob Pike [Sun, 26 Oct 2014 18:27:55 +0000 (11:27 -0700)]
doc/go_faq.html: fix a couple of nits
Wrong article, one stylistic point that bothers someone (but not me).

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/156680043

9 years agocmd/go: pass $CGO_LDFLAGS to linker with the "gccgo" toolchain.
Peter Collingbourne [Sat, 25 Oct 2014 17:30:14 +0000 (10:30 -0700)]
cmd/go: pass $CGO_LDFLAGS to linker with the "gccgo" toolchain.

LGTM=iant
R=iant, minux
CC=golang-codereviews, golang-dev
https://golang.org/cl/157460043

9 years agocmd/go: add bzr support for vcs root checking
Gustavo Niemeyer [Fri, 24 Oct 2014 17:49:17 +0000 (15:49 -0200)]
cmd/go: add bzr support for vcs root checking

Complements the logic introduced in CL 147170043.

LGTM=rsc
R=rsc, gustavo
CC=golang-codereviews
https://golang.org/cl/147240043

9 years agodoc/go1.4.txt: unsafe is outside go1 compatibility guarantees
Rob Pike [Fri, 24 Oct 2014 16:52:11 +0000 (09:52 -0700)]
doc/go1.4.txt: unsafe is outside go1 compatibility guarantees

CC=golang-codereviews
https://golang.org/cl/164770043

9 years agounsafe: document that unsafe programs are not protected
Rob Pike [Fri, 24 Oct 2014 16:37:25 +0000 (09:37 -0700)]
unsafe: document that unsafe programs are not protected
The compatibility guideline needs to be clear about this even
though it means adding a clause that was not there from the
beginning. It has always been understood, so this isn't really
a change in policy, just in its expression.

LGTM=bradfitz, gri, rsc
R=golang-codereviews, bradfitz, gri, rsc
CC=golang-codereviews
https://golang.org/cl/162060043

9 years ago[dev.power64] liblink: print line numbers in disassembly on power64
Austin Clements [Fri, 24 Oct 2014 15:39:01 +0000 (11:39 -0400)]
[dev.power64] liblink: print line numbers in disassembly on power64

Matching other platforms.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/161320043

9 years agonet/http/pprof: run GC for /debug/pprof/heap?gc=1
Russ Cox [Fri, 24 Oct 2014 14:58:13 +0000 (10:58 -0400)]
net/http/pprof: run GC for /debug/pprof/heap?gc=1

We force runtime.GC before WriteHeapProfile with -test.heapprofile.
Make it possible to do the same with the HTTP interface.

Some servers only run a GC every few minutes.
On such servers, the heap profile will be a few minutes stale,
which may be too old to be useful.

Requested by private mail.

LGTM=dvyukov
R=dvyukov
CC=golang-codereviews
https://golang.org/cl/161990043

9 years agocmd/gc: synthesize zeroed value for non-assignment context
Russ Cox [Fri, 24 Oct 2014 14:27:39 +0000 (10:27 -0400)]
cmd/gc: synthesize zeroed value for non-assignment context

CL 157910047 introduced code to turn a node representing
a zeroed composite literal into N, the nil Node* pointer
(which represents any zero, not the Go literal nil).

That's great for assignments like x = T{}, but it doesn't work
when T{} is used in a value context like T{}.v or x == T{}.
Fix those.

Should have no effect on performance; confirmed.
The deltas below are noise (compare ns/op):

benchmark                          old ns/op      new ns/op      delta
BenchmarkBinaryTree17              2902919192     2915228424     +0.42%
BenchmarkFannkuch11                2597417605     2630363685     +1.27%
BenchmarkFmtFprintfEmpty           73.7           74.8           +1.49%
BenchmarkFmtFprintfString          196            199            +1.53%
BenchmarkFmtFprintfInt             213            217            +1.88%
BenchmarkFmtFprintfIntInt          336            356            +5.95%
BenchmarkFmtFprintfPrefixedInt     289            294            +1.73%
BenchmarkFmtFprintfFloat           415            416            +0.24%
BenchmarkFmtManyArgs               1281           1271           -0.78%
BenchmarkGobDecode                 10271734       10307978       +0.35%
BenchmarkGobEncode                 8985021        9079442        +1.05%
BenchmarkGzip                      410233227      412266944      +0.50%
BenchmarkGunzip                    102114554      103272443      +1.13%
BenchmarkHTTPClientServer          45297          44993          -0.67%
BenchmarkJSONEncode                19499741       19498489       -0.01%
BenchmarkJSONDecode                76436733       74247497       -2.86%
BenchmarkMandelbrot200             4273814        4307292        +0.78%
BenchmarkGoParse                   4024594        4028937        +0.11%
BenchmarkRegexpMatchEasy0_32       131            135            +3.05%
BenchmarkRegexpMatchEasy0_1K       328            333            +1.52%
BenchmarkRegexpMatchEasy1_32       115            117            +1.74%
BenchmarkRegexpMatchEasy1_1K       931            948            +1.83%
BenchmarkRegexpMatchMedium_32      216            217            +0.46%
BenchmarkRegexpMatchMedium_1K      72669          72857          +0.26%
BenchmarkRegexpMatchHard_32        3818           3809           -0.24%
BenchmarkRegexpMatchHard_1K        121398         121945         +0.45%
BenchmarkRevcomp                   613996550      615145436      +0.19%
BenchmarkTemplate                  93678525       93267391       -0.44%
BenchmarkTimeParse                 414            411            -0.72%
BenchmarkTimeFormat                396            399            +0.76%

Fixes #8947.

LGTM=r
R=r, dave
CC=golang-codereviews
https://golang.org/cl/162130043

9 years agodoc/go1.4: encoding/csv
Russ Cox [Fri, 24 Oct 2014 04:48:34 +0000 (00:48 -0400)]
doc/go1.4: encoding/csv

CC=golang-codereviews
https://golang.org/cl/162140043

9 years agoencoding/csv: for Postgres, unquote empty strings, quote \.
Russ Cox [Fri, 24 Oct 2014 03:44:47 +0000 (23:44 -0400)]
encoding/csv: for Postgres, unquote empty strings, quote \.

In theory both of these lines encode the same three fields:

        a,,c
        a,"",c

However, Postgres defines that when importing CSV, the unquoted
version is treated as NULL (missing), while the quoted version is
treated as a string value (empty string). If the middle field is supposed to
be an integer value, the first line can be imported (NULL is okay), but
the second line cannot (empty string is not).

Postgres's import command (COPY FROM) has an option to force
the unquoted empty to be interpreted as a string but it does not
have an option to force the quoted empty to be interpreted as a NULL.

From http://www.postgresql.org/docs/9.0/static/sql-copy.html:

        The CSV format has no standard way to distinguish a NULL
        value from an empty string. PostgreSQL's COPY handles this
        by quoting. A NULL is output as the NULL parameter string
        and is not quoted, while a non-NULL value matching the NULL
        parameter string is quoted. For example, with the default
        settings, a NULL is written as an unquoted empty string,
        while an empty string data value is written with double
        quotes (""). Reading values follows similar rules. You can
        use FORCE_NOT_NULL to prevent NULL input comparisons for
        specific columns.

Therefore printing the unquoted empty is more flexible for
imports into Postgres than printing the quoted empty.

In addition to making the output more useful with Postgres, not
quoting empty strings makes the output smaller and easier to read.
It also matches the behavior of Microsoft Excel and Google Drive.

Since we are here and making concessions for Postgres, handle this
case too (again quoting the Postgres docs):

        Because backslash is not a special character in the CSV
        format, \., the end-of-data marker, could also appear as a
        data value. To avoid any misinterpretation, a \. data value
        appearing as a lone entry on a line is automatically quoted
        on output, and on input, if quoted, is not interpreted as
        the end-of-data marker. If you are loading a file created by
        another application that has a single unquoted column and
        might have a value of \., you might need to quote that value
        in the input file.

Fixes #7586.

LGTM=bradfitz
R=bradfitz
CC=golang-codereviews
https://golang.org/cl/164760043

9 years agospec: minimal documention of unsafe.Pointer conversions
Robert Griesemer [Thu, 23 Oct 2014 16:45:11 +0000 (09:45 -0700)]
spec: minimal documention of unsafe.Pointer conversions

Per suggestion from rsc as a result of the dicussion of
(abandoned) CL 153110044.

Fixes #7192.

LGTM=r, rsc, iant
R=r, rsc, iant, ken
CC=golang-codereviews
https://golang.org/cl/163050043

9 years agogccgo_install.html: the 4.9 release series supports Go 1.2
Ian Lance Taylor [Thu, 23 Oct 2014 03:41:13 +0000 (20:41 -0700)]
gccgo_install.html: the 4.9 release series supports Go 1.2

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/163760043

9 years ago[dev.power64] runtime: fix SigaltstackT definition for power64le
Dave Cheney [Wed, 22 Oct 2014 21:58:10 +0000 (08:58 +1100)]
[dev.power64] runtime: fix SigaltstackT definition for power64le

Also updated defs3_linux.go but had to manually edit defs_linux_power64le.h. Will regenerate the file when cgo is working natively on ppc64.

LGTM=austin
R=rsc, austin
CC=golang-codereviews
https://golang.org/cl/158360043

9 years ago[dev.power64] runtime: fix early GC of Defer objects
Austin Clements [Wed, 22 Oct 2014 20:39:31 +0000 (16:39 -0400)]
[dev.power64] runtime: fix early GC of Defer objects

go_bootstrap was panicking during runtime initialization
(under runtime.main) because Defer objects were being
prematurely GC'd.  This happened because of an incorrect
change to runtime·unrollgcprog_m to make it endian-agnostic
during the conversion of runtime bitmaps to byte arrays.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/161960044

9 years ago[dev.power64] all: merge default into dev.power64
Austin Clements [Wed, 22 Oct 2014 19:51:54 +0000 (15:51 -0400)]
[dev.power64] all: merge default into dev.power64

This brings dev.power64 up-to-date with the current tip of
default.  go_bootstrap is still panicking with a bad defer
when initializing the runtime (even on amd64).

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/152570049

9 years ago[dev.power64] runtime: Fix broken merge of noasm.go
Austin Clements [Wed, 22 Oct 2014 18:02:04 +0000 (14:02 -0400)]
[dev.power64] runtime: Fix broken merge of noasm.go

The earlier dev.power64 merge missed the port of
runtime/noasm.goc to runtime/noasm_arm.go.  This CL fixes this
by moving noasm_arm.go to noasm.go and adding a +build to
share the file between arm and power64.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/158350043

9 years agobuild: merge the great pkg/ rename into dev.power64
Austin Clements [Wed, 22 Oct 2014 17:25:37 +0000 (13:25 -0400)]
build: merge the great pkg/ rename into dev.power64

This also removes pkg/runtime/traceback_lr.c, which was ported
to Go in an earlier commit and then moved to
runtime/traceback.go.

Reviewer: rsc@golang.org
          rsc: LGTM

9 years agosync: release Pool memory during second and later GCs
Dmitriy Vyukov [Wed, 22 Oct 2014 16:23:49 +0000 (20:23 +0400)]
sync: release Pool memory during second and later GCs

Pool memory was only being released during the first GC after the first Put.

Put assumes that p.local != nil means p is on the allPools list.
poolCleanup (called during each GC) removed each pool from allPools
but did not clear p.local, so each pool was cleared by exactly one GC
and then never cleared again.

This bug was introduced late in the Go 1.3 release cycle.

Fixes #8979.

LGTM=rsc
R=golang-codereviews, bradfitz, r, rsc
CC=golang-codereviews, khr
https://golang.org/cl/162980043

9 years ago[dev.power64] build: merge default into dev.power64
Austin Clements [Wed, 22 Oct 2014 15:21:16 +0000 (11:21 -0400)]
[dev.power64] build: merge default into dev.power64

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/160200044

9 years agotest: add more cases to recover.go
Ian Lance Taylor [Wed, 22 Oct 2014 15:06:15 +0000 (08:06 -0700)]
test: add more cases to recover.go

test16 used to fail with gccgo.  The withoutRecoverRecursive
test would have failed in some possible implementations.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/151630043

9 years agoCONTRIBUTORS: add Austin Clements's google.com email (Google CLA)
Russ Cox [Wed, 22 Oct 2014 14:51:30 +0000 (10:51 -0400)]
CONTRIBUTORS: add Austin Clements's google.com email (Google CLA)

LGTM=bradfitz, austin
R=austin
CC=bradfitz, golang-codereviews
https://golang.org/cl/158330045

9 years agoruntime/cgo: encode BLX directly, fixes one clang build error on arm
Dave Cheney [Wed, 22 Oct 2014 01:30:15 +0000 (12:30 +1100)]
runtime/cgo: encode BLX directly, fixes one clang build error on arm

Fixes #8348.

Trying to work around clang's dodgy support for .arch by reverting to the external assembler didn't work out so well. Minux had a much better solution to encode the instructions we need as .word directives which avoids .arch altogether.

I've confirmed with gdb that this form produces the expected machine code

Dump of assembler code for function crosscall_arm1:
   0x00000000 <+0>: push {r4, r5, r6, r7, r8, r9, r10, r11, r12, lr}
   0x00000004 <+4>: mov r4, r0
   0x00000008 <+8>: mov r5, r1
   0x0000000c <+12>: mov r0, r2
   0x00000010 <+16>: blx r5
   0x00000014 <+20>: blx r4
   0x00000018 <+24>: pop {r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}

There is another compilation failure that blocks building Go with clang on arm

# ../misc/cgo/test
# _/home/dfc/go/misc/cgo/test
/tmp/--407b12.s: Assembler messages:
/tmp/--407b12.s:59: Error: selected processor does not support ARM mode `blx r0'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
FAIL _/home/dfc/go/misc/cgo/test [build failed]

I'll open a new issue for that

LGTM=iant
R=iant, minux
CC=golang-codereviews
https://golang.org/cl/158180047

9 years agomisc/makerelease: set version number in Windows installer
Jens Frederich [Tue, 21 Oct 2014 23:56:26 +0000 (10:56 +1100)]
misc/makerelease: set version number in Windows installer

Set correct version number at Windows installer based on
Go's Mercurial tag.

Name                                     | Version
------------------------------------------------
Go Programming Language amd64 go1.3.3    | 1.3.3
Go Programming Language amd64 go1.2rc3   | 1.2
Go Programming Language amd64 go1.2beta1 | 1.2

Fixes #8239.

LGTM=adg
R=adg, c.emil.hessman, alex.brainman
CC=golang-codereviews
https://golang.org/cl/160950044

9 years agoundo CL 156430044 / 5d69cad4faaf
Dave Cheney [Tue, 21 Oct 2014 23:42:13 +0000 (23:42 +0000)]
undo CL 156430044 / 5d69cad4faaf

Partial undo, changes to ldelf.c retained.

Some platforms are still not working even with the integrated assembler disabled, will have to find another solution.

««« original CL description
cmd/cgo: disable clang's integrated assembler

Fixes #8348.

Clang's internal assembler (introduced by default in clang 3.4) understands the .arch directive, but doesn't change the default value of -march. This causes the build to fail when we use BLX (armv5 and above) when clang is compiled for the default armv4t architecture (which appears to be the default on all the distros I've used).

This is probably a clang bug, so work around it for the time being by disabling the integrated assembler when compiling the cgo assembly shim.

This CL also includes a small change to ldelf.c which was required as clang 3.4 and above generate more weird symtab entries.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/156430044
»»»

LGTM=minux
R=iant, minux
CC=golang-codereviews
https://golang.org/cl/162880044

9 years agoruntime: warn that cputicks() might not be monotonic.
Keith Randall [Tue, 21 Oct 2014 21:46:07 +0000 (14:46 -0700)]
runtime: warn that cputicks() might not be monotonic.

Get rid of gocputicks(), it is no longer used.

LGTM=bradfitz, dave
R=golang-codereviews, bradfitz, dave, minux
CC=golang-codereviews
https://golang.org/cl/161110044

9 years agocmd/ld: fix addstrdata for big-endian systems
Ian Lance Taylor [Tue, 21 Oct 2014 17:10:11 +0000 (10:10 -0700)]
cmd/ld: fix addstrdata for big-endian systems

LGTM=rsc
R=minux, rsc
CC=golang-codereviews
https://golang.org/cl/158280043

9 years agotime: panic with a more helpful error on use of invalid Timer
Brad Fitzpatrick [Tue, 21 Oct 2014 11:26:40 +0000 (13:26 +0200)]
time: panic with a more helpful error on use of invalid Timer

Fixes #8721

LGTM=rsc
R=r, rsc
CC=golang-codereviews
https://golang.org/cl/155620045

9 years agocmd/gc: disallow call of *T method using **T variable
Russ Cox [Tue, 21 Oct 2014 02:04:12 +0000 (22:04 -0400)]
cmd/gc: disallow call of *T method using **T variable

This brings cmd/gc in line with the spec on this question.
It might break existing code, but that code was not conformant
with the spec.

Credit to Rémy for finding the broken code.

Fixes #6366.

LGTM=r
R=golang-codereviews, r
CC=adonovan, golang-codereviews, gri
https://golang.org/cl/129550043

9 years agocompress/gzip: allow stopping at end of first stream
Russ Cox [Tue, 21 Oct 2014 02:03:46 +0000 (22:03 -0400)]
compress/gzip: allow stopping at end of first stream

Allows parsing some file formats that assign special
meaning to which stream data is found in.

Will do the same for compress/bzip2 once this is
reviewed and submitted.

Fixes #6486.

LGTM=nigeltao
R=nigeltao, dan.kortschak
CC=adg, bradfitz, golang-codereviews, r
https://golang.org/cl/159120044

9 years agocmd/cgo: disable clang's integrated assembler
Dave Cheney [Mon, 20 Oct 2014 23:28:39 +0000 (23:28 +0000)]
cmd/cgo: disable clang's integrated assembler

Fixes #8348.

Clang's internal assembler (introduced by default in clang 3.4) understands the .arch directive, but doesn't change the default value of -march. This causes the build to fail when we use BLX (armv5 and above) when clang is compiled for the default armv4t architecture (which appears to be the default on all the distros I've used).

This is probably a clang bug, so work around it for the time being by disabling the integrated assembler when compiling the cgo assembly shim.

This CL also includes a small change to ldelf.c which was required as clang 3.4 and above generate more weird symtab entries.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/156430044

9 years agodebug/pe: use appropriate type for sizeofOptionalHeader32
Alex Brainman [Mon, 20 Oct 2014 23:02:33 +0000 (10:02 +1100)]
debug/pe: use appropriate type for sizeofOptionalHeader32

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/157220043

9 years agoruntime: fix flaky TestBlockProfile test
Keith Randall [Mon, 20 Oct 2014 22:48:42 +0000 (15:48 -0700)]
runtime: fix flaky TestBlockProfile test

It has been failing periodically on Solaris/x64.
Change blockevent so it always records an event if we called
SetBlockProfileRate(1), even if the time delta is negative or zero.

Hopefully this will fix the test on Solaris.
Caveat: I don't actually know what the Solaris problem is, this
is just an educated guess.

LGTM=dave
R=dvyukov, dave
CC=golang-codereviews
https://golang.org/cl/159150043

9 years agoruntime: handle non-nil-terminated environment strings on Plan 9
David du Colombier [Mon, 20 Oct 2014 21:03:03 +0000 (23:03 +0200)]
runtime: handle non-nil-terminated environment strings on Plan 9

Russ Cox pointed out that environment strings are not
required to be nil-terminated on Plan 9.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/159130044

9 years agoos/exec: fix number of expected file descriptors on Plan 9
David du Colombier [Mon, 20 Oct 2014 21:01:32 +0000 (23:01 +0200)]
os/exec: fix number of expected file descriptors on Plan 9

Since CL 104570043 and 112720043, we are using the
nsec system call instead of /dev/bintime on Plan 9.

LGTM=rsc
R=rsc
CC=aram, golang-codereviews
https://golang.org/cl/155590043

9 years agoflag: roll back 156390043 (flag setting)
Rob Pike [Mon, 20 Oct 2014 20:28:00 +0000 (13:28 -0700)]
flag: roll back 156390043 (flag setting)
Shell scripts depend on the old behavior too often.
It's too late to make this change.

LGTM=bradfitz
R=rsc, bradfitz
CC=golang-codereviews
https://golang.org/cl/161890044

9 years agocmd/go: set exit status for failing "go generate" run.
Rob Pike [Mon, 20 Oct 2014 20:27:41 +0000 (13:27 -0700)]
cmd/go: set exit status for failing "go generate" run.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/154360048

9 years agoreflect: fix TestAllocations now that interfaces hold only pointers
Ian Lance Taylor [Mon, 20 Oct 2014 18:10:03 +0000 (11:10 -0700)]
reflect: fix TestAllocations now that interfaces hold only pointers

This test was failing but did not break the build because it
was not run when -test.short was used.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/157150043

9 years agoreflect: allocate correct type in assignTo and cvtT2I
Ian Lance Taylor [Mon, 20 Oct 2014 17:43:43 +0000 (10:43 -0700)]
reflect: allocate correct type in assignTo and cvtT2I

I came across this while debugging a GC problem in gccgo.
There is code in assignTo and cvtT2I that handles assignment
to all interface values.  It allocates an empty interface even
if the real type is a non-empty interface.  The fields are
then set for a non-empty interface, but the memory is recorded
as holding an empty interface.  This means that the GC has
incorrect information.

This is extremely unlikely to fail, because the code in the GC
that handles empty interfaces looks like this:

obj = nil;
typ = eface->type;
if(typ != nil) {
        if(!(typ->kind&KindDirectIface) || !(typ->kind&KindNoPointers))
                obj = eface->data;

In the current runtime the condition is always true--if
KindDirectIface is set, then KindNoPointers is clear--and we
always want to set obj = eface->data.  So the question is what
happens when we incorrectly store a non-empty interface value
in memory marked as an empty interface.  In that case
eface->type will not be a *rtype as we expect, but will
instead be a pointer to an Itab.  We are going to use this
pointer to look at a *rtype kind field.  The *rtype struct
starts out like this:

type rtype struct {
        size          uintptr
        hash          uint32            // hash of type; avoids computation in hash tables
        _             uint8             // unused/padding
        align         uint8             // alignment of variable with this type
        fieldAlign    uint8             // alignment of struct field with this type
        kind          uint8             // enumeration for C

An Itab always has at least two pointers, so on a
little-endian 64-bit system the kind field will be the high
byte of the second pointer.  This will normally be zero, so
the test of typ->kind will succeed, which is what we want.

On a 32-bit system it might be possible to construct a failing
case by somehow getting the Itab for an interface with one
method to be immediately followed by a word that is all ones.
The effect would be that the test would sometimes fail and the
GC would not mark obj, leading to an invalid dangling
pointer.  I have not tried to construct this test.

I noticed this in gccgo, where this error is much more likely
to cause trouble for a rather random reason: gccgo uses a
different layout of rtype, and in gccgo the kind field happens
to be the low byte of a pointer, not the high byte.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/155450044

9 years agoregexp: fix TestOnePassCutoff
Russ Cox [Mon, 20 Oct 2014 16:16:46 +0000 (12:16 -0400)]
regexp: fix TestOnePassCutoff

The stack blowout can no longer happen,
but we can still test that too-complex regexps
are rejected.

Replacement for CL 162770043.

LGTM=iant, r
R=r, iant
CC=bradfitz, golang-codereviews
https://golang.org/cl/162860043

9 years agoregexp/syntax: fix validity testing of zero repeats
Ian Lance Taylor [Mon, 20 Oct 2014 15:12:45 +0000 (08:12 -0700)]
regexp/syntax: fix validity testing of zero repeats

This is already tested by TestRE2Exhaustive, but the build has
not broken because that test is not run when using -test.short.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/155580043

9 years agodebug/pe: remove use of unsafe
Russ Cox [Mon, 20 Oct 2014 15:10:00 +0000 (11:10 -0400)]
debug/pe: remove use of unsafe

Helps in environments with restricted support for unsafe.

LGTM=bradfitz
R=r, bradfitz
CC=dsymonds, golang-codereviews
https://golang.org/cl/156410044

9 years agocmd/gc: emit code for extern = <N>
Daniel Morsing [Mon, 20 Oct 2014 14:59:10 +0000 (15:59 +0100)]
cmd/gc: emit code for extern = <N>

https://golang.org/cl/152700045/ made it possible for struct literals assigned to globals to use <N> as the RHS. Normally, this is to zero out variables on first use. Because globals are already zero (or their linker initialized value), we just ignored this.

Now that <N> can occur from non-initialization code, we need to emit this code. We don't use <N> for initialization of globals any more, so this shouldn't cause any excessive zeroing.

Fixes #8961.

LGTM=rsc
R=golang-codereviews, rsc
CC=bradfitz, golang-codereviews
https://golang.org/cl/154540044

9 years agoencoding/gob: add custom decoder buffer for performance
Rob Pike [Mon, 20 Oct 2014 14:33:08 +0000 (07:33 -0700)]
encoding/gob: add custom decoder buffer for performance
As we did with encoding, provide a trivial byte reader for
faster decoding. We can also reduce some of the copying
by doing the allocation all at once using a slightly different
interface from byte buffers.

benchmark                            old ns/op     new ns/op     delta
BenchmarkEndToEndPipe                13368         12902         -3.49%
BenchmarkEndToEndByteBuffer          5969          5642          -5.48%
BenchmarkEndToEndSliceByteBuffer     479485        470798        -1.81%
BenchmarkEncodeComplex128Slice       92367         92201         -0.18%
BenchmarkEncodeFloat64Slice          39990         38960         -2.58%
BenchmarkEncodeInt32Slice            30510         27938         -8.43%
BenchmarkEncodeStringSlice           33753         33365         -1.15%
BenchmarkDecodeComplex128Slice       232278        196704        -15.32%
BenchmarkDecodeFloat64Slice          150258        128191        -14.69%
BenchmarkDecodeInt32Slice            133806        115748        -13.50%
BenchmarkDecodeStringSlice           335117        300534        -10.32%

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/154360049

9 years agodoc/go1.4.txt: add compress/* Reset note
Brad Fitzpatrick [Mon, 20 Oct 2014 08:02:25 +0000 (10:02 +0200)]
doc/go1.4.txt: add compress/* Reset note

CC=golang-codereviews
https://golang.org/cl/156430043

9 years agocompress/flate: add Reset() to allow reusing large buffers to compress multiple buffers
James Robinson [Mon, 20 Oct 2014 01:58:02 +0000 (12:58 +1100)]
compress/flate: add Reset() to allow reusing large buffers to compress multiple buffers

This adds a Reset() to compress/flate's decompressor and plumbs that through
to compress/zlib and compress/gzip's Readers so callers can avoid large
allocations when performing many inflate operations. In particular this
preserves the allocation of the decompressor.hist buffer, which is 32kb and
overwritten as needed while inflating.

On the benchmark described in issue 6317, produces the following speedup on
my 2.3ghz Intel Core i7 MBP with go version devel +6b696a34e0af Sun Aug 03
15:14:59 2014 -0700 darwin/amd64:

blocked.text w/out patch vs blocked.text w/ patch:
benchmark           old ns/op      new ns/op      delta
BenchmarkGunzip     8371577533     7927917687     -5.30%

benchmark           old allocs     new allocs     delta
BenchmarkGunzip     176818         148519         -16.00%

benchmark           old bytes     new bytes     delta
BenchmarkGunzip     292184936     12739528      -95.64%

flat.text vs blocked.text w/patch:
benchmark           old ns/op      new ns/op      delta
BenchmarkGunzip     7939447827     7927917687     -0.15%

benchmark           old allocs     new allocs     delta
BenchmarkGunzip     90702          148519         +63.74%

benchmark           old bytes     new bytes     delta
BenchmarkGunzip     9959528       12739528      +27.91%

Similar speedups to those bradfitz saw in  https://golang.org/cl/13416045.

Fixes #6317.
Fixes #7950.

LGTM=nigeltao
R=golang-codereviews, bradfitz, dan.kortschak, adg, nigeltao, jamesr
CC=golang-codereviews
https://golang.org/cl/97140043

9 years agodoc/go1.4.txt: flags can now be set at most once
Rob Pike [Sun, 19 Oct 2014 17:33:50 +0000 (10:33 -0700)]
doc/go1.4.txt: flags can now be set at most once

CC=golang-codereviews
https://golang.org/cl/161820043

9 years agoflag: disallow setting flags multiple times
Rob Pike [Sun, 19 Oct 2014 17:33:22 +0000 (10:33 -0700)]
flag: disallow setting flags multiple times
This is a day 1 error in the flag package: It did not check
that a flag was set at most once on the command line.
Because user-defined flags may have more general
properties, the check applies only to the standard flag
types in this package: bool, string, etc.

Fixes #8960.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/156390043

9 years agoregexp: correct doc comment for ReplaceAllLiteralString
Ian Lance Taylor [Sun, 19 Oct 2014 17:28:27 +0000 (10:28 -0700)]
regexp: correct doc comment for ReplaceAllLiteralString

Fixes #8959.

LGTM=adg
R=golang-codereviews, adg
CC=golang-codereviews
https://golang.org/cl/161790043

9 years agoencoding/gob: fix print format in generated decoder helpers
Rob Pike [Sun, 19 Oct 2014 13:44:50 +0000 (06:44 -0700)]
encoding/gob: fix print format in generated decoder helpers
Needed a %% to quote a percent in the format.

LGTM=adg
R=golang-codereviews, adg
CC=golang-codereviews
https://golang.org/cl/156330043

9 years agoruntime: dequeue the correct SudoG
Keith Randall [Sun, 19 Oct 2014 04:02:49 +0000 (21:02 -0700)]
runtime: dequeue the correct SudoG

select {
       case <- c:
       case <- c:
}

In this case, c.recvq lists two SudoGs which have the same G.
So we can't use the G as the key to dequeue the correct SudoG,
as that key is ambiguous.  Dequeueing the wrong SudoG ends up
freeing a SudoG that is still in c.recvq.

The fix is to use the actual SudoG pointer as the key.

LGTM=dvyukov
R=rsc, bradfitz, dvyukov, khr
CC=austin, golang-codereviews
https://golang.org/cl/159040043

9 years agotext/template: fix bug in pipelined variadics
Rob Pike [Sat, 18 Oct 2014 18:22:05 +0000 (11:22 -0700)]
text/template: fix bug in pipelined variadics
Simple bug in argument processing: The final arg may
be the pipeline value, in which case it gets bound to the
fixed argument section. The code got that wrong. Easy
to fix.

Fixes #8950.

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/161750043

9 years agoencoding/gob: use simple append-only buffer for encoding
Rob Pike [Sat, 18 Oct 2014 03:51:15 +0000 (20:51 -0700)]
encoding/gob: use simple append-only buffer for encoding
Bytes buffers have more API and are a little slower. Since appending
is a key part of the path in encode, using a faster implementation
speeds things up measurably.
The couple of positive swings are likely garbage-collection related
since memory allocation looks different in the benchmark now.
I am not concerned by them.

benchmark                            old ns/op     new ns/op     delta
BenchmarkEndToEndPipe                6620          6388          -3.50%
BenchmarkEndToEndByteBuffer          3548          3600          +1.47%
BenchmarkEndToEndSliceByteBuffer     336678        367980        +9.30%
BenchmarkEncodeComplex128Slice       78199         71297         -8.83%
BenchmarkEncodeFloat64Slice          37731         32258         -14.51%
BenchmarkEncodeInt32Slice            26780         22977         -14.20%
BenchmarkEncodeStringSlice           35882         26492         -26.17%
BenchmarkDecodeComplex128Slice       194819        185126        -4.98%
BenchmarkDecodeFloat64Slice          120538        120102        -0.36%
BenchmarkDecodeInt32Slice            106442        107275        +0.78%
BenchmarkDecodeStringSlice           272902        269866        -1.11%

LGTM=ruiu
R=golang-codereviews, ruiu
CC=golang-codereviews
https://golang.org/cl/160990043