]> Cypherpunks repositories - gostls13.git/log
gostls13.git
11 years agocmd/gc: diagnose "make([]T, non-integer)" correctly.
Shenghou Ma [Sun, 23 Feb 2014 21:31:48 +0000 (16:31 -0500)]
cmd/gc: diagnose "make([]T, non-integer)" correctly.
Fixes #7223.

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

11 years agocmd/ld: don't emit unreachable dynimport symbols in ELF symtab.
Shenghou Ma [Sun, 23 Feb 2014 21:20:40 +0000 (16:20 -0500)]
cmd/ld: don't emit unreachable dynimport symbols in ELF symtab.
Fix build for Dragonfly BSD.
Fixes #7318.
Fixes #7367.

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

11 years agoos/exec: explicitly mention Cmd.Wait() has to be called eventually
Patrick Mézard [Sun, 23 Feb 2014 20:53:02 +0000 (12:53 -0800)]
os/exec: explicitly mention Cmd.Wait() has to be called eventually

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

11 years agoA+C: Patrick Mézard (individual CLA)
Rob Pike [Sun, 23 Feb 2014 20:52:23 +0000 (12:52 -0800)]
A+C: Patrick Mézard (individual CLA)

Generated by addca.

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

11 years agotesting: improve introduction to package comment
Rob Pike [Fri, 21 Feb 2014 22:35:54 +0000 (14:35 -0800)]
testing: improve introduction to package comment
Fixes #7361.

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

11 years agocrypto/tls: enforce that either ServerName or InsecureSkipVerify be given.
Adam Langley [Fri, 21 Feb 2014 20:56:41 +0000 (15:56 -0500)]
crypto/tls: enforce that either ServerName or InsecureSkipVerify be given.

crypto/tls has two functions for creating a client connection: Dial,
which most users are expected to use, and Client, which is the
lower-level API.

Dial does what you expect: it gives you a secure connection to the host
that you specify and the majority of users of crypto/tls appear to work
fine with it.

Client gives more control but needs more care. Specifically, if it
wasn't given a server name in the tls.Config then it didn't check that
the server's certificates match any hostname - because it doesn't have
one to check against. It was assumed that users of the low-level API
call VerifyHostname on the certificate themselves if they didn't supply
a hostname.

A review of the uses of Client both within Google and in a couple of
external libraries has shown that nearly all of them got this wrong.

Thus, this change enforces that either a ServerName or
InsecureSkipVerify is given. This does not affect tls.Dial.

See discussion at https://groups.google.com/d/msg/golang-nuts/4vnt7NdLvVU/b1SJ4u0ikb0J.

Fixes #7342.

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

11 years agoA+C: Jay Weisskopf (individual CLA)
Russ Cox [Fri, 21 Feb 2014 20:28:44 +0000 (15:28 -0500)]
A+C: Jay Weisskopf (individual CLA)

Generated by addca.

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

11 years agoreflect: better error for walking through nil embedded struct pointer
Russ Cox [Fri, 21 Feb 2014 18:51:22 +0000 (13:51 -0500)]
reflect: better error for walking through nil embedded struct pointer

The old error was "call of reflect.Value.Field on ptr Value".

http://play.golang.org/p/Zm-ZbQaPeR

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

11 years agoA+C: Apisak Darakananda (individual CLA)
Brad Fitzpatrick [Fri, 21 Feb 2014 18:22:56 +0000 (10:22 -0800)]
A+C: Apisak Darakananda (individual CLA)

Generated by addca.

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

11 years agoruntime/debug: add SetPanicOnFault
Russ Cox [Thu, 20 Feb 2014 21:18:05 +0000 (16:18 -0500)]
runtime/debug: add SetPanicOnFault

SetPanicOnFault allows recovery from unexpected memory faults.
This can be useful if you are using a memory-mapped file
or probing the address space of the current program.

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

11 years agoruntime: use goc2c as much as possible
Russ Cox [Thu, 20 Feb 2014 20:58:47 +0000 (15:58 -0500)]
runtime: use goc2c as much as possible

Package runtime's C functions written to be called from Go
started out written in C using carefully constructed argument
lists and the FLUSH macro to write a result back to memory.

For some functions, the appropriate parameter list ended up
being architecture-dependent due to differences in alignment,
so we added 'goc2c', which takes a .goc file containing Go func
declarations but C bodies, rewrites the Go func declaration to
equivalent C declarations for the target architecture, adds the
needed FLUSH statements, and writes out an equivalent C file.
That C file is compiled as part of package runtime.

Native Client's x86-64 support introduces the most complex
alignment rules yet, breaking many functions that could until
now be portably written in C. Using goc2c for those avoids the
breakage.

Separately, Keith's work on emitting stack information from
the C compiler would require the hand-written functions
to add #pragmas specifying how many arguments are result
parameters. Using goc2c for those avoids maintaining #pragmas.

For both reasons, use goc2c for as many Go-called C functions
as possible.

This CL is a replay of the bulk of CL 15400047 and CL 15790043,
both of which were reviewed as part of the NaCl port and are
checked in to the NaCl branch. This CL is part of bringing the
NaCl code into the main tree.

No new code here, just reformatting and occasional movement
into .h files.

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

11 years agocmd/pack: fix match
Russ Cox [Thu, 20 Feb 2014 20:50:30 +0000 (15:50 -0500)]
cmd/pack: fix match

Match used len(ar.files) == 0 to mean "match everything"
but it also deleted matched things from the list, so once you
had matched everything you asked for, match returned true
for whatever was left in the archive too.

Concretely, if you have an archive containing f1, f2, then
        pack t foo.a f1
would match f1 and then, because len(ar.files) == 0 after
deleting f1 from the match list, also match f2.

Avoid the problem by recording explicitly whether match
matches everything.

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

11 years agocmd/gc: explain 'nointerface' method failure
Russ Cox [Thu, 20 Feb 2014 20:42:08 +0000 (15:42 -0500)]
cmd/gc: explain 'nointerface' method failure

The message used to say that there was a type
mismatch, which is not necessarily true.

TBR=ken2
CC=golang-codereviews
https://golang.org/cl/66600044

11 years agocmd/gc: make embedded, unexported fields read-only.
Chris Manghane [Thu, 20 Feb 2014 19:32:55 +0000 (11:32 -0800)]
cmd/gc: make embedded, unexported fields read-only.

Fixes #7363.

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

11 years agocmd/ld: fix off-by-one error in DWARF .debug_line transcription
Josh Bleecher Snyder [Thu, 20 Feb 2014 17:06:32 +0000 (09:06 -0800)]
cmd/ld: fix off-by-one error in DWARF .debug_line transcription

The liblink refactor changed the DWARF .debug_line flow control. The mapping was off by one pcline entry. The fix here preserves pc until it can be compared to pcline.pc.

