]> Cypherpunks repositories - gostls13.git/log
gostls13.git
11 years agoencoding/xml: Makes XML Marshaler take into account XMLName field from anonymous...
Alexander Zhavnerchik [Tue, 8 Apr 2014 15:12:51 +0000 (11:12 -0400)]
encoding/xml: Makes XML Marshaler take into account XMLName field from anonymous field

Fixes #7614.

LGTM=rsc
R=golang-codereviews, r, rsc, dan.kortschak, applezinc
CC=golang-codereviews
https://golang.org/cl/79210044

11 years agoA+C: Alexander Zhavnerchik (individual CLA)
Russ Cox [Tue, 8 Apr 2014 15:12:46 +0000 (11:12 -0400)]
A+C: Alexander Zhavnerchik (individual CLA)

Generated by addca.

R=gobot
CC=golang-codereviews
https://golang.org/cl/85490043

11 years agoreflect, runtime: fix crash in GC due to reflect.call + precise GC
Russ Cox [Tue, 8 Apr 2014 15:11:35 +0000 (11:11 -0400)]
reflect, runtime: fix crash in GC due to reflect.call + precise GC

Given
        type Outer struct {
                *Inner
                ...
        }
the compiler generates the implementation of (*Outer).M dispatching to
the embedded Inner. The implementation is logically:
        func (p *Outer) M() {
                (p.Inner).M()
        }
but since the only change here is the replacement of one pointer
receiver with another, the actual generated code overwrites the
original receiver with the p.Inner pointer and then jumps to the M
method expecting the *Inner receiver.

During reflect.Value.Call, we create an argument frame and the
associated data structures to describe it to the garbage collector,
populate the frame, call reflect.call to run a function call using
that frame, and then copy the results back out of the frame. The
reflect.call function does a memmove of the frame structure onto the
stack (to set up the inputs), runs the call, and the memmoves the
stack back to the frame structure (to preserve the outputs).

Originally reflect.call did not distinguish inputs from outputs: both
memmoves were for the full stack frame. However, in the case where the
called function was one of these wrappers, the rewritten receiver is
almost certainly a different type than the original receiver. This is
not a problem on the stack, where we use the program counter to
determine the type information and understand that during (*Outer).M
the receiver is an *Outer while during (*Inner).M the receiver in the
same memory word is now an *Inner. But in the statically typed
argument frame created by reflect, the receiver is always an *Outer.
Copying the modified receiver pointer off the stack into the frame
will store an *Inner there, and then if a garbage collection happens
to scan that argument frame before it is discarded, it will scan the
*Inner memory as if it were an *Outer. If the two have different
memory layouts, the collection will intepret the memory incorrectly.

Fix by only copying back the results.

Fixes #7725.

LGTM=khr
R=khr
CC=dave, golang-codereviews
https://golang.org/cl/85180043

11 years agoruntime/race: more precise handling of channel synchronization
Dmitriy Vyukov [Tue, 8 Apr 2014 06:18:20 +0000 (10:18 +0400)]
runtime/race: more precise handling of channel synchronization
It turns out there is a relatively common pattern that relies on
inverted channel semaphore:

gate := make(chan bool, N)
for ... {
        // limit concurrency
        gate <- true
        go func() {
                foo(...)
                <-gate
        }()
}
// join all goroutines
for i := 0; i < N; i++ {
        gate <- true
}

So handle synchronization on inverted semaphores with cap>1.
Fixes #7718.

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

11 years agoliblink: remove code that is never executed
Ian Lance Taylor [Tue, 8 Apr 2014 05:12:26 +0000 (22:12 -0700)]
liblink: remove code that is never executed

This code tests linkmode == LinkExternal but is only invoked
by the compiler/assembler, not the linker.

Update #7164

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

11 years agodoc/go1.3.html: drop support for windows 2000
Rob Pike [Tue, 8 Apr 2014 04:07:17 +0000 (14:07 +1000)]
doc/go1.3.html: drop support for windows 2000

LGTM=bradfitz, alex.brainman
R=golang-codereviews, bradfitz, alex.brainman
CC=golang-codereviews
https://golang.org/cl/85190043

11 years agoruntime: make sure associated defers are copyable before trying to copy a stack.
Keith Randall [Tue, 8 Apr 2014 00:40:00 +0000 (17:40 -0700)]
runtime: make sure associated defers are copyable before trying to copy a stack.

Defers generated from cgo lie to us about their argument layout.
Mark those defers as not copyable.

CL 83820043 contains an additional test for this code and should be
checked in (and enabled) after this change is in.

Fixes bug 7695.

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

11 years agoruntime: fix heapdump bugs.
Keith Randall [Tue, 8 Apr 2014 00:35:44 +0000 (17:35 -0700)]
runtime: fix heapdump bugs.

Iterate the right number of times in arrays and channels.
Handle channels with zero-sized objects in them.
Output longer type names if we have them.
Compute argument offset correctly.

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

11 years agonet: move error messages related to OpError into net.go
Mikio Hara [Mon, 7 Apr 2014 21:14:49 +0000 (06:14 +0900)]
net: move error messages related to OpError into net.go

Also makes ErrWriteToConnected more appropriate; it's used
not only UDPConn operations but UnixConn operations.

Update #4856

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

11 years agonet: remove "net:" prefix from error messages
Mikio Hara [Mon, 7 Apr 2014 21:14:19 +0000 (06:14 +0900)]
net: remove "net:" prefix from error messages

The prefix was not uniformly applied and is probably better
left off for using with OpError.

Update #4856

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

11 years agocmd/go: Check error from SWIG link step.
Albert Strasheim [Mon, 7 Apr 2014 19:59:55 +0000 (12:59 -0700)]
cmd/go: Check error from SWIG link step.

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

11 years agonet/textproto: simplify common header interning
Brad Fitzpatrick [Mon, 7 Apr 2014 17:39:24 +0000 (10:39 -0700)]
net/textproto: simplify common header interning

Takes advantage of CL 83740044, to optimize map[string] lookup
from []byte key.

Deletes code.

No conditional check for gccgo, since Ian plans to add this
to gccgo before GCC 4.10 (Go 1.3).

benchmark                   old ns/op     new ns/op     delta
BenchmarkReadMIMEHeader     6066          5086          -16.16%

benchmark                   old allocs     new allocs     delta
BenchmarkReadMIMEHeader     12             12             +0.00%

benchmark                   old bytes     new bytes     delta
BenchmarkReadMIMEHeader     1317          1317          +0.00%

Update #3512

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

11 years agolibbio, libmach: warnings from the Plan 9 tool chain
Lucio De Re [Mon, 7 Apr 2014 15:40:13 +0000 (08:40 -0700)]
libbio, libmach: warnings from the Plan 9 tool chain

Superficial inconsistencies that trigger warnings in
Plan 9.  Small enough to be considered trivial and
seemingly benign outside of the Plan 9 environment.

