1. 10 Mar, 2016 22 commits
  2. 09 Mar, 2016 18 commits
    • Andrew Gerrand's avatar
      doc: add doc.Example.Unordered to go1.7.txt · c2400e31
      Andrew Gerrand authored
      Change-Id: I142a9f97303e3bfbd9522fd061530c0a91305389
      Reviewed-on: https://go-review.googlesource.com/20500Reviewed-by: default avatarMinux Ma <minux@golang.org>
      c2400e31
    • Josh Bleecher Snyder's avatar
      cmd/compile: make alg gen prologue/epilogue match · e0032df8
      Josh Bleecher Snyder authored
      With this, the start and end of geneq and genhash
      are parallel. This removes a few rare nilchecks
      from generated hash functions, but nothing
      to write home about.
      
      Change-Id: I3b4836111d04daa6f6834a579bbec374a3f42c70
      Reviewed-on: https://go-review.googlesource.com/20456
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      e0032df8
    • Ian Lance Taylor's avatar
      cmd/compile: remove remaining nodeSeqIterate calls · cd6619d2
      Ian Lance Taylor authored
      Mix in several other minor cleanups, including adding some new methods
      to Nodes: Index, Addr, SetIndex, SetNodes.
      
      Passes toolstash -cmp.
      
      Update #14473.
      
      Change-Id: I8bd4ae3fde7c5e20ba66e7dd1654fbc70c3ddeb8
      Reviewed-on: https://go-review.googlesource.com/20491Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      cd6619d2
    • David Crawshaw's avatar
      cmd/link: prune unused methods · 862b9ddd
      David Crawshaw authored
      Today the linker keeps all methods of reachable types. This is
      necessary if a program uses reflect.Value.Call. But while use of
      reflection is widespread in Go for encoders and decoders, using
      it to call a method is rare.
      
      This CL looks for the use of reflect.Value.Call in a program, and
      if it is absent, adopts a (reasonably conservative) method pruning
      strategy as part of dead code elimination. Any method that is
      directly called is kept, and any method that matches a used
      interface's method signature is kept.
      
      Whether or not a method body is kept is determined by the relocation
      from its receiver's *rtype to its *rtype. A small change in the
      compiler marks these relocations as R_METHOD so they can be easily
      collected and manipulated by the linker.
      
      As a bonus, this technique removes the text segment of methods that
      have been inlined. Looking at the output of building cmd/objdump with
      -ldflags=-v=2 shows that inlined methods like
      runtime.(*traceAllocBlockPtr).ptr are removed from the program.
      
      Relatively little work is necessary to do this. Linking two
      examples, jujud and cmd/objdump show no more than +2% link time.
      
      Binaries that do not use reflect.Call.Value drop 4 - 20% in size:
      
      	addr2line: -793KB (18%)
      	asm:       -346KB (8%)
      	cgo:       -490KB (10%)
      	compile:   -564KB (4%)
      	dist:      -736KB (17%)
      	fix:       -404KB (12%)
      	link:      -328KB (7%)
      	nm:        -827KB (19%)
      	objdump:   -712KB (16%)
      	pack:      -327KB (14%)
      	yacc:      -350KB (10%)
      
      Binaries that do use reflect.Call.Value see a modest size decrease
      of 2 - 6% thanks to pruning of unexported methods:
      
      	api:    -151KB (3%)
      	cover:  -222KB (4%)
      	doc:    -106KB (2.5%)
      	pprof:  -314KB (3%)
      	trace:  -357KB (4%)
      	vet:    -187KB (2.7%)
      	jujud:  -4.4MB (5.8%)
      	cmd/go: -384KB (3.4%)
      
      The trivial Hello example program goes from 2MB to 1.68MB:
      
      	package main
      
      	import "fmt"
      
      	func main() {
      		fmt.Println("Hello, 世界")
      	}
      
      Method pruning also helps when building small binaries with
      "-ldflags=-s -w". The above program goes from 1.43MB to 1.2MB.
      
      Unfortunately the linker can only tell if reflect.Value.Call has been
      statically linked, not if it is dynamically used. And while use is
      rare, it is linked into a very common standard library package,
      text/template. The result is programs like cmd/go, which don't use
      reflect.Value.Call, see limited benefit from this CL. If binary size
      is important enough it may be possible to address this in future work.
      
      For #6853.
      
      Change-Id: Iabe90e210e813b08c3f8fd605f841f0458973396
      Reviewed-on: https://go-review.googlesource.com/20483Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      862b9ddd
    • Brad Fitzpatrick's avatar
      doc: fix bogus HTML in contribute.html · f02dc513
      Brad Fitzpatrick authored
      Introduced in https://golang.org/cl/20462
      
      Change-Id: I6c55f87228f0980058a10f204b57ead7594e3492
      Reviewed-on: https://go-review.googlesource.com/20490Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      f02dc513
    • Brad Fitzpatrick's avatar
      cmd/compile: shrink tables · 0ac0e22f
      Brad Fitzpatrick authored
      Drops cmd/binary size from 14.41 MiB to 11.42 MiB.
      
      Before:
      
         text    data     bss     dec     hex filename
      8121210 3521696  737960 12380866         bceac2 ../pkg/tool/linux_amd64/compile
      
      bradfitz@dev-bradfitz-debian2:~/go/src$ ls -l ../pkg/tool/linux_amd64/compile
      -rwxr-xr-x 1 bradfitz bradfitz 15111272 Mar  8 23:32 ../pkg/tool/linux_amd64/compile
      
        a2afc0      51312 R html.statictmp_0085
        6753f0      56592 T cmd/internal/obj/x86.doasm
        625480      58080 T cmd/compile/internal/gc.typecheck1
        f34c40      65688 D runtime.trace
        be0a20     133552 D cmd/compile/internal/ppc64.varianttable
        c013e0     265856 D cmd/compile/internal/arm.progtable
        c42260     417280 D cmd/compile/internal/amd64.progtable
        ca8060     417280 D cmd/compile/internal/x86.progtable
        f44ce0     500640 D cmd/internal/obj/arm64.oprange
        d0de60     534208 D cmd/compile/internal/ppc64.progtable
        d90520     667520 D cmd/compile/internal/arm64.progtable
        e334a0     790368 D cmd/compile/internal/mips64.progtable
        a3e8c0    1579362 r runtime.pclntab
      
      After:
      
         text    data     bss     dec     hex filename
      8128226  375954  246432 8750612  858614 ../pkg/tool/linux_amd64/compile
      
      -rwxr-xr-x 1 bradfitz bradfitz 11971432 Mar  8 23:35 ../pkg/tool/linux_amd64/compile
      
        6436d0      43936 T cmd/compile/internal/gc.walkexpr
        c13ca0      45056 D cmd/compile/internal/ssa.opcodeTable
        5d8ea0      50256 T cmd/compile/internal/gc.(*state).expr
        818c50      50448 T cmd/compile/internal/ssa.rewriteValueAMD64_OpMove
        a2d0e0      51312 R html.statictmp_0085
        6753d0      56592 T cmd/internal/obj/x86.doasm
        625460      58080 T cmd/compile/internal/gc.typecheck1
        c38fe0      65688 D runtime.trace
        a409e0    1578810 r runtime.pclntab
      
      Fixes #14703
      
      Change-Id: I2177596d5c7fd67db0a3c423cd90801cf52adb12
      Reviewed-on: https://go-review.googlesource.com/20450Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      0ac0e22f
    • Martin Möhrmann's avatar
      fmt: refactor pointer formatting and improve tests · 8e231567
      Martin Möhrmann authored
      Uses a switch statement for direct format function selection
      similar to other types verb handling in fmt.
      
      Applies padding also to nil pointers formatted with %v.
      
      Guards against "slice bounds out of range" panic in TestSprintf
      when a pointer test results in a formatted string s
      that is shorter than the index i the pointer should appear in.
      
      Adds more and rearranges tests.
      
      Fixes #14712
      Fixes #14714
      
      Change-Id: Iaf5ae37b7e6ba7d27d528d199f2b2eb9d5829b8c
      Reviewed-on: https://go-review.googlesource.com/20371
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      8e231567
    • Alexandru Moșoi's avatar
      cmd/compile: constant fold more of IsInBounds and IsSliceInBounds · bbd3ffbd
      Alexandru Moșoi authored
      Fixes #14721
      
      Change-Id: Id1d5a819e5c242b91a37c4e464ed3f00c691aff5
      Reviewed-on: https://go-review.googlesource.com/20482Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      bbd3ffbd
    • Matthew Dempsky's avatar
      cmd/compile: switch Eqtype and (*Type).Compare to use recvParamsResults · b594b8b0
      Matthew Dempsky authored
      Change-Id: I5365b94b815bfb4795db643415c2df51fc815ea1
      Reviewed-on: https://go-review.googlesource.com/20459
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      b594b8b0
    • Richard Miller's avatar
      runtime: Plan 9 - prevent preemption by GC while exiting · 6b59d618
      Richard Miller authored
      On Plan 9, there's no "kill all threads" system call, so exit is done
      by sending a "go: exit" note to each OS process.  If concurrent GC
      occurs during this loop, deadlock sometimes results.  Prevent this by
      incrementing m.locks before sending notes.
      
      Change-Id: I31aa15134ff6e42d9a82f9f8a308620b3ad1b1b1
      Reviewed-on: https://go-review.googlesource.com/20477Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6b59d618
    • Richard Miller's avatar
      syscall: add NO_LOCAL_POINTERS to syscall.exit in plan9_arm · 87103a1a
      Richard Miller authored
      This prevents a fatal "missing stackmap" error if garbage collection
      occurs during exit.
      
      Also annotate argument sizes for "go vet".
      
      Change-Id: I2473e0ef6aef8f26d0bbeaee9bd8f8a52eaaf941
      Reviewed-on: https://go-review.googlesource.com/20476Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      87103a1a
    • Alexandru Moșoi's avatar
      cmd/compile/internal/ssa: lower builtins much later · dfcb853d
      Alexandru Moșoi authored
      * Move lowering into a separate pass.
      * SliceLen/SliceCap is now available to various intermediate passes
      which use useful for bounds checking.
      * Add a second opt pass to handle the new opportunities
      
      Decreases the code size of binaries in pkg/tool/linux_amd64
      by ~45K.
      
      Updates #14564 #14606
      
      Change-Id: I5b2bd6202181c50623a3585fbf15c0d6db6d4685
      Reviewed-on: https://go-review.googlesource.com/20172
      Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      dfcb853d
    • Matthew Dempsky's avatar
      cmd/compile: eliminate IterParams · aa3650f0
      Matthew Dempsky authored
      It's only used once, so just make the caller responsible for iterating
      both the receiver and input params.
      
      Change-Id: Icb34f3f0cf96e80fbe27f3f49d12eddc26599b92
      Reviewed-on: https://go-review.googlesource.com/20454Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      aa3650f0
    • Ingo Oeser's avatar
      cmd/compile: use range construct · 33fd4535
      Ingo Oeser authored
      so the code is more readable.
      
      Also use n[i] = val instead of n = append(n, val),
      because this avoids a function call to append.
      
      NOTE: compiles, but I had trouble running toolstash -cmp and need sleep
      now.
      
      @Ian this might save you some grunt work :-)
      
      Change-Id: I2a4c70396c58905f7d5aabf83f3020f11dea0e89
      Reviewed-on: https://go-review.googlesource.com/20430Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      33fd4535
    • Nigel Tao's avatar
      compress/flate: take NewWriter out of the benchmark loop. · c52cb1fe
      Nigel Tao authored
      This helps follow-up CLs ensure that the encoding's core computation does not
      allocate. It is a separate CL because it has a non-trivial effect on the
      benchmark numbers, even if it's purely an accounting change and not a change to
      the underlying performance:
      
      BenchmarkEncodeDigitsSpeed1e4-4        5.65         19.31        3.42x
      BenchmarkEncodeDigitsSpeed1e5-4        17.23        26.79        1.55x
      BenchmarkEncodeDigitsSpeed1e6-4        26.85        27.51        1.02x
      BenchmarkEncodeDigitsDefault1e4-4      4.41         13.21        3.00x
      BenchmarkEncodeDigitsDefault1e5-4      5.64         6.28         1.11x
      BenchmarkEncodeDigitsDefault1e6-4      5.54         5.65         1.02x
      BenchmarkEncodeDigitsCompress1e4-4     4.31         13.15        3.05x
      BenchmarkEncodeDigitsCompress1e5-4     5.52         5.91         1.07x
      BenchmarkEncodeDigitsCompress1e6-4     5.38         5.63         1.05x
      BenchmarkEncodeTwainSpeed1e4-4         5.45         19.06        3.50x
      BenchmarkEncodeTwainSpeed1e5-4         17.30        29.25        1.69x
      BenchmarkEncodeTwainSpeed1e6-4         28.06        30.86        1.10x
      BenchmarkEncodeTwainDefault1e4-4       4.06         12.36        3.04x
      BenchmarkEncodeTwainDefault1e5-4       6.15         7.62         1.24x
      BenchmarkEncodeTwainDefault1e6-4       6.84         6.99         1.02x
      BenchmarkEncodeTwainCompress1e4-4      4.06         12.27        3.02x
      BenchmarkEncodeTwainCompress1e5-4      5.29         5.92         1.12x
      BenchmarkEncodeTwainCompress1e6-4      5.24         5.29         1.01x
      
      Change-Id: I7d32866b7e2d478b0154332c1edeefe339af9a28
      Reviewed-on: https://go-review.googlesource.com/20467Reviewed-by: default avatarDavid Symonds <dsymonds@golang.org>
      c52cb1fe
    • Brady Catherman's avatar
      testing: implement 'Unordered Output' in Examples. · 9323de3d
      Brady Catherman authored
      Adds a type of output to Examples that allows tests to have unordered
      output. This is intended to help clarify when the output of a command
      will produce a fixed return, but that return might not be in an constant
      order.
      
      Examples where this is useful would be documenting the rand.Perm()
      call, or perhaps the (os.File).Readdir(), both of which can not guarantee
      order, but can guarantee the elements of the output.
      
      Fixes #10149
      
      Change-Id: Iaf0cf1580b686afebd79718ed67ea744f5ed9fc5
      Reviewed-on: https://go-review.googlesource.com/19280Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      9323de3d
    • Shenghou Ma's avatar
      doc: security fixes are prepared for two most recent stable releases · a9c48f3b
      Shenghou Ma authored
      Change-Id: Ia22f681b0e90876ec87363c50c6a284db050f649
      Reviewed-on: https://go-review.googlesource.com/19793Reviewed-by: default avatarAndrew Gerrand <adg@golang.org>
      a9c48f3b
    • Josh Bleecher Snyder's avatar
      cmd/compile: superficial cleanup in alg.go · 903f0969
      Josh Bleecher Snyder authored
      Passes toolstash -cmp.
      
      Change-Id: I6ec2143a30c1f2c15f8ec74422c954ed6b9b1a0f
      Reviewed-on: https://go-review.googlesource.com/20452Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      903f0969