Sample dwarfdump .debug_line output for main.main from the program in issue 7351, before liblink (correct):

0x0000003c: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 )
0x00000047: 03 DW_LNS_advance_line( 6 )
0x00000049: 01 DW_LNS_copy
            0x0000000000002000      1      7      0 is_stmt

0x0000004a: 8b address += 21,  line += 1
            0x0000000000002021      1      8      0 is_stmt

0x0000004b: 02 DW_LNS_advance_pc( 153 )
0x0000004e: 03 DW_LNS_advance_line( 1 )
0x00000050: 01 DW_LNS_copy
            0x00000000000020ba      1      9      0 is_stmt

After liblink (off by one entry):

0x00001bbf: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 )
0x00001bca: 02 DW_LNS_advance_pc( 33 )
0x00001bcc: 03 DW_LNS_advance_line( 6 )
0x00001bce: 01 DW_LNS_copy
            0x0000000000002021      1      7      0 is_stmt

0x00001bcf: 02 DW_LNS_advance_pc( 153 )
0x00001bd2: 03 DW_LNS_advance_line( 1 )
0x00001bd4: 01 DW_LNS_copy
            0x00000000000020ba      1      8      0 is_stmt

0x00001bd5: 02 DW_LNS_advance_pc( 153 )
0x00001bd8: 03 DW_LNS_advance_line( 1 )
0x00001bda: 01 DW_LNS_copy
            0x0000000000002153      1      9      0 is_stmt

After this CL (the line 9 pc offset changed due to intervening compiler changes):

0x00001d07: 00 Extended: <9> 02 DW_LNE_set_address( 0x0000000000002000 )
0x00001d12: 03 DW_LNS_advance_line( 6 )
0x00001d14: 01 DW_LNS_copy
            0x0000000000002000      1      7      0 is_stmt

0x00001d15: 8b address += 21,  line += 1
            0x0000000000002021      1      8      0 is_stmt

0x00001d16: 02 DW_LNS_advance_pc( 189 )
0x00001d19: 03 DW_LNS_advance_line( 1 )
0x00001d1b: 01 DW_LNS_copy
            0x00000000000020de      1      9      0 is_stmt

Fixes #7351.

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

11 years agoos: fix Rename on Plan 9
David du Colombier [Thu, 20 Feb 2014 06:59:38 +0000 (07:59 +0100)]
os: fix Rename on Plan 9

Rename should fail when the directory doesn't match.
It will fix the newly introduced test from cmd/pack
on Plan 9.

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

11 years agonet/http: remove tmp file created in TestMultipartReaderOrder
Alex Brainman [Thu, 20 Feb 2014 06:24:25 +0000 (17:24 +1100)]
net/http: remove tmp file created in TestMultipartReaderOrder

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

11 years agosyscall: terminate error string in exec package on Plan 9
Rob Pike [Thu, 20 Feb 2014 01:17:36 +0000 (17:17 -0800)]
syscall: terminate error string in exec package on Plan 9
Try to prevent messages like this:
        './pack' file does not exist����������������������������������������������������������������������������������������������������
TBR=adonovan

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/66270043

11 years agocmd/pack: provide executable name in TestHello
Alex Brainman [Thu, 20 Feb 2014 00:29:37 +0000 (11:29 +1100)]
cmd/pack: provide executable name in TestHello

otherwise go build command adds .exe suffix

Fixes #7362

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

11 years agocmd/pack: another attempt to fix the build for TestHello
Rob Pike [Thu, 20 Feb 2014 00:12:05 +0000 (16:12 -0800)]
cmd/pack: another attempt to fix the build for TestHello
Plan 9 uses single quotes, not double quotes. I should have known.

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

11 years agocmd/pack: don't look for " in output from go env
Rob Pike [Wed, 19 Feb 2014 23:33:47 +0000 (15:33 -0800)]
cmd/pack: don't look for " in output from go env
Windows at least doesn't emit one.
Maybe fix Windows build.

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

11 years agocmd/pack: dump output of command of "go env" command in test
Rob Pike [Wed, 19 Feb 2014 23:01:50 +0000 (15:01 -0800)]
cmd/pack: dump output of command of "go env" command in test
Get more information to help understand build failure on Plan 9.
Also Windows.
(TestHello is failing because GOCHAR does not appear in output.
What does?)

Update #7362

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

11 years agocmd/gc, runtime: enable precisestack by default
Russ Cox [Wed, 19 Feb 2014 22:09:08 +0000 (17:09 -0500)]
cmd/gc, runtime: enable precisestack by default

[Repeat of CL 64100044, after 32-bit fix in CL 66170043.]

Precisestack makes stack collection completely precise,
in the sense that there are no "used and not set" errors
in the collection of stack frames, no times where the collector
reads a pointer from a stack word that has not actually been
initialized with a pointer (possibly a nil pointer) in that function.

The most important part is interfaces: precisestack means
that if reading an interface value, the interface value is guaranteed
to be initialized, meaning that the type word can be relied
upon to be either nil or a valid interface type word describing
the data word.

This requires additional zeroing of certain values on the stack
on entry, which right now costs about 5% overall execution
time in all.bash. That cost will come down before Go 1.3
(issue 7345).

There are at least two known garbage collector bugs right now,
issues 7343 and 7344. The first happens even without precisestack.
The second I have only seen with precisestack, but that does not
mean that precisestack is what causes it. In fact it is very difficult
to explain by what precisestack does directly. Precisestack may
be exacerbating an existing problem. Both of those issues are
marked for Go 1.3 as well.

The reasons for enabling precisestack now are to give it more
time to soak and because the copying stack work depends on it.

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

11 years agocmd/5g, cmd/8g: zero ambiguously live values on entry
Russ Cox [Wed, 19 Feb 2014 22:08:55 +0000 (17:08 -0500)]
cmd/5g, cmd/8g: zero ambiguously live values on entry

The code here is being restored after its deletion in CL 14430048.

I restored the copy in cmd/6g in CL 56430043 but neglected the
other two.

This is the reason that enabling precisestack only worked on amd64.

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

11 years agocmd/pack: add 'c' command to create archive
Russ Cox [Wed, 19 Feb 2014 22:08:44 +0000 (17:08 -0500)]
cmd/pack: add 'c' command to create archive

When Go 1.3 is released, this will keep existing
Go 1.2 build scripts that use 'go tool pack grc' working.
For efficiency, such scripts should be changed to
use 6g -pack instead, but keeping the old behavior
available enables a more graceful transition.

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

11 years agoapi: update next.txt
Russ Cox [Wed, 19 Feb 2014 20:56:42 +0000 (15:56 -0500)]
api: update next.txt

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