LGTM=iant
R=golang-codereviews, 0intro, iant
CC=golang-codereviews
https://golang.org/cl/73460043

11 years agonet: fix data race in benchmark
Dmitriy Vyukov [Mon, 7 Apr 2014 07:00:07 +0000 (11:00 +0400)]
net: fix data race in benchmark
If an error happens on a connection, server goroutine can call b.Logf
after benchmark finishes.
So join both client and server goroutines.
Update #7718

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

11 years agoA+C: StalkR (individual CLA)
Brad Fitzpatrick [Mon, 7 Apr 2014 03:23:45 +0000 (20:23 -0700)]
A+C: StalkR (individual CLA)

Generated by addca.

R=gobot
CC=golang-codereviews
https://golang.org/cl/84710045

11 years agobuild: remove depdenency on GNU make
Andrew Gerrand [Mon, 7 Apr 2014 01:34:35 +0000 (11:34 +1000)]
build: remove depdenency on GNU make

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

11 years agocmd/8g: fix liveness for 387 build (including plan9)
Russ Cox [Sun, 6 Apr 2014 14:30:02 +0000 (10:30 -0400)]
cmd/8g: fix liveness for 387 build (including plan9)

TBR=khr
CC=golang-codereviews
https://golang.org/cl/84570045

11 years agosyscall: use unsafe.Pointer instead of uintptr on windows when possible
Alex Brainman [Sun, 6 Apr 2014 02:18:01 +0000 (12:18 +1000)]
syscall: use unsafe.Pointer instead of uintptr on windows when possible

Fixes #7171

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

11 years agocmd/gc: compute size of keys & values before making map bucket
Keith Randall [Fri, 4 Apr 2014 19:58:19 +0000 (12:58 -0700)]
cmd/gc: compute size of keys & values before making map bucket

Fixes #7547

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

11 years agoruntime: fix plan9 warning.
Keith Randall [Fri, 4 Apr 2014 15:15:27 +0000 (08:15 -0700)]
runtime: fix plan9 warning.

I have no idea what this code is for, but it pretty
clearly needs to be uint64, not uint32.

LGTM=aram
R=0intro, aram
CC=golang-codereviews
https://golang.org/cl/84410043

11 years agocmd/gc: check duplicate keys in maps with interface{} key type
Jan Ziak [Fri, 4 Apr 2014 14:46:23 +0000 (16:46 +0200)]
cmd/gc: check duplicate keys in maps with interface{} key type

Fixes #7214

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

11 years agocmd/6g, cmd/8g: disable Duff's device on NaCl.
Rémy Oudompheng [Fri, 4 Apr 2014 06:42:35 +0000 (08:42 +0200)]
cmd/6g, cmd/8g: disable Duff's device on NaCl.

Native Client forbids jumps/calls to arbitrary locations and
enforces a particular alignement, which makes the Duff's device
ineffective.

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

11 years agonet: fix format string in TestAcceptIgnoreSomeErrors
Alex Brainman [Fri, 4 Apr 2014 06:36:01 +0000 (17:36 +1100)]
net: fix format string in TestAcceptIgnoreSomeErrors

LGTM=mikioh.mikioh
R=golang-codereviews, mikioh.mikioh
CC=golang-codereviews
https://golang.org/cl/84340043

11 years agoos/exec: always try appropriate command extensions during Cmd.Start on windows
Alex Brainman [Fri, 4 Apr 2014 05:26:15 +0000 (16:26 +1100)]
os/exec: always try appropriate command extensions during Cmd.Start on windows

Update #7362
Fixes #7377
Fixes #7570

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

11 years agonet: drop unnecessary indirection from PacketConn tests
Mikio Hara [Fri, 4 Apr 2014 02:45:53 +0000 (11:45 +0900)]
net: drop unnecessary indirection from PacketConn tests

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

11 years agocmd/gc: fix build
Mikio Hara [Fri, 4 Apr 2014 00:55:19 +0000 (09:55 +0900)]
cmd/gc: fix build

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

11 years agocmd/gc, runtime: make GODEBUG=gcdead=1 mode work with liveness
Russ Cox [Fri, 4 Apr 2014 00:33:25 +0000 (20:33 -0400)]
cmd/gc, runtime: make GODEBUG=gcdead=1 mode work with liveness

Trying to make GODEBUG=gcdead=1 work with liveness
and in particular ambiguously live variables.

1. In the liveness computation, mark all ambiguously live
variables as live for the entire function, except the entry.
They are zeroed directly after entry, and we need them not
to be poisoned thereafter.

2. In the liveness computation, compute liveness (and deadness)
for all parameters, not just pointer-containing parameters.
Otherwise gcdead poisons untracked scalar parameters and results.

3. Fix liveness debugging print for -live=2 to use correct bitmaps.
(Was not updated for compaction during compaction CL.)

4. Correct varkill during map literal initialization.
Was killing the map itself instead of the inserted value temp.

5. Disable aggressive varkill cleanup for call arguments if
the call appears in a defer or go statement.

6. In the garbage collector, avoid bug scanning empty
strings. An empty string is two zeros. The multiword
code only looked at the first zero and then interpreted
the next two bits in the bitmap as an ordinary word bitmap.
For a string the bits are 11 00, so if a live string was zero
length with a 0 base pointer, the poisoning code treated
the length as an ordinary word with code 00, meaning it
needed poisoning, turning the string into a poison-length
string with base pointer 0. By the same logic I believe that
a live nil slice (bits 11 01 00) will have its cap poisoned.
Always scan full multiword struct.

7. In the runtime, treat both poison words (PoisonGC and
PoisonStack) as invalid pointers that warrant crashes.

Manual testing as follows:

- Create a script called gcdead on your PATH containing:

        #!/bin/bash
        GODEBUG=gcdead=1 GOGC=10 GOTRACEBACK=2 exec "$@"
- Now you can build a test and then run 'gcdead ./foo.test'.
- More importantly, you can run 'go test -short -exec gcdead std'
   to run all the tests.

Fixes #7676.

While here, enable the precise scanning of slices, since that was
disabled due to bugs like these. That now works, both with and
without gcdead.

Fixes #7549.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83410044

11 years agonet: don't export netFD closeRead and closeWrite methods
Mikio Hara [Fri, 4 Apr 2014 00:07:44 +0000 (09:07 +0900)]
net: don't export netFD closeRead and closeWrite methods

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

11 years agocmd/dist: reflect local changes to tree in goversion
Mike Andrews [Thu, 3 Apr 2014 23:31:41 +0000 (16:31 -0700)]
cmd/dist: reflect local changes to tree in goversion

runtime.Version() requires a trailing "+" when
tree had local modifications at time of build.

Fixes #7701

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

11 years agoruntime: test malformed address fault and fix on OS X
Russ Cox [Thu, 3 Apr 2014 23:07:33 +0000 (19:07 -0400)]
runtime: test malformed address fault and fix on OS X