11 years agocmd/gc: fix printf format in typecheck.c
Rob Pike [Wed, 19 Feb 2014 20:50:50 +0000 (15:50 -0500)]
cmd/gc: fix printf format in typecheck.c
There are probably more of these, but bound and len are 64 bits so use %lld
in message about array index out of bounds.
Fixes the 386 build.

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

11 years agocmd/pack: use log.SetPrefix to make log calls more compact and consistent
Rob Pike [Wed, 19 Feb 2014 19:42:34 +0000 (11:42 -0800)]
cmd/pack: use log.SetPrefix to make log calls more compact and consistent
Taking my own advice from a review of addr2line.

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

11 years agocmd/addr2line: reimplement in Go
Russ Cox [Wed, 19 Feb 2014 19:33:11 +0000 (14:33 -0500)]
cmd/addr2line: reimplement in Go

We never updated libmach for the new object file format,
so it the existing 'go tool addr2line' is broken.
Reimplement in Go to fix.

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

11 years agocmd/gc: fix array index out of bounds error message
Rick Arnold [Wed, 19 Feb 2014 19:29:36 +0000 (11:29 -0800)]
cmd/gc: fix array index out of bounds error message

The error message was previously off by one in all cases.

Fixes #7150.

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

11 years agocrypto/x509: add example of using a custom root list.
Adam Langley [Wed, 19 Feb 2014 16:18:35 +0000 (11:18 -0500)]
crypto/x509: add example of using a custom root list.

Fixes #6267.

LGTM=r, josharian
R=golang-codereviews, josharian, r
CC=golang-codereviews
https://golang.org/cl/61020043

11 years agocrypto/tls: improve documentation for ServerName.
Adam Langley [Wed, 19 Feb 2014 16:17:09 +0000 (11:17 -0500)]
crypto/tls: improve documentation for ServerName.

Users of the low-level, Client function are frequenctly missing the
fact that, unless they pass a ServerName to the TLS connection then it
cannot verify the certificates against any name.

This change makes it clear that at least one of InsecureSkipVerify and
ServerName should always be set.

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

11 years agocmd/go: skip writing dwarf debug info for ephemeral binaries
Russ Cox [Wed, 19 Feb 2014 15:01:15 +0000 (10:01 -0500)]
cmd/go: skip writing dwarf debug info for ephemeral binaries

Update #6853

For an ephemeral binary - one created, run, and then deleted -
there is no need to write dwarf debug information, since the
binary will not be used with gdb. In this case, instruct the linker
not to spend time and disk space generating the debug information
by passing the -w flag to the linker.

Omitting dwarf information reduces the size of most binaries by 25%.
We may be more aggressive about this in the future.

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

11 years agocmd/ld: drop gcargs, gclocals symbols from symbol table
Russ Cox [Wed, 19 Feb 2014 15:00:44 +0000 (10:00 -0500)]
cmd/ld: drop gcargs, gclocals symbols from symbol table

Update #6853

Every function now has a gcargs and gclocals symbol
holding associated garbage collection information.
Put them all in the same meta-symbol as the go.func data
and then drop individual entries from symbol table.

Removing gcargs and gclocals reduces the size of a
typical binary by 10%.

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

11 years agocmd/gc: fix handling of append with -race.
Rémy Oudompheng [Wed, 19 Feb 2014 07:19:27 +0000 (08:19 +0100)]
cmd/gc: fix handling of append with -race.

Also re-enable race tests in run.bash.

Fixes #7334.

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

11 years agocmd/gc: reject incorrect use of fallthrough.
Rémy Oudompheng [Wed, 19 Feb 2014 06:55:03 +0000 (07:55 +0100)]
cmd/gc: reject incorrect use of fallthrough.

Fixes #6500.

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

11 years agoreflect: improve documentation of IsNil
Rob Pike [Wed, 19 Feb 2014 06:33:59 +0000 (22:33 -0800)]
reflect: improve documentation of IsNil
IsNil isn't quite the same as == nil, as this snippet shows:

// http://play.golang.org/p/huomslDZgw
package main

import "fmt"
import "reflect"

func main() {
        var i interface{}
        v := reflect.ValueOf(i)
        fmt.Println(v.IsValid(), i == nil)
        fmt.Println(v.IsNil())
}

The fact that IsNil panics if you call it with an untyped nil
was not apparent. Verbiage added for clarity.

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

11 years agocmd/ld: remove Plan 9 symbol table
Russ Cox [Wed, 19 Feb 2014 04:41:15 +0000 (23:41 -0500)]
cmd/ld: remove Plan 9 symbol table

Update #6853

Nothing reads the Plan 9 symbol table anymore.
The last holdout was 'go tool nm', but since being rewritten in Go
it uses the standard symbol table for the binary format
(ELF, Mach-O, PE) instead.

Removing the Plan 9 symbol table saves ~15% disk space
on most binaries.

Two supporting changes included in this CL:

debug/gosym: use Go 1.2 pclntab to synthesize func-only
symbol table when there is no Plan 9 symbol table

debug/elf, debug/macho, debug/pe: ignore final EOF from ReadAt

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

11 years agomisc/emacs: add support for ff-find-other-file
Dominik Honnef [Wed, 19 Feb 2014 03:23:55 +0000 (22:23 -0500)]
misc/emacs: add support for ff-find-other-file

c-mode classically uses ff-find-other-file to toggle between headers
and implementation. For Go it seemingly makes sense to jump between
implementation and test.

While there's no enforced mapping of file names for tests, the mapping
in this CL seems to be very common at least throughout the standard
library, and ff-find-other-file fails gracefully when the mapping
doesn't apply.

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/65750044

11 years agomisc/emacs: actually use point argument that is passed to godef--call
Dominik Honnef [Wed, 19 Feb 2014 02:51:47 +0000 (21:51 -0500)]
misc/emacs: actually use point argument that is passed to godef--call

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/62600043

11 years agocmd/link: change cloneProg to return the cloned value
Rick Arnold [Wed, 19 Feb 2014 01:59:44 +0000 (17:59 -0800)]
cmd/link: change cloneProg to return the cloned value

The code was returning the original value rather than the cloned value
resulting in the tests not being repeatable.

Fixes #7111.

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

11 years agocrypto/rc4: test the portable version too
Brad Fitzpatrick [Tue, 18 Feb 2014 23:16:07 +0000 (15:16 -0800)]
crypto/rc4: test the portable version too

Prevent bitrot. (similar to the previous sha1 and md5 CLs)

Fixes #6642

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

11 years agoapi: whitelist change to unicode.Version
Brad Fitzpatrick [Tue, 18 Feb 2014 21:38:47 +0000 (13:38 -0800)]
api: whitelist change to unicode.Version

Unbreaks the build.

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