The garbage collector poison pointers
(0x6969696969696969 and 0x6868686868686868)
are malformed addresses on amd64.
That is, they are not 48-bit addresses sign extended
to 64 bits. This causes a different kind of hardware fault
than the usual 'unmapped page' when accessing such
an address, and OS X 10.9.2 sends the resulting SIGSEGV
incorrectly, making it look like it was user-generated
rather than kernel-generated and does not include the
faulting address. This means that in GODEBUG=gcdead=1
mode, if there is a bug and something tries to dereference
a poisoned pointer, the runtime delivers the SIGSEGV to
os/signal and returns to the faulting code, which faults
again, causing the process to hang instead of crashing.

Fix by rewriting "user-generated" SIGSEGV on OS X to
look like a kernel-generated SIGSEGV with fault address
0xb01dfacedebac1e.

I chose that address because (1) when printed in hex
during a crash, it is obviously spelling out English text,
(2) there are no current Google hits for that pointer,
which will make its origin easy to find once this CL
is indexed, and (3) it is not an altogether inaccurate
description of the situation.

Add a test. Maybe other systems will break too.

LGTM=khr
R=golang-codereviews, khr
CC=golang-codereviews, iant, ken
https://golang.org/cl/83270049

11 years agoruntime: handle fault during runtime more like unexpected fault address
Russ Cox [Thu, 3 Apr 2014 23:05:59 +0000 (19:05 -0400)]
runtime: handle fault during runtime more like unexpected fault address

Delaying the runtime.throw until here will print more information.
In particular it will print the signal and code values, which means
it will show the fault address.

The canpanic checks were added recently, in CL 75320043.
They were just not added in exactly the right place.

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

11 years agocmd/gc, runtime: optimize map[string] lookup from []byte key
Russ Cox [Thu, 3 Apr 2014 23:05:17 +0000 (19:05 -0400)]
cmd/gc, runtime: optimize map[string] lookup from []byte key

Brad has been asking for this for a while.
I have resisted because I wanted to find a more general way to
do this, one that would keep the performance of code introducing
variables the same as the performance of code that did not.
(See golang.org/issue/3512#c20).

I have not found the more general way, and recent changes to
remove ambiguously live temporaries have blown away the
property I was trying to preserve, so that's no longer a reason
not to make the change.

Fixes #3512.

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

11 years agoruntime: use mincore correctly in addrspace_free
Russ Cox [Thu, 3 Apr 2014 23:04:47 +0000 (19:04 -0400)]
runtime: use mincore correctly in addrspace_free

Fixes #7476.

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

11 years agocmd/gc: reject builtin function calls in len(fixed array) constants
Russ Cox [Thu, 3 Apr 2014 23:04:33 +0000 (19:04 -0400)]
cmd/gc: reject builtin function calls in len(fixed array) constants

Fixes #7385.

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

11 years agocmd/cc: emit gc bitmaps in read-only memory
Russ Cox [Thu, 3 Apr 2014 23:04:15 +0000 (19:04 -0400)]
cmd/cc: emit gc bitmaps in read-only memory

Cuts hello world by 70kB, because we don't write
those names into the symbol table.

Update #6853

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/80370045

11 years agogo/doc: fix ToText
Robert Griesemer [Thu, 3 Apr 2014 22:52:04 +0000 (15:52 -0700)]
go/doc: fix ToText

Fixes #6769.

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

11 years agofmt: fix go syntax formatting of []byte(nil)
Shenghou Ma [Thu, 3 Apr 2014 20:11:03 +0000 (16:11 -0400)]
fmt: fix go syntax formatting of []byte(nil)
Fixes #7639.

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

11 years agonet: accept a few more errors in Accept4 wrapper
Russ Cox [Thu, 3 Apr 2014 20:10:45 +0000 (16:10 -0400)]
net: accept a few more errors in Accept4 wrapper

Fixes #7271.

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

11 years agonet/url: add test of "Windows" file URL
Russ Cox [Thu, 3 Apr 2014 20:10:33 +0000 (16:10 -0400)]
net/url: add test of "Windows" file URL

This is just testing the status quo, so that any future attempt
to change it will make the test break and redirect the person
making the change to look at issue 6027.

Fixes #6027.

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

11 years agoarchive/tar: add support for GNU sparse files.
David Thomas [Thu, 3 Apr 2014 20:01:04 +0000 (20:01 +0000)]
archive/tar: add support for GNU sparse files.

Supports all the current GNU tar sparse formats, including the
old GNU format and the GNU PAX format versions 0.0, 0.1, and 1.0.
Fixes #3864.

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

11 years agoA+C: David Thomas (individual CLA)
Russ Cox [Thu, 3 Apr 2014 20:00:05 +0000 (16:00 -0400)]
A+C: David Thomas (individual CLA)

Generated by addca.

R=gobot
CC=golang-codereviews
https://golang.org/cl/81400045

11 years agoruntime: fix fault during arm software floating point
Russ Cox [Thu, 3 Apr 2014 19:39:48 +0000 (15:39 -0400)]
runtime: fix fault during arm software floating point

The software floating point runs with m->locks++
to avoid being preempted; recognize this case in panic
and undo it so that m->locks is maintained correctly
when panicking.

Fixes #7553.

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

11 years agonet/http: clarify Request fields' client-vs-server semantics
Brad Fitzpatrick [Thu, 3 Apr 2014 04:05:41 +0000 (21:05 -0700)]
net/http: clarify Request fields' client-vs-server semantics

Fixes #7682

LGTM=adg
R=golang-codereviews, adg
CC=dsymonds, golang-codereviews, iant
https://golang.org/cl/83800043

11 years agoruntime: print up to 10 words of arguments
Russ Cox [Thu, 3 Apr 2014 03:00:40 +0000 (23:00 -0400)]
runtime: print up to 10 words of arguments

The old limit of 5 was chosen because we didn't actually know how
many bytes of arguments there were; 5 was a halfway point between
printing some useful information and looking ridiculous.

Now we know how many bytes of arguments there are, and we stop
the printing when we reach that point, so the "looking ridiculous" case
doesn't happen anymore: we only print actual argument words.
The cutoff now serves only to truncate very long (but real) argument lists.

In multiple debugging sessions recently (completely unrelated bugs)
I have been frustrated by not seeing more of the long argument lists:
5 words is only 2.5 interface values or strings, and not even 2 slices.
Double the max amount we'll show.

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

11 years agocmd/ld: get rid of map.bucket's data field from dwarf info.
Keith Randall [Thu, 3 Apr 2014 02:46:47 +0000 (19:46 -0700)]
cmd/ld: get rid of map.bucket's data field from dwarf info.

The data field is the generic array that acts as a standin
for the keys and values arrays for the generic runtime code.
We want to substitute the keys and values arrays for the data
array, not just add keys and values in addition to it.

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

11 years agoruntime: check that new slice cap doesn't overflow
Dave Cheney [Thu, 3 Apr 2014 02:44:44 +0000 (13:44 +1100)]
runtime: check that new slice cap doesn't overflow

Fixes #7550.

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

11 years agocmd/gc: fix build
Dave Cheney [Thu, 3 Apr 2014 00:34:31 +0000 (11:34 +1100)]
cmd/gc: fix build

Darwin 10.6 (gcc 4.2) and some older versions of gcc default to C90 mode, not C99 mode. Silence the warning.

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

11 years agonet: don't export netFD readFrom, writeTo, readMsg, writeMsg methods
Ian Lance Taylor [Thu, 3 Apr 2014 00:06:51 +0000 (17:06 -0700)]
net: don't export netFD readFrom, writeTo, readMsg, writeMsg methods

There is no way to call them from outside the net package.
They are used to implement UCPConn.ReadMsgUDP and similar.

LGTM=mikioh.mikioh
R=golang-codereviews, mikioh.mikioh
CC=golang-codereviews
https://golang.org/cl/83730044

11 years agocmd/pack: fix format string error in log message
Dave Cheney [Wed, 2 Apr 2014 22:58:10 +0000 (09:58 +1100)]
cmd/pack: fix format string error in log message

Fixes #7693.

pack.go:347: possible formatting directive in Fatal call

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

11 years agocrypto/tls: deflake TestConnReadNonzeroAndEOF
Brad Fitzpatrick [Wed, 2 Apr 2014 21:31:57 +0000 (14:31 -0700)]
crypto/tls: deflake TestConnReadNonzeroAndEOF

Fixes #7683

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

11 years agoruntime: revert change to PoisonPtr value
Russ Cox [Wed, 2 Apr 2014 20:55:30 +0000 (16:55 -0400)]
runtime: revert change to PoisonPtr value

Submitted accidentally in CL 83630044.
Fixes various builds.

TBR=khr
CC=golang-codereviews
https://golang.org/cl/83100047

11 years agocmd/gc, cmd/ld, runtime: compact liveness bitmaps
Russ Cox [Wed, 2 Apr 2014 20:49:27 +0000 (16:49 -0400)]
cmd/gc, cmd/ld, runtime: compact liveness bitmaps

Reduce footprint of liveness bitmaps by about 5x.

1. Mark all liveness bitmap symbols as 4-byte aligned
(they were aligned to a larger size by default).

2. The bitmap data is a bitmap count n followed by n bitmaps.
Each bitmap begins with its own count m giving the number
of bits. All the m's are the same for the n bitmaps.
Emit this bitmap length once instead of n times.

3. Many bitmaps within a function have the same bit values,
but each call site was given a distinct bitmap. Merge duplicate
bitmaps so that no bitmap is written more than once.

4. Many functions end up with the same aggregate bitmap data.
We used to name the bitmap data funcname.gcargs and funcname.gclocals.
Instead, name it gclocals.<md5 of data> and mark it dupok so
that the linker coalesces duplicate sets. This cut the bitmap
data remaining after step 3 by 40%; I was not expecting it to
be quite so dramatic.

Applied to "go build -ldflags -w code.google.com/p/go.tools/cmd/godoc":

                bitmaps           pclntab           binary on disk
before this CL  1326600           1985854           12738268
4-byte align    1154288 (0.87x)   1985854 (1.00x)   12566236 (0.99x)
one bitmap len   782528 (0.54x)   1985854 (1.00x)   12193500 (0.96x)
dedup bitmap     414748 (0.31x)   1948478 (0.98x)   11787996 (0.93x)
dedup bitmap set 245580 (0.19x)   1948478 (0.98x)   11620060 (0.91x)

While here, remove various dead blocks of code from plive.c.

Fixes #6929.
Fixes #7568.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83630044

11 years agocmd/8g, cmd/gc: fix warnings on Plan 9
David du Colombier [Wed, 2 Apr 2014 19:33:50 +0000 (21:33 +0200)]
cmd/8g, cmd/gc: fix warnings on Plan 9

warning: src/cmd/8g/ggen.c:35 non-interruptable temporary
warning: src/cmd/gc/walk.c:656 set and not used: l
warning: src/cmd/gc/walk.c:658 set and not used: l

LGTM=minux.ma
R=golang-codereviews, minux.ma
CC=golang-codereviews
https://golang.org/cl/83660043

11 years agocmd/gc: shorten even more temporary lifetimes
Russ Cox [Wed, 2 Apr 2014 18:09:42 +0000 (14:09 -0400)]
cmd/gc: shorten even more temporary lifetimes

1. Use n->alloc, not n->left, to hold the allocated temp being
passed from orderstmt/orderexpr to walk.

2. Treat method values the same as closures.

3. Use killed temporary for composite literal passed to
non-escaping function argument.

4. Clean temporaries promptly in if and for statements.

5. Clean temporaries promptly in select statements.
As part of this, move all the temporary-generating logic
out of select.c into order.c, so that the temporaries can
be reclaimed.

With the new temporaries, can re-enable the 1-entry
select optimization. Fixes issue 7672.

While we're here, fix a 1-line bug in select processing
turned up by the new liveness test (but unrelated; select.c:72).
Fixes #7686.

6. Clean temporaries (but not particularly promptly) in switch
and range statements.

7. Clean temporary used during convT2E/convT2I.

8. Clean temporaries promptly during && and || expressions.

---

CL 81940043 reduced the number of ambiguously live temps
in the godoc binary from 860 to 711.

CL 83090046 reduced the number from 711 to 121.

This CL reduces the number from 121 to 23.

15 the 23 that remain are in fact ambiguously live.
The final 8 could be fixed but are not trivial and
not common enough to warrant work at this point
in the release cycle.

These numbers only count ambiguously live temps,
not ambiguously live user-declared variables.
There are 18 such variables in the godoc binary after this CL,
so a total of 41 ambiguously live temps or user-declared
variables.

The net effect is that zeroing anything on entry to a function
should now be a rare event, whereas earlier it was the
common case.

This is good enough for Go 1.3, and probably good
enough for future releases too.

Fixes #7345.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83000048

11 years agocmd/gc: Don't zero more than we need.
Keith Randall [Wed, 2 Apr 2014 16:17:42 +0000 (09:17 -0700)]
cmd/gc: Don't zero more than we need.

Don't merge with the zero range, we may
end up zeroing more than we need.

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

11 years agonet: enable unixpacket test on available platforms
Mikio Hara [Wed, 2 Apr 2014 10:43:39 +0000 (19:43 +0900)]
net: enable unixpacket test on available platforms

DragonFlyBSD, FreeBSD 9 and beyond, NetBSD 6 and beyond, and
Solaris (illumos) support AF_UNIX+SOCK_SEQPACKET socket.

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

11 years agonet: make WriteTo, WriteToUnix and WriteMsgUnix fail when connectionless-mode UnixCon...
Mikio Hara [Wed, 2 Apr 2014 10:42:05 +0000 (19:42 +0900)]
net: make WriteTo, WriteToUnix and WriteMsgUnix fail when connectionless-mode UnixConn is already connected

This CL tries to fill the gap between Linux and other Unix-like systems
in the same way UDPConn already did.

Fixes #7677.

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

11 years agoruntime: ignore pointers to global objects in SetFinalizer
Dmitriy Vyukov [Wed, 2 Apr 2014 06:19:28 +0000 (10:19 +0400)]
runtime: ignore pointers to global objects in SetFinalizer
Update #7656

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

11 years agoruntime: zero at start of frame more efficiently.
Keith Randall [Wed, 2 Apr 2014 02:44:07 +0000 (19:44 -0700)]
runtime: zero at start of frame more efficiently.

Use Duff's device for zeroing.  Combine adjacent regions.

Update #7680
Update #7624

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

11 years agocmd/5g, cmd/8g: fix build
Russ Cox [Wed, 2 Apr 2014 00:24:53 +0000 (20:24 -0400)]
cmd/5g, cmd/8g: fix build

Botched during CL 83090046.

TBR=khr
CC=golang-codereviews
https://golang.org/cl/83070046

11 years agocmd/gc: shorten more temporary lifetimes
Russ Cox [Wed, 2 Apr 2014 00:02:54 +0000 (20:02 -0400)]
cmd/gc: shorten more temporary lifetimes

1. In functions with heap-allocated result variables or with
defer statements, the return sequence requires more than
just a single RET instruction. There is an optimization that
arranges for all returns to jump to a single copy of the return
epilogue in this case. Unfortunately, that optimization is
fundamentally incompatible with PC-based liveness information:
it takes PCs at many different points in the function and makes
them all land at one PC, making the combined liveness information
at that target PC a mess. Disable this optimization, so that each
return site gets its own copy of the 'call deferreturn' and the
copying of result variables back from the heap.
This removes quite a few spurious 'ambiguously live' variables.

2. Let orderexpr allocate temporaries that are passed by address
to a function call and then die on return, so that we can arrange
an appropriate VARKILL.

2a. Do this for ... slices.

2b. Do this for closure structs.

2c. Do this for runtime.concatstring, which is the implementation
of large string additions. Change representation of OADDSTR to
an explicit list in typecheck to avoid reconstructing list in both
walk and order.

3. Let orderexpr allocate the temporary variable copies used for
range loops, so that they can be killed when the loop is over.
Similarly, let it allocate the temporary holding the map iterator.

CL 81940043 reduced the number of ambiguously live temps
in the godoc binary from 860 to 711.

This CL reduces the number to 121. Still more to do, but another
good checkpoint.

Update #7345

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83090046

11 years agotime: increase timeout in negative sleep duration test
Andrew Gerrand [Tue, 1 Apr 2014 21:23:35 +0000 (08:23 +1100)]
time: increase timeout in negative sleep duration test

There's enough jitter in the scheduler on overloaded machines
that 25ms is not enough.

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

11 years agoruntime: get rid of most uses of REP for copying/zeroing.
Keith Randall [Tue, 1 Apr 2014 19:51:02 +0000 (12:51 -0700)]
runtime: get rid of most uses of REP for copying/zeroing.

REP MOVSQ and REP STOSQ have a really high startup overhead.
Use a Duff's device to do the repetition instead.

benchmark                 old ns/op     new ns/op     delta
BenchmarkClearFat32       7.20          1.60          -77.78%
BenchmarkCopyFat32        6.88          2.38          -65.41%
BenchmarkClearFat64       7.15          3.20          -55.24%
BenchmarkCopyFat64        6.88          3.44          -50.00%
BenchmarkClearFat128      9.53          5.34          -43.97%
BenchmarkCopyFat128       9.27          5.56          -40.02%
BenchmarkClearFat256      13.8          9.53          -30.94%
BenchmarkCopyFat256       13.5          10.3          -23.70%
BenchmarkClearFat512      22.3          18.0          -19.28%
BenchmarkCopyFat512       22.0          19.7          -10.45%
BenchmarkCopyFat1024      36.5          38.4          +5.21%
BenchmarkClearFat1024     35.1          35.0          -0.28%

TODO: use for stack frame zeroing
TODO: REP prefixes are still used for "reverse" copying when src/dst
regions overlap.  Might be worth fixing.

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

11 years agoruntime: use correct pc to obtain liveness info during stack copy
Russ Cox [Tue, 1 Apr 2014 18:57:58 +0000 (14:57 -0400)]
runtime: use correct pc to obtain liveness info during stack copy

The old code was using the PC of the instruction after the CALL.
Variables live during the call but not live when it returns would
not be seen as live during the stack copy, which might lead to
corruption. The correct PC to use is the one just before the
return address. After this CL the lookup matches what mgc0.c does.

The only time this matters is if you have back to back CALL instructions:

        CALL f1 // x live here
        CALL f2 // x no longer live

If a stack copy occurs during the execution of f1, the old code will
use the liveness bitmap intended for the execution of f2 and will not
treat x as live.

The only way this situation can arise and cause a problem in a stack copy
is if x lives on the stack has had its address taken but the compiler knows
enough about the context to know that x is no longer needed once f1
returns. The compiler has never known that much, so using the f2 context
cannot currently cause incorrect execution. For the same reason, it is not
possible to write a test for this today.

CL 83090046 will make the compiler precise enough in some cases
that this distinction will start mattering. The existing stack growth tests
in package runtime will fail if that CL is submitted without this one.

While we're here, print the frame PC in debug mode and update the
bitmap interpretation strings.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/83250043

11 years agocmd/gc: shorten temporary lifetimes when possible
Russ Cox [Tue, 1 Apr 2014 17:31:38 +0000 (13:31 -0400)]
cmd/gc: shorten temporary lifetimes when possible

The new channel and map runtime routines take pointers
to values, typically temporaries. Without help, the compiler
cannot tell when those temporaries stop being needed,
because it isn't sure what happened to the pointer.
Arrange to insert explicit VARKILL instructions for these
temporaries so that the liveness analysis can avoid seeing
them as "ambiguously live".

The change is made in order.c, which was already in charge of
introducing temporaries to preserve the order-of-evaluation
guarantees. Now its job has expanded to include introducing
temporaries as needed by runtime routines, and then also
inserting the VARKILL annotations for all these temporaries,
so that their lifetimes can be shortened.

In order to do its job for the map runtime routines, order.c arranges
that all map lookups or map assignments have the form:

        x = m[k]
        x, y = m[k]
        m[k] = x

where x, y, and k are simple variables (often temporaries).
Likewise, receiving from a channel is now always:

        x = <-c

In order to provide the map guarantee, order.c is responsible for
rewriting x op= y into x = x op y, so that m[k] += z becomes

        t = m[k]
        t2 = t + z
        m[k] = t2

While here, fix a few bugs in order.c's traversal: it was failing to
walk into select and switch case bodies, so order of evaluation
guarantees were not preserved in those situations.
Added tests to test/reorder2.go.

Fixes #7671.

In gc/popt's temporary-merging optimization, allow merging
of temporaries with their address taken as long as the liveness
ranges do not intersect. (There is a good chance of that now
that we have VARKILL annotations to limit the liveness range.)

Explicitly killing temporaries cuts the number of ambiguously
live temporaries that must be zeroed in the godoc binary from
860 to 711, or -17%. There is more work to be done, but this
is a good checkpoint.

Update #7345

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/81940043

11 years agoruntime: adjust GODEBUG=allocfreetrace=1 and GODEBUG=gcdead=1
Russ Cox [Tue, 1 Apr 2014 17:30:10 +0000 (13:30 -0400)]
runtime: adjust GODEBUG=allocfreetrace=1 and GODEBUG=gcdead=1

GODEBUG=allocfreetrace=1:

The allocfreetrace=1 mode prints a stack trace for each block
allocated and freed, and also a stack trace for each garbage collection.

It was implemented by reusing the heap profiling support: if allocfreetrace=1
then the heap profile was effectively running at 1 sample per 1 byte allocated
(always sample). The stack being shown at allocation was the stack gathered
for profiling, meaning it was derived only from the program counters and
did not include information about function arguments or frame pointers.
The stack being shown at free was the allocation stack, not the free stack.
If you are generating this log, you can find the allocation stack yourself, but
it can be useful to see exactly the sequence that led to freeing the block:
was it the garbage collector or an explicit free? Now that the garbage collector
runs on an m0 stack, the stack trace for the garbage collector was never interesting.

Fix all these problems:

1. Decouple allocfreetrace=1 from heap profiling.
2. Print the standard goroutine stack traces instead of a custom format.
3. Print the stack trace at time of allocation for an allocation,
   and print the stack trace at time of free (not the allocation trace again)
   for a free.
4. Print all goroutine stacks at garbage collection. Having all the stacks
   means that you can see the exact point at which each goroutine was
   preempted, which is often useful for identifying liveness-related errors.

GODEBUG=gcdead=1:

This mode overwrites dead pointers with a poison value.
Detect the poison value as an invalid pointer during collection,
the same way that small integers are invalid pointers.

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/81670043

11 years agoapi: update next.txt
Shenghou Ma [Tue, 1 Apr 2014 17:14:45 +0000 (13:14 -0400)]
api: update next.txt

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

11 years agohtml/template: fix broken links
Shenghou Ma [Tue, 1 Apr 2014 06:57:51 +0000 (02:57 -0400)]
html/template: fix broken links
Fixes #7562.

LGTM=nigeltao
R=nigeltao
CC=golang-codereviews
https://golang.org/cl/81190044

11 years agocmd/gc: fix spurious "bad negated constant" for complex constants.
Shenghou Ma [Tue, 1 Apr 2014 06:55:38 +0000 (02:55 -0400)]
cmd/gc: fix spurious "bad negated constant" for complex constants.
Fixes #7648.

LGTM=r, remyoudompheng
R=golang-codereviews, r, remyoudompheng, jscrockett01
CC=golang-codereviews
https://golang.org/cl/80560045

11 years agobenchcmp: leave a forwarding script
Russ Cox [Mon, 31 Mar 2014 20:39:41 +0000 (16:39 -0400)]
benchcmp: leave a forwarding script

People (like me!) will still try to run misc/benchcmp
and wonder where it went. Tell them.

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

11 years agocmd/ld: pass -Qunused-arguments to clang during host linking.
Shenghou Ma [Sat, 29 Mar 2014 21:10:25 +0000 (17:10 -0400)]
cmd/ld: pass -Qunused-arguments to clang during host linking.

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

11 years agocmd/ld: don't delete output binary if not "ordinary" file.
Mike Andrews [Sat, 29 Mar 2014 16:50:49 +0000 (09:50 -0700)]
cmd/ld: don't delete output binary if not "ordinary" file.

e.g., don't delete /dev/null. this fix inspired by gnu libiberty,
unlink-if-ordinary.c.

Fixes #7563

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

11 years agocmd/gc: suppress array index error caused by a previously reported error
Jan Ziak [Sat, 29 Mar 2014 14:45:40 +0000 (15:45 +0100)]
cmd/gc: suppress array index error caused by a previously reported error

Fixes #7153

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

11 years agonet: tweak the ephemeral port range on dragonfly
Mikio Hara [Sat, 29 Mar 2014 04:04:25 +0000 (13:04 +0900)]
net: tweak the ephemeral port range on dragonfly

On DragonFly BSD, we adjust the ephemeral port range because
unlike other BSD systems its default ephemeral port range
doesn't conform to IANA recommendation as described in RFC 6355
and is pretty narrow.

On DragonFly BSD 3.6: default range [1024, 5000], high range [49152, 65535]
On FreeBSD 10: default range [10000, 65535], high range [49152, 65535]
On Linux 3.11: default range [32768, 61000]

Fixes #7541.

LGTM=iant
R=jsing, gobot, iant
CC=golang-codereviews
https://golang.org/cl/80610044

11 years agosyscall: add SendmsgN for BSD variants, Linux and Solaris
Mikio Hara [Sat, 29 Mar 2014 00:28:40 +0000 (09:28 +0900)]
syscall: add SendmsgN for BSD variants, Linux and Solaris

SendmsgN is an alternate version Sendmsg that also returns
the number of bytes transferred, instead of just the error.

Update #7645

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

11 years agobytes, strings: allow Reader.Seek past 1<<31
Brad Fitzpatrick [Fri, 28 Mar 2014 19:23:51 +0000 (12:23 -0700)]
bytes, strings: allow Reader.Seek past 1<<31

Fixes #7654

LGTM=rsc
R=rsc, dan.kortschak
CC=golang-codereviews
https://golang.org/cl/81530043

11 years agocmd/gc: never pass ptr to uninit temp to runtime
Russ Cox [Fri, 28 Mar 2014 15:30:02 +0000 (11:30 -0400)]
cmd/gc: never pass ptr to uninit temp to runtime

chanrecv now expects a pointer to the data to be filled in.
mapiterinit expects a pointer to the hash iterator to be filled in.
In both cases, the temporary being pointed at changes from
dead to alive during the call. In order to make sure it is
preserved if a garbage collection happens after that transition
but before the call returns, the temp must be marked as live
during the entire call.

But if it is live during the entire call, it needs to be safe for
the garbage collector to scan at the beginning of the call,
before the new data has been filled in. Therefore, it must be
zeroed by the caller, before the call. Do that.

My previous attempt waited to mark it live until after the
call returned, but that's unsafe (see first paragraph);
undo that change in plive.c.

This makes powser2 pass again reliably.

I looked at every call to temp in the compiler.
The vast majority are followed immediately by an
initialization of temp, so those are fine.
The only ones that needed changing were the ones
where the next operation is to pass the address of
the temp to a function call, and there aren't too many.

Maps are exempted from this because mapaccess
returns a pointer to the data and lets the caller make
the copy.

Fixes many builds.

TBR=khr
CC=golang-codereviews
https://golang.org/cl/80700046

11 years agocrypto/x509: unbreak Windows build.
Adam Langley [Fri, 28 Mar 2014 14:36:52 +0000 (10:36 -0400)]
crypto/x509: unbreak Windows build.

This change sets systemSkip on a test where Go and CAPI have different
chain building behaviour. CAPI is correct, but aligning the Go code is
probably too large a change prior to 1.3.

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

11 years agoruntime: ignore windows exception if not in Go binary
Alex Brainman [Fri, 28 Mar 2014 06:35:00 +0000 (17:35 +1100)]
runtime: ignore windows exception if not in Go binary

LGTM=minux.ma
R=golang-codereviews, minux.ma
CC=golang-codereviews
https://golang.org/cl/80400043

11 years agonet: make IPv6 capability test more suitable for address family selection on the...
Mikio Hara [Fri, 28 Mar 2014 04:27:51 +0000 (13:27 +0900)]
net: make IPv6 capability test more suitable for address family selection on the dual IP stack node

For now we strictly use IPV6_V6ONLY=1 for IPv6-only communications
and IPV6_V6ONLY=0 for both IPv4 and IPv6 communications. So let the
capability test do the same.

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

11 years agosyscall: don't generate RTF_BITS constant on OS X Mavericks and beyond
Mikio Hara [Fri, 28 Mar 2014 04:27:14 +0000 (13:27 +0900)]
syscall: don't generate RTF_BITS constant on OS X Mavericks and beyond

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

11 years agodoc/go1.3.html: contiguous stacks
Rob Pike [Fri, 28 Mar 2014 01:55:37 +0000 (12:55 +1100)]
doc/go1.3.html: contiguous stacks

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

11 years agoruntime: do not crash when GetQueuedCompletionStatusEx is missing
Alex Brainman [Fri, 28 Mar 2014 01:37:14 +0000 (12:37 +1100)]
runtime: do not crash when GetQueuedCompletionStatusEx is missing

Fixes #7635

LGTM=minux.ma
R=golang-codereviews, minux.ma
CC=golang-codereviews
https://golang.org/cl/80390043

11 years agocrypto/x509: update tests because Windows removed the Verisign root.
Adam Langley [Thu, 27 Mar 2014 21:56:02 +0000 (17:56 -0400)]
crypto/x509: update tests because Windows removed the Verisign root.

The root update on 3/11/2014 removed the Verisign root cert that the Go
tests use. This only affects the 'TestSystemVerify' test in
crypto/x509.

Fixes #7523.

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

11 years agomisc/emacs: do not highlight built-in function if not followed by '('
Rui Ueyama [Thu, 27 Mar 2014 21:35:07 +0000 (17:35 -0400)]
misc/emacs: do not highlight built-in function if not followed by '('

Name of built-in function is not reserved word in Go, and you can
use it as variable name. "new" is often used as local variable, for
instance.

This patch is to apply font-lock-builtin-face only when built-in
function name is followed by '(', so that it doesn't highlight
non-function variable that happen to have the same name as built-in
function.

LGTM=dominik.honnef
R=golang-codereviews, dominik.honnef, adonovan
CC=golang-codereviews
https://golang.org/cl/79260043

11 years agocmd/cgo: enforce typing of 0-sized types
Daniel Morsing [Thu, 27 Mar 2014 20:23:16 +0000 (20:23 +0000)]
cmd/cgo: enforce typing of 0-sized types

cgo represents all 0-sized and unsized types internally as [0]byte. This means that pointers to incomplete types would be interchangable, even if given a name by typedef.

Fixes #7409.

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

11 years agomisc/emacs: handle backslash in raw string in Emacs 23
Rui Ueyama [Thu, 27 Mar 2014 19:22:52 +0000 (15:22 -0400)]
misc/emacs: handle backslash in raw string in Emacs 23

Go-mode in Emacs 23 does not recognize a backslash followed
by a backquote as end of raw string literal, as it does not
support syntax-propertize-function which Go-mode uses to
remove special meaning from backslashes in ``.

This patch provides a fallback mechanism to do the same thing
using font-lock-syntactic-keywords, which is supported by
Emacs 23.

LGTM=dominik.honnef
R=golang-codereviews, dominik.honnef
CC=adonovan, golang-codereviews
https://golang.org/cl/78730048

11 years agoruntime: enable 'bad pointer' check during garbage collection of Go stack frames
Russ Cox [Thu, 27 Mar 2014 18:06:15 +0000 (14:06 -0400)]
runtime: enable 'bad pointer' check during garbage collection of Go stack frames

This is the same check we use during stack copying.
The check cannot be applied to C stack frames, even
though we do emit pointer bitmaps for the arguments,
because (1) the pointer bitmaps assume all arguments
are always live, not true of outputs during the prologue,
and (2) the pointer bitmaps encode interface values as
pointer pairs, not true of interfaces holding integers.

For the rest of the frames, however, we should hold ourselves
to the rule that a pointer marked live really is initialized.
The interface scanning already implicitly checks this
because it interprets the type word  as a valid type pointer.

This may slow things down a little because of the extra loads.
Or it may speed things up because we don't bother enqueuing
nil pointers anymore. Enough of the rest of the system is slow
right now that we can't measure it meaningfully.
Enable for now, even if it is slow, to shake out bugs in the
liveness bitmaps, and then decide whether to turn it off
for the Go 1.3 release (issue 7650 reminds us to do this).

The new m->traceback field lets us force printing of fp=
values on all goroutine stack traces when we detect a
bad pointer. This makes it easier to understand exactly
where in the frame the bad pointer is, so that we can trace
it back to a specific variable and determine what is wrong.

Update #7650

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/80860044

11 years agocmd/gc: liveness-related bug fixes
Russ Cox [Thu, 27 Mar 2014 18:05:57 +0000 (14:05 -0400)]
cmd/gc: liveness-related bug fixes

1. On entry to a function, only zero the ambiguously live stack variables.
Before, we were zeroing all stack variables containing pointers.
The zeroing is pretty inefficient right now (issue 7624), but there are also
too many stack variables detected as ambiguously live (issue 7345),
and that must be addressed before deciding how to improve the zeroing code.
(Changes in 5g/ggen.c, 6g/ggen.c, 8g/ggen.c, gc/pgen.c)

Fixes #7647.

2. Make the regopt word-based liveness analysis preserve the
whole-variable liveness property expected by the garbage collection
bitmap liveness analysis. That is, if the regopt liveness decides that
one word in a struct needs to be preserved, make sure it preserves
the entire struct. This is particularly important for multiword values
such as strings, slices, and interfaces, in which all the words need
to be present in order to understand the meaning.
(Changes in 5g/reg.c, 6g/reg.c, 8g/reg.c.)

Fixes #7591.

3. Make the regopt word-based liveness analysis treat a variable
as having its address taken - which makes it preserved across
all future calls - whenever n->addrtaken is set, for consistency
with the gc bitmap liveness analysis, even if there is no machine
instruction actually taking the address. In this case n->addrtaken
is incorrect (a nicer way to put it is overconservative), and ideally
there would be no such cases, but they can happen and the two
analyses need to agree.
(Changes in 5g/reg.c, 6g/reg.c, 8g/reg.c; test in bug484.go.)

Fixes crashes found by turning off "zero everything" in step 1.

4. Remove spurious VARDEF annotations. As the comment in
gc/pgen.c explains, the VARDEF must immediately precede
the initialization. It cannot be too early, and it cannot be too late.
In particular, if a function call sits between the VARDEF and the
actual machine instructions doing the initialization, the variable
will be treated as live during that function call even though it is
uninitialized, leading to problems.
(Changes in gc/gen.c; test in live.go.)

Fixes crashes found by turning off "zero everything" in step 1.

5. Do not treat loading the address of a wide value as a signal
that the value must be initialized. Instead depend on the existence
of a VARDEF or the first actual read/write of a word in the value.
If the load is in order to pass the address to a function that does
the actual initialization, treating the load as an implicit VARDEF
causes the same problems as described in step 4.
The alternative is to arrange to zero every such value before
passing it to the real initialization function, but this is a much
easier and more efficient change.
(Changes in gc/plive.c.)

Fixes crashes found by turning off "zero everything" in step 1.

6. Treat wide input parameters with their address taken as
initialized on entry to the function. Otherwise they look
"ambiguously live" and we will try to emit code to zero them.
(Changes in gc/plive.c.)

Fixes crashes found by turning off "zero everything" in step 1.

7. An array of length 0 has no pointers, even if the element type does.
Without this change, the zeroing code complains when asked to
clear a 0-length array.
(Changes in gc/reflect.c.)

LGTM=khr
R=khr
CC=golang-codereviews
https://golang.org/cl/80160044

11 years agocmd/dist: zero output variables on entry to goc2c functions
Russ Cox [Thu, 27 Mar 2014 18:05:31 +0000 (14:05 -0400)]
cmd/dist: zero output variables on entry to goc2c functions

Zeroing the outputs makes sure that during function calls
in those functions we do not let the garbage collector
treat uninitialized values as pointers.

The garbage collector may still see uninitialized values
if a preemption occurs during the function prologue,
before the zeroing has had a chance to run.

This reduces the number of 'bad pointer' messages when
that runtime check is enabled, but it doesn't fix all of them,
so the check is still disabled.

It will also avoid leaks, although I doubt any of these were
particularly serious.

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

11 years agoregexp/syntax: remove InstLast
Russ Cox [Thu, 27 Mar 2014 18:05:14 +0000 (14:05 -0400)]
regexp/syntax: remove InstLast

This was added by the one-pass CL (post Go 1.2)
so it can still be removed.

Removing because surely there will be new operations
added later, and we can't change the constant value
once we define it, so "last" is a bad concept to expose.

Nothing uses it.

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

11 years agocmd/gc: fix spurious 'use of untyped nil' error
Jan Ziak [Thu, 27 Mar 2014 17:47:00 +0000 (18:47 +0100)]
cmd/gc: fix spurious 'use of untyped nil' error

Fixes #6402

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

11 years agomisc/bash, misc/zsh: fix completion rules
Rui Ueyama [Thu, 27 Mar 2014 04:29:55 +0000 (00:29 -0400)]
misc/bash, misc/zsh: fix completion rules

This patch includes fixes pointed out in CL 52140043, which was
originally written by john.gosset.

LGTM=minux.ma
R=golang-codereviews, minux.ma
CC=golang-codereviews
https://golang.org/cl/80320043

11 years agoruntime: initialize complete Hiter during mapiterinit
Russ Cox [Thu, 27 Mar 2014 01:52:29 +0000 (21:52 -0400)]
runtime: initialize complete Hiter during mapiterinit

The garbage collector will scan these pointers,
so make sure they are initialized.

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

11 years agodoc/go1.3.html: explain the change to the memory model
Rob Pike [Thu, 27 Mar 2014 00:45:51 +0000 (11:45 +1100)]
doc/go1.3.html: explain the change to the memory model

LGTM=iant, rsc
R=rsc, iant, mtj
CC=golang-codereviews
https://golang.org/cl/80260044

11 years agocmd/go: Use exported CgoLDFlags when compiler=gccgo
Erik Westrup [Wed, 26 Mar 2014 22:23:31 +0000 (15:23 -0700)]
cmd/go: Use exported CgoLDFlags when compiler=gccgo

If you compile a program that has cgo LDFLAGS directives, those are exported to an environment variable to be used by subsequent compiler tool invocations. The linking phase when using the gccgo toolchain did not consider the envvar CGO_LDFLAGS's linking directives resulting in undefined references when using cgo+gccgo.

Fixes #7573

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

11 years agoA+C: Erik Westrup (individual CLA)
Ian Lance Taylor [Wed, 26 Mar 2014 22:23:05 +0000 (15:23 -0700)]
A+C: Erik Westrup (individual CLA)

Generated by addca.

R=gobot
CC=golang-codereviews
https://golang.org/cl/80920048

11 years agocmd/dist: set -Wuninitialized only when -O is also set.
Shenghou Ma [Wed, 26 Mar 2014 18:20:18 +0000 (14:20 -0400)]
cmd/dist: set -Wuninitialized only when -O is also set.
GCC on OS X 10.6 doesn't support -Wuninitialized without -O.
Fixes #7492.

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

11 years agoruntime: eliminate false retention due to m->moreargp/morebuf
Dmitriy Vyukov [Wed, 26 Mar 2014 15:06:15 +0000 (19:06 +0400)]
runtime: eliminate false retention due to m->moreargp/morebuf
m->moreargp/morebuf were not cleared in case of preemption and stack growing,
it can lead to persistent leaks of large memory blocks.

It seems to fix the sync.Pool finalizer failures. I've run the test 500'000 times
w/o a single failure; previously it would fail dozens of times.

Fixes #7633.
Fixes #7533.

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

11 years agoruntime: support channel-based mutex in race detector
Dmitriy Vyukov [Wed, 26 Mar 2014 15:05:48 +0000 (19:05 +0400)]
runtime: support channel-based mutex in race detector
Update channel race annotations to support change in
cl/75130045: doc: allow buffered channel as semaphore without initialization
The new annotations are added only for channels with capacity 1.
Strictly saying it's possible to construct a counter-example that
will produce a false positive with capacity > 1. But it's hardly can
lead to false positives in real programs, at least I would like to see such programs first.
Any additional annotations also increase probability of false negatives,
so I would prefer to add them lazily.

LGTM=rsc
R=golang-codereviews
CC=golang-codereviews, iant, khr, rsc
https://golang.org/cl/76970043