11 years agodoc/go1.3.txt: unicode upgrade to 6.3.0
Rob Pike [Tue, 18 Feb 2014 19:50:38 +0000 (11:50 -0800)]
doc/go1.3.txt: unicode upgrade to 6.3.0

LGTM=mpvl
R=mpvl
CC=golang-codereviews
https://golang.org/cl/65550044

11 years agounicode: upgrade to Unicode 6.3.0
Marcel van Lohuizen [Tue, 18 Feb 2014 19:12:59 +0000 (20:12 +0100)]
unicode: upgrade to Unicode 6.3.0

This is a relatively minor change.

This does not result in changes to go.text/unicode/norm. The go.text
packages will therefore be relatively unaffected. It does make the
way for an upgrade to CLDR 24, though.

The tests of all.bash pass, as well as the tests in go.text after
this update.

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

11 years agorun.bat: use double-colon to comment text
Alex Brainman [Tue, 18 Feb 2014 05:48:34 +0000 (16:48 +1100)]
run.bat: use double-colon to comment text

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

11 years agogo/doc: document the conditions where examples are "playable"
Andrew Gerrand [Tue, 18 Feb 2014 04:53:22 +0000 (15:53 +1100)]
go/doc: document the conditions where examples are "playable"

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

11 years agoundo CL 64100044 / 04d062c2e81c
Russ Cox [Tue, 18 Feb 2014 02:34:58 +0000 (21:34 -0500)]
undo CL 64100044 / 04d062c2e81c

broke 32-bit builds

««« original CL description
cmd/gc, runtime: enable precisestack by default

Precisestack makes stack collection completely precise,
in the sense that there are no "used and not set" errors
in the collection of stack frames, no times where the collector
reads a pointer from a stack word that has not actually been
initialized with a pointer (possibly a nil pointer) in that function.

The most important part is interfaces: precisestack means
that if reading an interface value, the interface value is guaranteed
to be initialized, meaning that the type word can be relied
upon to be either nil or a valid interface type word describing
the data word.

This requires additional zeroing of certain values on the stack
on entry, which right now costs about 5% overall execution
time in all.bash. That cost will come down before Go 1.3
(issue 7345).

There are at least two known garbage collector bugs right now,
issues 7343 and 7344. The first happens even without precisestack.
The second I have only seen with precisestack, but that does not
mean that precisestack is what causes it. In fact it is very difficult
to explain by what precisestack does directly. Precisestack may
be exacerbating an existing problem. Both of those issues are
marked for Go 1.3 as well.

The reasons for enabling precisestack now are to give it more
time to soak and because the copying stack work depends on it.

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

TBR=r
CC=golang-codereviews
https://golang.org/cl/65230043

11 years agocmd/link: fix comment typo.
Nigel Tao [Tue, 18 Feb 2014 02:04:59 +0000 (13:04 +1100)]
cmd/link: fix comment typo.

LGTM=dsymonds
R=dsymonds
CC=golang-codereviews
https://golang.org/cl/64100045

11 years agocmd/gc, runtime: enable precisestack by default
Russ Cox [Tue, 18 Feb 2014 01:12:40 +0000 (20:12 -0500)]
cmd/gc, runtime: enable precisestack by default

Precisestack makes stack collection completely precise,
in the sense that there are no "used and not set" errors
in the collection of stack frames, no times where the collector
reads a pointer from a stack word that has not actually been
initialized with a pointer (possibly a nil pointer) in that function.

The most important part is interfaces: precisestack means
that if reading an interface value, the interface value is guaranteed
to be initialized, meaning that the type word can be relied
upon to be either nil or a valid interface type word describing
the data word.

This requires additional zeroing of certain values on the stack
on entry, which right now costs about 5% overall execution
time in all.bash. That cost will come down before Go 1.3
(issue 7345).

There are at least two known garbage collector bugs right now,
issues 7343 and 7344. The first happens even without precisestack.
The second I have only seen with precisestack, but that does not
mean that precisestack is what causes it. In fact it is very difficult
to explain by what precisestack does directly. Precisestack may
be exacerbating an existing problem. Both of those issues are
marked for Go 1.3 as well.

The reasons for enabling precisestack now are to give it more
time to soak and because the copying stack work depends on it.

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

11 years agoruntime: clear f, arg to avoid leak in timerproc
Russ Cox [Tue, 18 Feb 2014 01:11:53 +0000 (20:11 -0500)]
runtime: clear f, arg to avoid leak in timerproc

I have seen this cause leaks where not all objects in a sync.Pool
would be reclaimed during the sync package tests.
I found it while debugging the '0 of 100 finalized' failure we are
seeing on arm, but it seems not to be the root cause for that one.

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

11 years agoundo CL 64820044 / 4f9dee8402af
Dave Cheney [Mon, 17 Feb 2014 21:04:01 +0000 (08:04 +1100)]
undo CL 64820044 / 4f9dee8402af

Callers of md5.Sum should do so to avoid allocations, the example did not demonstate this property.

««« original CL description
crypto/md5: add example for Sum

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

»»»

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

11 years agocrypto/md5: add example for Sum
ChaiShushan [Mon, 17 Feb 2014 03:33:00 +0000 (14:33 +1100)]
crypto/md5: add example for Sum

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

11 years agocmd/gc: correct function name in internal error messages
Ian Lance Taylor [Mon, 17 Feb 2014 03:14:06 +0000 (19:14 -0800)]
cmd/gc: correct function name in internal error messages

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

11 years agotesting: ease writing parallel benchmarks
Dmitriy Vyukov [Mon, 17 Feb 2014 02:29:56 +0000 (06:29 +0400)]
testing: ease writing parallel benchmarks
Add b.RunParallel function that captures parallel benchmark boilerplate:
creates worker goroutines, joins worker goroutines, distributes work
among them in an efficient way, auto-tunes grain size.
Fixes #7090.

R=bradfitz, iant, josharian, tracey.brendan, r, rsc, gobot
CC=golang-codereviews
https://golang.org/cl/57270043

11 years agonet/http: close body in benchmarks
Dmitriy Vyukov [Mon, 17 Feb 2014 02:04:31 +0000 (06:04 +0400)]
net/http: close body in benchmarks
Is it required? Why don't we do it?

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

11 years agogo/build: temporarily disable cgo for freebsd/arm
Dave Cheney [Sun, 16 Feb 2014 09:46:03 +0000 (20:46 +1100)]
go/build: temporarily disable cgo for freebsd/arm

Update #7331

cgo is currently broken on freebsd/arm.

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

11 years agobuild: disable race detector test in run.bat on windows
Russ Cox [Sun, 16 Feb 2014 01:03:41 +0000 (20:03 -0500)]
build: disable race detector test in run.bat on windows

CL 64170043 disabled it in run.bash for Unix systems.
I did not realize Windows systems also ran the race detector test.

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

11 years agocmd/gc: record &x[0] as taking address of x, if x is an array
Russ Cox [Sun, 16 Feb 2014 01:01:15 +0000 (20:01 -0500)]
cmd/gc: record &x[0] as taking address of x, if x is an array

Not recording the address being taken was causing
the liveness analysis not to preserve x in the absence
of direct references to x, which in turn was making the
net test fail with GOGC=0.

In addition to the test, this fixes a bug wherein
        GOGC=0 go test -short net
crashed if liveness analysis was in use (like at tip, not like Go 1.2).

TBR=ken2
CC=golang-codereviews
https://golang.org/cl/64470043

11 years agocmd/gc: avoid pointer beyond array in range loop
Russ Cox [Sun, 16 Feb 2014 01:00:57 +0000 (20:00 -0500)]
cmd/gc: avoid pointer beyond array in range loop

This problem was discovered by reading the code.
I have not seen it in practice, nor do I have any ideas
on how to trigger it reliably in a test. But it's still worth
fixing.

TBR=ken2
CC=golang-codereviews
https://golang.org/cl/64370046

11 years agodebug/elf: correct test failure print
Russ Cox [Sun, 16 Feb 2014 01:00:15 +0000 (20:00 -0500)]
debug/elf: correct test failure print

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

11 years agocmd/gc: correct liveness for fat variables
Russ Cox [Sat, 15 Feb 2014 15:58:55 +0000 (10:58 -0500)]
cmd/gc: correct liveness for fat variables

The VARDEF placement must be before the initialization
but after any final use. If you have something like s = ... using s ...
the rhs must be evaluated, then the VARDEF, then the lhs
assigned.

There is a large comment in pgen.c on gvardef explaining
this in more detail.

This CL also includes Ian's suggestions from earlier CLs,
namely commenting the use of mode in link.h and fixing
the precedence of the ~r check in dcl.c.

This CL enables the check that if liveness analysis decides
a variable is live on entry to the function, that variable must
be a function parameter (not a result, and not a local variable).
If this check fails, it indicates a bug in the liveness analysis or
in the generated code being analyzed.

The race detector generates invalid code for append(x, y...).
The code declares a temporary t and then uses cap(t) before
initializing t. The new liveness check catches this bug and
stops the compiler from writing out the buggy code.
Consequently, this CL disables the race detector tests in
run.bash until the race detector bug can be fixed
(golang.org/issue/7334).

Except for the race detector bug, the liveness analysis check
does not detect any problems (this CL and the previous CLs
fixed all the detected problems).

The net test still fails with GOGC=0 but the rest of the tests
now pass or time out (because GOGC=0 is so slow).

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

11 years agocmd/gc: do not lower copy to a value node in go/defer.
Rémy Oudompheng [Sat, 15 Feb 2014 15:39:04 +0000 (16:39 +0100)]
cmd/gc: do not lower copy to a value node in go/defer.

The existing tests issue4463.go and issue4654.go had failures at
typechecking and did not test walking the AST.

Fixes #7272.

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

11 years agotext/template: don't panic when function call evaluates a nil pointer
Rob Pike [Sat, 15 Feb 2014 00:26:47 +0000 (16:26 -0800)]
text/template: don't panic when function call evaluates a nil pointer
Catch the error instead and return it to the user. Before this fix,
the template package panicked. Now you get:
        template: bug11:1:14: executing "bug11" at <.PS>: dereference of nil pointer of type *string
Extended example at http://play.golang.org/p/uP6pCW3qKT

Fixes #7333.

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

11 years agocodereview: fix for Mercurial 2.9
Anthony Martin [Fri, 14 Feb 2014 23:56:58 +0000 (15:56 -0800)]
codereview: fix for Mercurial 2.9

The branchtags method was removed but we should've
been using branchmap all along.

http://selenic.com/hg/rev/4274eda143cb

LGTM=franciscossouza, r
R=golang-codereviews, franciscossouza, r
CC=golang-codereviews
https://golang.org/cl/57500045

11 years agocompress/bzip2: support superfluous Huffman levels.
Adam Langley [Fri, 14 Feb 2014 22:17:19 +0000 (17:17 -0500)]
compress/bzip2: support superfluous Huffman levels.

These should never be found in a bzip2 file but it does appear that
there's a buggy encoder that is producing them. Since the official
bzip2 handles this case, this change makes the Go code do likewise.

With this change, the code produces the same output as the official
bzip2 code on the invalid example given in the bug.

Fixes #7279.

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

11 years agoruntime: fix "invalid address in sys call" on Plan 9
David du Colombier [Fri, 14 Feb 2014 21:27:47 +0000 (22:27 +0100)]
runtime: fix "invalid address in sys call" on Plan 9

Rfork is not splitting the stack when creating a new thread,
so the parent and child are executing on the same stack.
However, if the parent returns and keeps executing before
the child can read the arguments from the parent stack,
the child will not see the right arguments. The solution
is to load the needed pieces from the parent stack into
register before INT $64.

Thanks to Russ Cox for the explanation.

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

11 years agomath/big: Add text marshaller interface to Int
Michael T. Jones [Fri, 14 Feb 2014 20:57:03 +0000 (12:57 -0800)]
math/big: Add text marshaller interface to Int

Fixes #7329

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

11 years agocmd/go: remove cross compiling restriction on cgo
Elias Naur [Fri, 14 Feb 2014 19:36:52 +0000 (11:36 -0800)]
cmd/go: remove cross compiling restriction on cgo

A previous CL added support for cross compiling with cgo, but
missed the GOOS check in cmd/go. Remove it.

Update #4714

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

11 years agoruntime: if traceback sees a breakpoint, don't change the PC
Ian Lance Taylor [Fri, 14 Feb 2014 19:06:53 +0000 (11:06 -0800)]
runtime: if traceback sees a breakpoint, don't change the PC

Changing the PC confuses gdb, because execution does not
continue where gdb expects it.  Not changing the PC has the
potential to confuse a stack dump, but when running under gdb
it seems better to confuse a stack dump than to confuse gdb.

Fixes #6776.

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

11 years agonet: handle IP interface stack correctly on linux
Mikio Hara [Fri, 14 Feb 2014 16:07:51 +0000 (01:07 +0900)]
net: handle IP interface stack correctly on linux

A configuration like the following:

7: tun6rd: <NOARP,UP,LOWER_UP> mtu 1280
        link/sit 10.11.12.13 brd 0.0.0.0
        inet 1.2.3.4/24 scope global tun6rd
        inet6 2014:1001:a0b:c0d::1/32 scope global
        inet6 ::10.11.12.13/128 scope global
9: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1496
        link/ppp
        inet 192.168.101.234 peer 192.168.102.234/32 scope global ppp0
        inet 10.20.30.40/24 scope global ppp0
        inet6 2014:1002::1/64 scope global
11: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480
        link/ipip 192.168.202.34 peer 192.168.202.69
        inet 192.168.10.1/24 scope global tunnel0
        inet6 2014:1003::1/64 scope global

will be handled like below.

"tun6rd": flags "up", ifindex 7, mtu 1280
        hardware address ""
        interface address "1.2.3.4/24"
        interface address "2014:1001:a0b:c0d::1/32"
        interface address "::a0b:c0d/128"
"ppp0": flags "up|pointtopoint|multicast", ifindex 9, mtu 1496
        hardware address ""
        interface address "192.168.101.234/32"
        interface address "10.20.30.40/24"
        interface address "2014:1002::1/64"
"tun0": flags "up|pointtopoint", ifindex 11, mtu 1480
        hardware address ""
        interface address "192.168.10.1/24"
        interface address "2014:1003::1/64"

Fixes #6433.
Update #4839

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

11 years agosyscall: make use of include/linux when generating system constants
Mikio Hara [Fri, 14 Feb 2014 15:47:28 +0000 (00:47 +0900)]
syscall: make use of include/linux when generating system constants

On Linux include/net directory is just to help porting applications
from BSDs and files under net keep less information than include/linux.
Making use of files under include/linux instead of include/net prevents
lack of information.

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

11 years agoruntime: remove misleading message during crash
Dmitriy Vyukov [Fri, 14 Feb 2014 09:24:48 +0000 (13:24 +0400)]
runtime: remove misleading message during crash
The following checkdead message is false positive:

$ go test -race -c runtime
$ ./runtime.test -test.cpu=2 -test.run=TestSmhasherWindowed -test.v
=== RUN TestSmhasherWindowed-2
checkdead: find g 18 in status 1
SIGABRT: abort
PC=0x42bff1

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

11 years agoruntime: fix mem profile when both large and small objects are allocated at the same...
Dmitriy Vyukov [Fri, 14 Feb 2014 09:20:41 +0000 (13:20 +0400)]
runtime: fix mem profile when both large and small objects are allocated at the same stack
Currently small and large (size>rate) objects are merged into a single entry.
But rate adjusting is required only for small objects.
As a result pprof either incorrectly adjusts large objects
or does not adjust small objects.
With this change objects of different sizes are stored in different buckets.

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

11 years agocmd/gc: fix build for 'default unsigned char' compilers
Russ Cox [Fri, 14 Feb 2014 05:43:43 +0000 (00:43 -0500)]
cmd/gc: fix build for 'default unsigned char' compilers

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

11 years agocmd/go: hide the "TERM" environment variable from "go env"
Shenghou Ma [Fri, 14 Feb 2014 05:38:55 +0000 (00:38 -0500)]
cmd/go: hide the "TERM" environment variable from "go env"
It's implementation detail.

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

11 years agocmd/gc: correct liveness for various non-returning functions
Russ Cox [Fri, 14 Feb 2014 05:38:24 +0000 (00:38 -0500)]
cmd/gc: correct liveness for various non-returning functions

When the liveness code doesn't know a function doesn't return
(but the generated code understands that), the liveness analysis
invents a control flow edge that is not really there, which can cause
variables to seem spuriously live. This is particularly bad when the
variables are uninitialized.

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

11 years agoruntime: fix windows cpu profiler
Dmitriy Vyukov [Fri, 14 Feb 2014 05:20:51 +0000 (09:20 +0400)]
runtime: fix windows cpu profiler
Currently it periodically fails with the following message.
The immediate cause is the wrong base register when obtaining g
in sys_windows_amd64/386.s.
But there are several secondary problems as well.

runtime: unknown pc 0x0 after stack split
panic: invalid memory address or nil pointer dereference
fatal error: panic during malloc
[signal 0xc0000005 code=0x0 addr=0x60 pc=0x42267a]

runtime stack:
runtime.panic(0x7914c0, 0xc862af)
        c:/src/perfer/work/windows-amd64-a15f344a9efa/go/src/pkg/runtime/panic.c:217 +0x2c
runtime: unexpected return pc for runtime.externalthreadhandler called from 0x0

R=rsc, alex.brainman
CC=golang-codereviews
https://golang.org/cl/63310043

11 years agocmd/gc: correct liveness for func ending in panic
Russ Cox [Fri, 14 Feb 2014 04:56:53 +0000 (23:56 -0500)]
cmd/gc: correct liveness for func ending in panic

The registerization code needs the function to end in a RET,
even if that RET is actually unreachable.

The liveness code needs to avoid such unreachable RETs.
It had a special case for final RET after JMP, but no case
for final RET after UNDEF. Instead of expanding the special
cases, let fixjmp - which already knows what is and is not
reachable definitively - mark the unreachable RET so that
the liveness code can identify it.

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

11 years agocmd/gc: correct liveness for wrappers containing tail jumps
Russ Cox [Fri, 14 Feb 2014 04:33:20 +0000 (23:33 -0500)]
cmd/gc: correct liveness for wrappers containing tail jumps

A normal RET is treated as using the return values,
but a tail jump RET does not - it is jumping to the
function that is going to fill in the return values.
If a tail jump RET is recorded as using the return values,
since nothing initializes them they will be marked as
live on entry to the function, which is clearly wrong.

Found and tested by the new code in plive.c that looks
for variables that are incorrectly live on entry.
That code is disabled for now because there are other
cases remaining to be fixed. But once it is enabled,
test/live1.go becomes a real test of this CL.

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

11 years agocmd/gc: handle variable initialization by block move in liveness
Russ Cox [Fri, 14 Feb 2014 03:45:16 +0000 (22:45 -0500)]
cmd/gc: handle variable initialization by block move in liveness

Any initialization of a variable by a block copy or block zeroing
or by multiple assignments (componentwise copying or zeroing
of a multiword variable) needs to emit a VARDEF. These cases were not.

Fixes #7205.

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

11 years agocmd/5g, cmd/8g: fix build
Russ Cox [Fri, 14 Feb 2014 03:30:35 +0000 (22:30 -0500)]
cmd/5g, cmd/8g: fix build

The test added in CL 63630043 fails on 5g and 8g because they
were not emitting the VARDEF instruction when clearing a fat
value by clearing the components. 6g had the call in the right place.

Hooray tests.

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

11 years agosyscall: fix system calls with misaligned arguments on freebsd/arm
Mikio Hara [Fri, 14 Feb 2014 03:22:13 +0000 (12:22 +0900)]
syscall: fix system calls with misaligned arguments on freebsd/arm

This CL enables the current tree to work with FreeBSD 10-STABLE
on ARM EABI platforms, though there are still a few test fails.

Also updates documentation.

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

11 years agonet: disable TestDNSThreadLimit even in non-short mode by default
Mikio Hara [Fri, 14 Feb 2014 03:20:21 +0000 (12:20 +0900)]
net: disable TestDNSThreadLimit even in non-short mode by default

TestDNSThreadLimit creates tons of DNS queries and it occasionally
causes an unintentional traffic jam and/or crash of some virtual
machine software, especially its builtin networking stuff.

We can run TestDNSThreadLimit with -dnsflood flag instead.

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

11 years agocmd/gc: rename AFATVARDEF to AVARDEF
Russ Cox [Fri, 14 Feb 2014 03:17:22 +0000 (22:17 -0500)]
cmd/gc: rename AFATVARDEF to AVARDEF

The "fat" referred to being used for multiword values only.
We're going to use it for non-fat values sometimes too.

No change other than the renaming.

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

11 years agocmd/gc: fix liveness for addressed results
Russ Cox [Fri, 14 Feb 2014 02:11:50 +0000 (21:11 -0500)]
cmd/gc: fix liveness for addressed results

Was spuriously marking results live on entry to function.

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

11 years agocmd/gc: rephrase the invalid indexing operation error message
Shenghou Ma [Fri, 14 Feb 2014 02:01:33 +0000 (21:01 -0500)]
cmd/gc: rephrase the invalid indexing operation error message
Old:
prog.go:9: invalid operation: this[i] (index of type int)
New:
prog.go:9: invalid operation: this[i] (type int does not support indexing)

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

11 years agocmd/gc: distinguish unnamed vs blank-named return variables better
Russ Cox [Fri, 14 Feb 2014 01:59:39 +0000 (20:59 -0500)]
cmd/gc: distinguish unnamed vs blank-named return variables better

Before, an unnamed return value turned into an ONAME node n with n->sym
named ~anon%d, and n->orig == n.

A blank-named return value turned into an ONAME node n with n->sym
named ~anon%d but n->orig == the original blank n. Code generation and
printing uses n->orig, so that this node formatted as _.

But some code does not use n->orig. In particular the liveness code does
not know about the n->orig convention and so mishandles blank identifiers.
It is possible to fix but seemed better to avoid the confusion entirely.

Now the first kind of node is named ~r%d and the second ~b%d; both have
n->orig == n, so that it doesn't matter whether code uses n or n->orig.

After this change the ->orig field is only used for other kinds of expressions,
not for ONAME nodes.

This requires distinguishing ~b from ~r names in a few places that care.
It fixes a liveness analysis bug without actually changing the liveness code.

TBR=ken2
CC=golang-codereviews
https://golang.org/cl/63630043

11 years agocmd/gc: relax address-of escape analysis
Russ Cox [Fri, 14 Feb 2014 00:59:09 +0000 (19:59 -0500)]
cmd/gc: relax address-of escape analysis

Make the loop nesting depth of &x depend on where x is declared,
not on where the &x appears. The latter is only a conservative
estimate of the former. Being more careful can avoid some
variables escaping, and it is easier to reason about.

It would have avoided issue 7313, although that was still a bug
worth fixing.

Not much effect in the tree: one variable in the whole tree
is saved from a heap allocation (something in x509 parsing).

LGTM=daniel.morsing
R=daniel.morsing
CC=golang-codereviews
https://golang.org/cl/62380043

11 years agocontainer/list: mark must be an element of the list
Markus Zimmermann [Fri, 14 Feb 2014 00:43:52 +0000 (16:43 -0800)]
container/list: mark must be an element of the list

The methods MoveAfter and MoveBefore of the container/list package did silently corrupt the interal structure of the list if a mark element is used which is not an element of the list.

LGTM=gri
R=golang-codereviews, gobot, gri
CC=golang-codereviews
https://golang.org/cl/60980043

11 years agoA+C: Markus Zimmermann (individual CLA)
Robert Griesemer [Fri, 14 Feb 2014 00:43:28 +0000 (16:43 -0800)]
A+C: Markus Zimmermann (individual CLA)

Generated by addca.

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

11 years agomath/big: Optimise ARM assembler
Nick Craig-Wood [Fri, 14 Feb 2014 00:19:38 +0000 (16:19 -0800)]
math/big: Optimise ARM assembler

Tweak the ARM assembler to improve its performance.

  * Use TEQ instead of CMP which preserves the carry flag.  This means
    we can avoid saving and restoring CPSR which is very slow.

  * Use conditional instructions to read the value of the carry flag.

  * Use 3 argument ARM instructions to save instructions

  * Improve scheduling for MOVW instructions (LDR)

  * Use RSB constant to save an instruction in bitLen

Results of -test.bench 'VV|VW|VU|WW|Bit' -test.benchtime 3s on Samsung
Exynos5 Chromebook.

There are a few small regressions in the benchmarks which I believe to
be noise, perhaps due to different cacheline alignment.

The changes to bitLen are apparently no faster, however less
instructions means less I-cache usage which is a win. I suspect it
will be a win on older ARM processors.

benchmark                 old ns/op    new ns/op    delta
BenchmarkAddVV_1                 48           14  -70.84%
BenchmarkAddVV_2                 87           17  -80.25%
BenchmarkAddVV_3                126           20  -83.97%
BenchmarkAddVV_4                165           23  -86.00%
BenchmarkAddVV_5                204           26  -87.21%
BenchmarkAddVV_1e1              399           41  -89.72%
BenchmarkAddVV_1e2             3921          315  -91.97%
BenchmarkAddVV_1e3            39085         2972  -92.40%
BenchmarkAddVV_1e4           390330        29623  -92.41%
BenchmarkAddVV_1e5          3935366       343431  -91.27%
BenchmarkAddVW_1                 20           10  -49.04%
BenchmarkAddVW_2                 60           14  -76.53%
BenchmarkAddVW_3                 99           16  -83.38%
BenchmarkAddVW_4                140           18  -86.50%
BenchmarkAddVW_5                179           21  -88.04%
BenchmarkAddVW_1e1              376           33  -91.20%
BenchmarkAddVW_1e2             3933          256  -93.49%
BenchmarkAddVW_1e3            39630         2378  -94.00%
BenchmarkAddVW_1e4           396218        23623  -94.04%
BenchmarkAddVW_1e5          3972901       238403  -94.00%
BenchmarkAddMulVVW_1             11           11   -4.27%
BenchmarkAddMulVVW_2             15           15   +0.00%
BenchmarkAddMulVVW_3             18           19   +4.37%
BenchmarkAddMulVVW_4             21           21   +4.29%
BenchmarkAddMulVVW_5             24           24   -0.82%
BenchmarkAddMulVVW_1e1           40           39   -2.70%
BenchmarkAddMulVVW_1e2          329          326   -0.91%
BenchmarkAddMulVVW_1e3         3200         3098   -3.19%
BenchmarkAddMulVVW_1e4        38457        40013   +4.05%
BenchmarkAddMulVVW_1e5       461880       428580   -7.21%
BenchmarkBitLen0                  5            5   -0.19%
BenchmarkBitLen1                  5            5   +0.00%
BenchmarkBitLen2                  5            5   -0.56%
BenchmarkBitLen3                  5            5   +0.38%
BenchmarkBitLen4                  5            5   +0.19%
BenchmarkBitLen5                  5            5   +0.56%
BenchmarkBitLen8                  5            5   -0.19%
BenchmarkBitLen9                  5            5   -0.56%
BenchmarkBitLen16                 5            5   -0.19%
BenchmarkBitLen17                 5            5   -0.37%
BenchmarkBitLen31                 5            5   -1.30%
BenchmarkBitset                  72           70   -2.49%
BenchmarkBitsetNeg             1584          396  -75.00%
BenchmarkBitsetOrig            1990         1980   -0.50%
BenchmarkBitsetNegOrig         4031         2877  -28.63%

benchmark                  old MB/s     new MB/s  speedup
BenchmarkAddVV_1             657.71      2251.28    3.42x
BenchmarkAddVV_2             730.65      3700.37    5.06x
BenchmarkAddVV_3             757.29      4754.30    6.28x
BenchmarkAddVV_4             772.95      5541.58    7.17x
BenchmarkAddVV_5             781.30      6125.59    7.84x
BenchmarkAddVV_1e1           800.33      7814.14    9.76x
BenchmarkAddVV_1e2           815.98     10129.62   12.41x
BenchmarkAddVV_1e3           818.73     10767.07   13.15x
BenchmarkAddVV_1e4           819.82     10802.12   13.18x
BenchmarkAddVV_1e5           813.14      9317.73   11.46x
BenchmarkAddVW_1            1539.56      3006.13    1.95x
BenchmarkAddVW_2            1057.66      4502.20    4.26x
BenchmarkAddVW_3             960.67      5797.65    6.04x
BenchmarkAddVW_4             913.19      6776.86    7.42x
BenchmarkAddVW_5             891.72      7467.82    8.37x
BenchmarkAddVW_1e1           850.12      9681.85   11.39x
BenchmarkAddVW_1e2           813.48     12494.27   15.36x
BenchmarkAddVW_1e3           807.45     13451.80   16.66x
BenchmarkAddVW_1e4           807.64     13545.64   16.77x
BenchmarkAddVW_1e5           805.46     13422.64   16.66x
BenchmarkAddMulVVW_1        2727.29      2847.66    1.04x
BenchmarkAddMulVVW_2        4162.30      4158.69    1.00x
BenchmarkAddMulVVW_3        5236.91      5015.98    0.96x
BenchmarkAddMulVVW_4        6090.27      5837.52    0.96x
BenchmarkAddMulVVW_5        6549.86      6598.60    1.01x
BenchmarkAddMulVVW_1e1      7850.72      8068.00    1.03x
BenchmarkAddMulVVW_1e2      9724.38      9794.40    1.01x
BenchmarkAddMulVVW_1e3      9997.18     10328.58    1.03x
BenchmarkAddMulVVW_1e4      8320.88      7997.39    0.96x
BenchmarkAddMulVVW_1e5      6928.20      7466.50    1.08x

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

11 years agonet/http: increase panic stack trace buffer size from 4 KB to 64 KB.
David Symonds [Thu, 13 Feb 2014 23:15:38 +0000 (10:15 +1100)]
net/http: increase panic stack trace buffer size from 4 KB to 64 KB.

4 KB is a bit too small in some situations (e.g. panic during a
template execution), and ends up with an unhelpfully-truncated trace.
64 KB should be much more likely to capture the useful information.
There's not a garbage generation issue, since this code should only
be triggered when there's something seriously wrong with the program.

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

11 years agocrypto/rsa: explain random parameter for GenerateKey and GenerateMultiPrimeKey.
Shenghou Ma [Thu, 13 Feb 2014 20:56:48 +0000 (15:56 -0500)]
crypto/rsa: explain random parameter for GenerateKey and GenerateMultiPrimeKey.
Fixes #6850.

LGTM=agl
R=golang-codereviews, agl
CC=golang-codereviews
https://golang.org/cl/60500046

11 years agocmd/go: fix cgo error output rewrite
Shenghou Ma [Thu, 13 Feb 2014 20:55:14 +0000 (15:55 -0500)]
cmd/go: fix cgo error output rewrite
for example, we now rewrite *_Ctype_int to *C.int.
Fixes #6781.

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

11 years agoruntime: update malloc comment for MSpan.needzero
Russ Cox [Thu, 13 Feb 2014 19:31:48 +0000 (14:31 -0500)]
runtime: update malloc comment for MSpan.needzero

Missed this suggestion in CL 57680046.

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

11 years agolib9: fix Solaris build
David du Colombier [Thu, 13 Feb 2014 19:30:42 +0000 (20:30 +0100)]
lib9: fix Solaris build

In file included from src/lib9/utf/utfecpy.c:17:0:
src/lib9/utf/utfdef.h:28:0: error: "nil" redefined [-Werror]
In file included from src/lib9/utf/utfrrune.c:17:0:
src/lib9/utf/utfdef.h:28:0: error: "nil" redefined [-Werror]

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

11 years agolib9: enable on Plan 9
David du Colombier [Thu, 13 Feb 2014 19:06:41 +0000 (20:06 +0100)]
lib9: enable on Plan 9

This change depends on CL 57170052.

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

11 years agolib9: fix inconsistencies and warnings on Plan 9
David du Colombier [Thu, 13 Feb 2014 19:05:55 +0000 (20:05 +0100)]
lib9: fix inconsistencies and warnings on Plan 9

warning: src/lib9/fmt/dorfmt.c:64 unreachable code RETURN
warning: src/lib9/fmt/fltfmt.c:184 set and not used: p
warning: src/lib9/utf/utflen.c:35 unreachable code RETURN
warning: src/lib9/utf/utfrrune.c:45 unreachable code RETURN
warning: src/lib9/utf/utfrune.c:44 unreachable code RETURN

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

11 years agocmd/gc: for loop init statement misanalyzed by escape analysis
Daniel Morsing [Thu, 13 Feb 2014 19:04:43 +0000 (19:04 +0000)]
cmd/gc: for loop init statement misanalyzed by escape analysis

Logically, the init statement is in the enclosing scopes loopdepth, not inside the for loop.

Fixes #7313.

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