1. 03 Feb, 2017 12 commits
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/cfg · a918864c
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: Icb3f168ade91e7da5fcab89ac75b768daefff359
      Reviewed-on: https://go-review.googlesource.com/36191Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      a918864c
    • Russ Cox's avatar
      cmd/go: split out cmd/go/internal/str · 762eb408
      Russ Cox authored
      This is one CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I63f578f5ac99c707b599ac5659293c46b275567d
      Reviewed-on: https://go-review.googlesource.com/36190Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      762eb408
    • Russ Cox's avatar
      cmd/go: break a few dependencies · d9e6835b
      Russ Cox authored
      This CL makes a few naming changes to break dependencies
      between different parts of the go command, to make it easier
      to split into different packages.
      
      This is the first CL in a long sequence of changes to break up the
      go command from one package into a plausible group of packages.
      
      This sequence is concerned only with moving code, not changing
      or cleaning up code. There will still be more cleanup after this sequence.
      
      The entire sequence will be submitted together: it is not a goal
      for the tree to build at every step.
      
      For #18653.
      
      Change-Id: I69a98b9ea48e61b1e1cda95273d29860b525415f
      Reviewed-on: https://go-review.googlesource.com/36129Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      d9e6835b
    • Elias Naur's avatar
      runtime: handle SIGPIPE in c-archive and c-shared programs · 78074f68
      Elias Naur authored
      Before this CL, Go programs in c-archive or c-shared buildmodes
      would not handle SIGPIPE. That leads to surprising behaviour where
      writes on a closed pipe or socket would raise SIGPIPE and terminate
      the program. This CL changes the Go runtime to handle
      SIGPIPE regardless of buildmode. In addition, SIGPIPE from non-Go
      code is forwarded.
      
      This is a refinement of CL 32796 that fixes the case where a non-default
      handler for SIGPIPE is installed by the host C program.
      
      Fixes #17393
      
      Change-Id: Ia41186e52c1ac209d0a594bae9904166ae7df7de
      Reviewed-on: https://go-review.googlesource.com/35960
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      78074f68
    • Josh Bleecher Snyder's avatar
      cmd/compile: make liveness more efficient · b612ab3a
      Josh Bleecher Snyder authored
      When the number of variables in a function is very large,
      liveness analysis gets less efficient, since every bit vector
      is O(number of variables).
      
      Improve the situation by returning a sparse representation
      from progeffects. In all scenarios, progeffects either
      returns a slice that is shared function-wide, 
      and which is usually small, or a slice that is guaranteed
      to have at most three values.
      
      Reduces compilation time for the code in #8225 Comment 1 by ~10%.
      Minor effects on regular packages (below).
      
      Passes toolstash -cmp.
      
      Updates #8225
      
      name       old time/op      new time/op      delta
      Template        215ms ± 2%       212ms ± 4%  -1.31%  (p=0.001 n=30+30)
      Unicode        98.3ms ± 3%      98.4ms ± 5%    ~     (p=0.971 n=30+30)
      GoTypes         657ms ± 3%       651ms ± 2%  -0.98%  (p=0.001 n=30+27)
      Compiler        2.78s ± 2%       2.77s ± 2%  -0.60%  (p=0.006 n=30+30)
      Flate           130ms ± 4%       130ms ± 4%    ~     (p=0.712 n=29+30)
      GoParser        159ms ± 5%       158ms ± 3%    ~     (p=0.331 n=29+30)
      Reflect         406ms ± 3%       404ms ± 3%  -0.69%  (p=0.041 n=29+30)
      Tar             117ms ± 4%       117ms ± 3%    ~     (p=0.886 n=30+29)
      XML             219ms ± 2%       217ms ± 2%    ~     (p=0.091 n=29+24)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   272user-ms ± 3%  270user-ms ± 3%  -1.03%  (p=0.004 n=30+30)
      Unicode    138user-ms ± 2%  138user-ms ± 3%    ~     (p=0.902 n=29+29)
      GoTypes    891user-ms ± 2%  883user-ms ± 2%  -0.95%  (p=0.000 n=29+29)
      Compiler   3.85user-s ± 2%  3.84user-s ± 2%    ~     (p=0.236 n=30+30)
      Flate      167user-ms ± 2%  166user-ms ± 4%    ~     (p=0.511 n=28+30)
      GoParser   211user-ms ± 4%  210user-ms ± 3%    ~     (p=0.287 n=29+30)
      Reflect    539user-ms ± 3%  536user-ms ± 2%  -0.59%  (p=0.034 n=29+30)
      Tar        154user-ms ± 3%  155user-ms ± 4%    ~     (p=0.786 n=30+30)
      XML        289user-ms ± 3%  288user-ms ± 4%    ~     (p=0.249 n=30+26)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      40.8MB ± 0%  +0.09%  (p=0.001 n=30+30)
      Unicode        30.8MB ± 0%      30.8MB ± 0%    ~     (p=0.112 n=30+30)
      GoTypes         123MB ± 0%       124MB ± 0%  +0.09%  (p=0.000 n=30+30)
      Compiler        473MB ± 0%       473MB ± 0%  +0.05%  (p=0.000 n=30+30)
      Flate          26.5MB ± 0%      26.5MB ± 0%    ~     (p=0.186 n=29+30)
      GoParser       32.3MB ± 0%      32.4MB ± 0%  +0.07%  (p=0.021 n=28+30)
      Reflect        84.4MB ± 0%      84.6MB ± 0%  +0.21%  (p=0.000 n=30+30)
      Tar            27.3MB ± 0%      27.3MB ± 0%  +0.09%  (p=0.010 n=30+28)
      XML            44.7MB ± 0%      44.7MB ± 0%  +0.07%  (p=0.002 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        400k ± 1%    ~     (p=0.321 n=30+30)
      Unicode          331k ± 1%        331k ± 1%    ~     (p=0.357 n=30+28)
      GoTypes         1.24M ± 0%       1.24M ± 1%  -0.19%  (p=0.001 n=30+30)
      Compiler        4.27M ± 0%       4.27M ± 0%  -0.13%  (p=0.000 n=30+30)
      Flate            252k ± 1%        251k ± 1%  -0.30%  (p=0.005 n=30+30)
      GoParser         325k ± 1%        325k ± 1%    ~     (p=0.224 n=28+30)
      Reflect         1.06M ± 0%       1.05M ± 0%  -0.34%  (p=0.000 n=30+30)
      Tar              266k ± 1%        266k ± 1%    ~     (p=0.333 n=30+30)
      XML              416k ± 1%        415k ± 1%    ~     (p=0.144 n=30+29)
      
      
      Change-Id: I6ba67a9203516373062a2618122306da73333d98
      Reviewed-on: https://go-review.googlesource.com/36211
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      b612ab3a
    • Chris Broadfoot's avatar
      readme: add attribution for the Gopher image · ef259390
      Chris Broadfoot authored
      Change-Id: I3b1317f0ab46e03d8c5a0af74c83183710a75055
      Reviewed-on: https://go-review.googlesource.com/36214Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      ef259390
    • Russ Cox's avatar
      time: record monotonic clock reading in time.Now, for more accurate comparisons · 0e335590
      Russ Cox authored
      See https://golang.org/design/12914-monotonic for details.
      
      Fixes #12914.
      
      Change-Id: I80edc2e6c012b4ace7161c84cf067d444381a009
      Reviewed-on: https://go-review.googlesource.com/36255
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCaleb Spare <cespare@gmail.com>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      0e335590
    • Keith Randall's avatar
      cmd/compile: make sure output params are live if there is a defer · 8179b9b4
      Keith Randall authored
      If there is a defer, and that defer recovers, then the caller
      can see all of the output parameters.  That means that we must
      mark all the output parameters live at any point which might panic.
      
      If there is no defer then this is not necessary.  This is implemented.
      
      We could also detect whether there is a recover in any of the defers.
      If not, we would need to mark only output params that the defer
      actually references (and the closure mechanism already does that).
      This is not implemented.
      
      Fixes #18860.
      
      Change-Id: If984fe6686eddce9408bf25e725dd17fc16b8578
      Reviewed-on: https://go-review.googlesource.com/36030Reviewed-by: default avatarAustin Clements <austin@google.com>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      8179b9b4
    • Josh Bleecher Snyder's avatar
      cmd/compile: optimize (ZeroExt (Const [c])) · 12c58bbf
      Josh Bleecher Snyder authored
      These rules trigger 116 times while running make.bash.
      And at least for the sample code at
      https://github.com/golang/go/issues/18906#issuecomment-277174241
      they are providing optimizations not already present
      in amd64.
      
      Updates #18906
      
      Change-Id: I410a480f566f5ab176fc573fb5ac74f9cffec225
      Reviewed-on: https://go-review.googlesource.com/36217
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      12c58bbf
    • Josh Bleecher Snyder's avatar
      cmd/compile: speed up hot phi insertion code · 61fb2f6d
      Josh Bleecher Snyder authored
      This speeds up compilation of the code in #8225 by 25%-30%.
      The complexity of the algorithm is unchanged,
      but this shrinks the constant factor so much that it doesn't matter,
      even the size of the giant type switch gets scaled up dramatically.
      
      name       old time/op      new time/op      delta
      Template        218ms ± 5%       217ms ±10%    ~           (p=0.163 n=27+30)
      Unicode        98.2ms ± 6%      97.7ms ±10%    ~           (p=0.150 n=27+29)
      GoTypes         654ms ± 5%       650ms ± 5%    ~           (p=0.350 n=30+30)
      Compiler        2.70s ± 4%       2.68s ± 3%    ~           (p=0.128 n=30+29)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   276user-ms ± 6%  271user-ms ± 7%  -1.83%        (p=0.003 n=29+28)
      Unicode    138user-ms ± 5%  137user-ms ± 4%    ~           (p=0.071 n=27+27)
      GoTypes    881user-ms ± 4%  877user-ms ± 4%    ~           (p=0.423 n=30+30)
      Compiler   3.76user-s ± 4%  3.72user-s ± 2%  -0.84%        (p=0.028 n=30+29)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      40.7MB ± 0%    ~           (p=0.936 n=30+30)
      Unicode        30.8MB ± 0%      30.8MB ± 0%    ~           (p=0.859 n=28+30)
      GoTypes         123MB ± 0%       123MB ± 0%    ~           (p=0.273 n=30+30)
      Compiler        472MB ± 0%       472MB ± 0%    ~           (p=0.432 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        401k ± 1%    ~           (p=0.859 n=30+30)
      Unicode          331k ± 0%        331k ± 1%    ~           (p=0.823 n=28+30)
      GoTypes         1.24M ± 0%       1.24M ± 0%    ~           (p=0.286 n=30+30)
      Compiler        4.26M ± 0%       4.26M ± 0%    ~           (p=0.359 n=30+30)
      
      Change-Id: Ia850065a9a84c07a5b0b4e23c1758b5679498da7
      Reviewed-on: https://go-review.googlesource.com/36112
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      61fb2f6d
    • Keith Randall's avatar
      runtime: darwin/amd64, don't depend on outarg slots being unmodified · 69e16349
      Keith Randall authored
      sigtramp was calling sigtrampgo and depending on the fact that
      the 3rd argument slot will not be modified on return.  Our calling
      convention doesn't guarantee that.  Avoid that assumption.
      
      There's no actual bug here, as sigtrampgo does not in fact modify its
      argument slots.  But I found this while working on the dead stack slot
      clobbering tool.  https://go-review.googlesource.com/c/23924/
      
      Change-Id: Ia7e791a2b4c1c74fff24cba8169e7840b4b06ffc
      Reviewed-on: https://go-review.googlesource.com/36216
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      69e16349
    • Russ Cox's avatar
      net/http: fix dns hijacking test · 64c52808
      Russ Cox authored
      The name lookups are unrooted; the test should be unrooted too.
      Correctly skips the tests if the DNS config specifies a domain
      suffix that has a wildcard entry causing all unrooted names to resolve.
      
      Change-Id: I80470326a5d332f3b8d64663f765fd304c5e0811
      Reviewed-on: https://go-review.googlesource.com/36253
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      64c52808
  2. 02 Feb, 2017 28 commits
    • Josh Bleecher Snyder's avatar
      cmd/compile: add reusable []Location to ssa.Config · 57546d67
      Josh Bleecher Snyder authored
      name       old time/op      new time/op      delta
      Template        218ms ± 3%       214ms ± 3%  -1.70%  (p=0.000 n=30+30)
      Unicode         100ms ± 3%       100ms ± 4%    ~     (p=0.614 n=29+30)
      GoTypes         657ms ± 1%       660ms ± 3%  +0.46%  (p=0.046 n=29+30)
      Compiler        2.80s ± 2%       2.80s ± 1%    ~     (p=0.451 n=28+29)
      Flate           131ms ± 2%       132ms ± 4%    ~     (p=1.000 n=29+29)
      GoParser        159ms ± 3%       160ms ± 5%    ~     (p=0.341 n=28+30)
      Reflect         406ms ± 3%       408ms ± 4%    ~     (p=0.511 n=28+30)
      Tar             118ms ± 4%       118ms ± 4%    ~     (p=0.827 n=29+30)
      XML             222ms ± 6%       222ms ± 3%    ~     (p=0.532 n=30+30)
      
      name       old user-ns/op   new user-ns/op   delta
      Template   274user-ms ± 3%  272user-ms ± 3%  -0.87%  (p=0.015 n=29+30)
      Unicode    140user-ms ± 4%  140user-ms ± 3%    ~     (p=0.735 n=29+30)
      GoTypes    890user-ms ± 1%  897user-ms ± 2%  +0.88%  (p=0.002 n=29+30)
      Compiler   3.88user-s ± 2%  3.89user-s ± 1%    ~     (p=0.132 n=30+29)
      Flate      168user-ms ± 2%  157user-ms ± 4%  -6.21%  (p=0.000 n=25+28)
      GoParser   211user-ms ± 2%  213user-ms ± 5%    ~     (p=0.086 n=28+30)
      Reflect    539user-ms ± 2%  541user-ms ± 3%    ~     (p=0.267 n=27+29)
      Tar        156user-ms ± 7%  155user-ms ± 5%    ~     (p=0.708 n=30+30)
      XML        291user-ms ± 5%  294user-ms ± 3%  +0.83%  (p=0.029 n=29+30)
      
      name       old alloc/op     new alloc/op     delta
      Template       40.7MB ± 0%      39.4MB ± 0%  -3.26%  (p=0.000 n=29+26)
      Unicode        30.8MB ± 0%      30.7MB ± 0%  -0.40%  (p=0.000 n=28+30)
      GoTypes         123MB ± 0%       119MB ± 0%  -3.47%  (p=0.000 n=30+29)
      Compiler        472MB ± 0%       455MB ± 0%  -3.60%  (p=0.000 n=30+30)
      Flate          26.5MB ± 0%      25.6MB ± 0%  -3.21%  (p=0.000 n=28+30)
      GoParser       32.3MB ± 0%      31.4MB ± 0%  -2.98%  (p=0.000 n=29+30)
      Reflect        84.4MB ± 0%      82.1MB ± 0%  -2.83%  (p=0.000 n=30+30)
      Tar            27.3MB ± 0%      26.5MB ± 0%  -2.70%  (p=0.000 n=29+29)
      XML            44.6MB ± 0%      43.1MB ± 0%  -3.49%  (p=0.000 n=30+30)
      
      name       old allocs/op    new allocs/op    delta
      Template         401k ± 1%        399k ± 0%  -0.35%  (p=0.000 n=30+28)
      Unicode          331k ± 0%        331k ± 1%    ~     (p=0.907 n=28+30)
      GoTypes         1.24M ± 0%       1.23M ± 0%  -0.43%  (p=0.000 n=30+30)
      Compiler        4.26M ± 0%       4.25M ± 0%  -0.34%  (p=0.000 n=29+30)
      Flate            252k ± 1%        251k ± 1%  -0.41%  (p=0.000 n=30+30)
      GoParser         325k ± 1%        324k ± 1%  -0.31%  (p=0.000 n=27+30)
      Reflect         1.06M ± 0%       1.05M ± 0%  -0.69%  (p=0.000 n=30+30)
      Tar              266k ± 1%        265k ± 1%  -0.51%  (p=0.000 n=29+30)
      XML              416k ± 1%        415k ± 1%  -0.36%  (p=0.002 n=30+30)
      
      Change-Id: I8f784001324df83b2764c44f0e83a540e5beab34
      Reviewed-on: https://go-review.googlesource.com/36212
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      57546d67
    • Cherry Zhang's avatar
      runtime: skip flaky TestGdbPythonCgo on MIPS · f69a6def
      Cherry Zhang authored
      It seems the problem is on gdb and the dynamic linker. Skip the
      test for now until we figure out what's going on with the system.
      
      Updates #18784.
      
      Change-Id: Ic9320ffd463f6c231b2c4192652263b1cf7f4231
      Reviewed-on: https://go-review.googlesource.com/36250
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      f69a6def
    • Jaana Burcu Dogan's avatar
      doc: consistently link to the SettingGOPATH page · ecbf9084
      Jaana Burcu Dogan authored
      Change-Id: I4fdd81aa7c9b180cb72ec4af3e7d9d803c99ecac
      Reviewed-on: https://go-review.googlesource.com/36033Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ecbf9084
    • Cherry Zhang's avatar
      cmd/compile: simplify IsNonNil ConstNil · 6ad2d6aa
      Cherry Zhang authored
      Change-Id: I9ed5a2065cef06708e319b16c801da2eff42004e
      Reviewed-on: https://go-review.googlesource.com/35497
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      6ad2d6aa
    • Cherry Zhang's avatar
      cmd/compile: remove nil check for Zero/Move on 386, AMD64, S390X · fddc0045
      Cherry Zhang authored
      Fixes #18003.
      
      Change-Id: Iadcc5c424c64badecfb5fdbd4dbd9197df56182c
      Reviewed-on: https://go-review.googlesource.com/33421
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      fddc0045
    • Robert Griesemer's avatar
      cmd/compile: provide line number for cgo directive error (fix a TODO) · c1363b2d
      Robert Griesemer authored
      Also: Remove double "go:" prefix in related error message.
      
      Fixes #18882.
      
      Change-Id: Ifbbd8e2f7529b43f035d3dbf7ca4a91f212bc6b6
      Reviewed-on: https://go-review.googlesource.com/36121
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      c1363b2d
    • Lars Wiegman's avatar
      runtime: use mach_absolute_time for runtime.nanotime · e546b295
      Lars Wiegman authored
      The existing darwin/amd64 implementation of runtime.nanotime returns the
      wallclock time, which results in timers not functioning properly when
      system time runs backwards. By implementing the algorithm used by the
      darwin syscall mach_absolute_time, timers will function as expected.
      
      The algorithm is described at
      https://opensource.apple.com/source/xnu/xnu-3248.60.10/libsyscall/wrappers/mach_absolute_time.s
      
      Fixes #17610
      
      Change-Id: I9c8d35240d48249a6837dca1111b1406e2686f67
      Reviewed-on: https://go-review.googlesource.com/35292Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      e546b295
    • Josh Bleecher Snyder's avatar
      cmd/compile: skip convT2E for empty structs · 8958d8ce
      Josh Bleecher Snyder authored
      Fixes #18402
      
      Change-Id: I5af800857fb2e365ce4224eece9171277106ec7d
      Reviewed-on: https://go-review.googlesource.com/35562
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      8958d8ce
    • Keith Randall's avatar
      cmd/compile: better implementation of Slicemask · 3d5eb4a6
      Keith Randall authored
      Use (-x)>>63 instead of ((x-1)>>63)^-1 to get a mask that
      is 0 when x is 0 and all ones when x is positive.
      
      Saves one instruction when slicing.
      
      Change-Id: Ib46d53d3aac6530ac481fa2f265a6eadf3df0567
      Reviewed-on: https://go-review.googlesource.com/35641
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      3d5eb4a6
    • Josh Bleecher Snyder's avatar
      cmd/compile, runtime: convert byte-sized values to interfaces without allocation · 03583675
      Josh Bleecher Snyder authored
      Based in part on khr's CL 2500.
      
      Updates #17725
      Updates #18121
      
      Change-Id: I744e1f92fc2104e6c5bd883a898c30b2eea8cc31
      Reviewed-on: https://go-review.googlesource.com/35555
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      03583675
    • Josh Bleecher Snyder's avatar
      cmd/compile: convert constants to interfaces without allocating · c682d323
      Josh Bleecher Snyder authored
      The order pass is responsible for ensuring that
      values passed to runtime functions, including
      convT2E/convT2I, are addressable.
      
      Prior to this CL, this was always accomplished
      by creating a temp, which frequently escaped to
      the heap, causing allocations, perhaps most
      notably in code like:
      
      fmt.Println(1, 2, 3) // allocates three times
      
      None of the runtime routines modify the contents
      of the pointers they receive, so in the case of
      constants, instead of creating a temp value,
      we can create a static value.
      
      (Marking the static value as read-only provides
      protection against accidental attempts by the runtime
      to modify the constant data.)
      
      This improves code generation for code like:
      
      panic("abc")
      c <- 2 // c is a chan int
      
      which can now simply refer to "abc" and 2,
      rather than going by way of a temporary.
      
      It also allows us to optimize convT2E/convT2I,
      by recognizing static readonly values
      and directly constructing the interface.
      
      This CL adds ~0.5% to binary size, despite
      decreasing the size of many functions,
      because it also adds many static symbols.
      
      This binary size regression could be recovered in
      future (but currently unplanned) work.
      
      There is a lot of content-duplication in these
      symbols; this statement generates six new symbols,
      three containing an int 1 and three containing
      a pointer to the string "a":
      
      fmt.Println(1, 1, 1, "a", "a", "a")
      
      These symbols could be made content-addressable.
      
      Furthermore, these symbols are small, so the
      alignment and naming overhead is large.
      As with the go.strings section, these symbols
      could be hidden and have their alignment reduced.
      
      The changes to test/live.go make it impossible
      (at least with current optimization techniques)
      to place the values being passed to the runtime
      in static symbols, preserving autotmp creation.
      
      Fixes #18704
      
      Benchmarks from fmt and go-kit's logging package:
      
      github.com/go-kit/kit/log
      
      name                      old time/op    new time/op    delta
      JSONLoggerSimple-8          1.91µs ± 2%    2.11µs ±22%     ~     (p=1.000 n=9+10)
      JSONLoggerContextual-8      2.60µs ± 6%    2.43µs ± 2%   -6.29%  (p=0.000 n=9+10)
      Discard-8                    101ns ± 2%      34ns ±14%  -66.33%  (p=0.000 n=10+9)
      OneWith-8                    161ns ± 1%     102ns ±16%  -36.78%  (p=0.000 n=10+10)
      TwoWith-8                    175ns ± 3%     106ns ± 7%  -39.36%  (p=0.000 n=10+9)
      TenWith-8                    293ns ± 3%     227ns ±15%  -22.44%  (p=0.000 n=9+10)
      LogfmtLoggerSimple-8         704ns ± 2%     608ns ± 2%  -13.65%  (p=0.000 n=10+9)
      LogfmtLoggerContextual-8     962ns ± 1%     860ns ±17%  -10.57%  (p=0.003 n=9+10)
      NopLoggerSimple-8            188ns ± 1%     120ns ± 1%  -36.39%  (p=0.000 n=9+10)
      NopLoggerContextual-8        379ns ± 1%     243ns ± 0%  -35.77%  (p=0.000 n=9+10)
      ValueBindingTimestamp-8      577ns ± 1%     499ns ± 1%  -13.51%  (p=0.000 n=10+10)
      ValueBindingCaller-8         898ns ± 2%     844ns ± 2%   -6.00%  (p=0.000 n=10+10)
      
      name                      old alloc/op   new alloc/op   delta
      JSONLoggerSimple-8            904B ± 0%      872B ± 0%   -3.54%  (p=0.000 n=10+10)
      JSONLoggerContextual-8      1.20kB ± 0%    1.14kB ± 0%   -5.33%  (p=0.000 n=10+10)
      Discard-8                    64.0B ± 0%     32.0B ± 0%  -50.00%  (p=0.000 n=10+10)
      OneWith-8                    96.0B ± 0%     64.0B ± 0%  -33.33%  (p=0.000 n=10+10)
      TwoWith-8                     160B ± 0%      128B ± 0%  -20.00%  (p=0.000 n=10+10)
      TenWith-8                     672B ± 0%      640B ± 0%   -4.76%  (p=0.000 n=10+10)
      LogfmtLoggerSimple-8          128B ± 0%       96B ± 0%  -25.00%  (p=0.000 n=10+10)
      LogfmtLoggerContextual-8      304B ± 0%      240B ± 0%  -21.05%  (p=0.000 n=10+10)
      NopLoggerSimple-8             128B ± 0%       96B ± 0%  -25.00%  (p=0.000 n=10+10)
      NopLoggerContextual-8         304B ± 0%      240B ± 0%  -21.05%  (p=0.000 n=10+10)
      ValueBindingTimestamp-8       159B ± 0%      127B ± 0%  -20.13%  (p=0.000 n=10+10)
      ValueBindingCaller-8          112B ± 0%       80B ± 0%  -28.57%  (p=0.000 n=10+10)
      
      name                      old allocs/op  new allocs/op  delta
      JSONLoggerSimple-8            19.0 ± 0%      17.0 ± 0%  -10.53%  (p=0.000 n=10+10)
      JSONLoggerContextual-8        25.0 ± 0%      21.0 ± 0%  -16.00%  (p=0.000 n=10+10)
      Discard-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      OneWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      TwoWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      TenWith-8                     3.00 ± 0%      1.00 ± 0%  -66.67%  (p=0.000 n=10+10)
      LogfmtLoggerSimple-8          4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      LogfmtLoggerContextual-8      7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
      NopLoggerSimple-8             4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      NopLoggerContextual-8         7.00 ± 0%      3.00 ± 0%  -57.14%  (p=0.000 n=10+10)
      ValueBindingTimestamp-8       5.00 ± 0%      3.00 ± 0%  -40.00%  (p=0.000 n=10+10)
      ValueBindingCaller-8          4.00 ± 0%      2.00 ± 0%  -50.00%  (p=0.000 n=10+10)
      
      fmt
      
      name                             old time/op    new time/op    delta
      SprintfPadding-8                   88.9ns ± 3%    79.1ns ± 1%   -11.09%  (p=0.000 n=10+7)
      SprintfEmpty-8                     12.6ns ± 3%    12.8ns ± 3%      ~     (p=0.136 n=10+10)
      SprintfString-8                    38.7ns ± 5%    26.9ns ± 6%   -30.65%  (p=0.000 n=10+10)
      SprintfTruncateString-8            56.7ns ± 2%    47.0ns ± 3%   -17.05%  (p=0.000 n=10+10)
      SprintfQuoteString-8                164ns ± 2%     153ns ± 2%    -7.01%  (p=0.000 n=10+10)
      SprintfInt-8                       38.9ns ±15%    26.5ns ± 2%   -31.93%  (p=0.000 n=10+9)
      SprintfIntInt-8                    60.3ns ± 9%    38.2ns ± 1%   -36.67%  (p=0.000 n=10+8)
      SprintfPrefixedInt-8               58.6ns ±13%    51.2ns ±11%   -12.66%  (p=0.001 n=10+10)
      SprintfFloat-8                     71.4ns ± 3%    64.2ns ± 3%   -10.08%  (p=0.000 n=8+10)
      SprintfComplex-8                    175ns ± 3%     159ns ± 2%    -9.03%  (p=0.000 n=10+10)
      SprintfBoolean-8                   33.5ns ± 4%    25.7ns ± 5%   -23.28%  (p=0.000 n=10+10)
      SprintfHexString-8                 65.3ns ± 3%    51.7ns ± 5%   -20.86%  (p=0.000 n=10+9)
      SprintfHexBytes-8                  67.2ns ± 5%    67.9ns ± 4%      ~     (p=0.383 n=10+10)
      SprintfBytes-8                      129ns ± 7%     124ns ± 7%      ~     (p=0.074 n=9+10)
      SprintfStringer-8                   127ns ± 4%     126ns ± 8%      ~     (p=0.506 n=9+10)
      SprintfStructure-8                  357ns ± 3%     359ns ± 3%      ~     (p=0.469 n=10+10)
      ManyArgs-8                          203ns ± 6%     126ns ± 3%   -37.94%  (p=0.000 n=10+10)
      FprintInt-8                         119ns ±10%      74ns ± 3%   -37.54%  (p=0.000 n=10+10)
      FprintfBytes-8                      122ns ± 4%     120ns ± 3%      ~     (p=0.124 n=10+10)
      FprintIntNoAlloc-8                 78.2ns ± 5%    74.1ns ± 3%    -5.28%  (p=0.000 n=10+10)
      ScanInts-8                          349µs ± 1%     349µs ± 0%      ~     (p=0.606 n=9+8)
      ScanRecursiveInt-8                 43.8ms ± 7%    40.1ms ± 2%    -8.42%  (p=0.000 n=10+10)
      ScanRecursiveIntReaderWrapper-8    43.5ms ± 4%    40.4ms ± 2%    -7.16%  (p=0.000 n=10+9)
      
      name                             old alloc/op   new alloc/op   delta
      SprintfPadding-8                    24.0B ± 0%     16.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfEmpty-8                      0.00B          0.00B           ~     (all equal)
      SprintfString-8                     21.0B ± 0%      5.0B ± 0%   -76.19%  (p=0.000 n=10+10)
      SprintfTruncateString-8             32.0B ± 0%     16.0B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfQuoteString-8                48.0B ± 0%     32.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfInt-8                        16.0B ± 0%      1.0B ± 0%   -93.75%  (p=0.000 n=10+10)
      SprintfIntInt-8                     24.0B ± 0%      3.0B ± 0%   -87.50%  (p=0.000 n=10+10)
      SprintfPrefixedInt-8                72.0B ± 0%     64.0B ± 0%   -11.11%  (p=0.000 n=10+10)
      SprintfFloat-8                      16.0B ± 0%      8.0B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfComplex-8                    48.0B ± 0%     32.0B ± 0%   -33.33%  (p=0.000 n=10+10)
      SprintfBoolean-8                    8.00B ± 0%     4.00B ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexString-8                  96.0B ± 0%     80.0B ± 0%   -16.67%  (p=0.000 n=10+10)
      SprintfHexBytes-8                    112B ± 0%      112B ± 0%      ~     (all equal)
      SprintfBytes-8                      96.0B ± 0%     96.0B ± 0%      ~     (all equal)
      SprintfStringer-8                   32.0B ± 0%     32.0B ± 0%      ~     (all equal)
      SprintfStructure-8                   256B ± 0%      256B ± 0%      ~     (all equal)
      ManyArgs-8                          80.0B ± 0%      0.0B       -100.00%  (p=0.000 n=10+10)
      FprintInt-8                         8.00B ± 0%     0.00B       -100.00%  (p=0.000 n=10+10)
      FprintfBytes-8                      32.0B ± 0%     32.0B ± 0%      ~     (all equal)
      FprintIntNoAlloc-8                  0.00B          0.00B           ~     (all equal)
      ScanInts-8                         15.2kB ± 0%    15.2kB ± 0%      ~     (p=0.248 n=9+10)
      ScanRecursiveInt-8                 21.6kB ± 0%    21.6kB ± 0%      ~     (all equal)
      ScanRecursiveIntReaderWrapper-8    21.7kB ± 0%    21.7kB ± 0%      ~     (all equal)
      
      name                             old allocs/op  new allocs/op  delta
      SprintfPadding-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfEmpty-8                       0.00           0.00           ~     (all equal)
      SprintfString-8                      2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfTruncateString-8              2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfQuoteString-8                 2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfInt-8                         2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfIntInt-8                      3.00 ± 0%      1.00 ± 0%   -66.67%  (p=0.000 n=10+10)
      SprintfPrefixedInt-8                 2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfFloat-8                       2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfComplex-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfBoolean-8                     2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexString-8                   2.00 ± 0%      1.00 ± 0%   -50.00%  (p=0.000 n=10+10)
      SprintfHexBytes-8                    2.00 ± 0%      2.00 ± 0%      ~     (all equal)
      SprintfBytes-8                       2.00 ± 0%      2.00 ± 0%      ~     (all equal)
      SprintfStringer-8                    4.00 ± 0%      4.00 ± 0%      ~     (all equal)
      SprintfStructure-8                   7.00 ± 0%      7.00 ± 0%      ~     (all equal)
      ManyArgs-8                           8.00 ± 0%      0.00       -100.00%  (p=0.000 n=10+10)
      FprintInt-8                          1.00 ± 0%      0.00       -100.00%  (p=0.000 n=10+10)
      FprintfBytes-8                       1.00 ± 0%      1.00 ± 0%      ~     (all equal)
      FprintIntNoAlloc-8                   0.00           0.00           ~     (all equal)
      ScanInts-8                          1.60k ± 0%     1.60k ± 0%      ~     (all equal)
      ScanRecursiveInt-8                  1.71k ± 0%     1.71k ± 0%      ~     (all equal)
      ScanRecursiveIntReaderWrapper-8     1.71k ± 0%     1.71k ± 0%      ~     (all equal)
      
      Change-Id: I7ba72a25fea4140a0ba40a9f443103ed87cc69b5
      Reviewed-on: https://go-review.googlesource.com/35554
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      c682d323
    • David Lazar's avatar
      io: fix test when MultiReader is inlined with -l=3 · f395e878
      David Lazar authored
      This ensures there isn't a live reference to buf1 on our stack
      when MultiReader is inlined.
      
      Fixes #18819.
      
      Change-Id: I96a8cdc1ffad8f8a10c0ddcbf0299005f3176b61
      Reviewed-on: https://go-review.googlesource.com/35931
      Run-TryBot: David Lazar <lazard@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      f395e878
    • Josh Bleecher Snyder's avatar
      cmd/compile: reduce slice growth in fuseBlockPlain · 16e430e1
      Josh Bleecher Snyder authored
      Instead of always appending to c.Values,
      choose whichever slice is larger;
      b.Values will be set to nil anyway.
      
      Appending once instead of in a loop also
      limits slice growth to once per function call
      and is more efficient.
      
      Reduces max rss for the program in #18602 by 6.5%,
      and eliminates fuseBlockPlain from the alloc_space
      pprof output. fuseBlockPlain previously accounted
      for 16.74% of allocated memory.
      
      Updates #18602.
      
      Change-Id: I417b03722d011a59a679157da43dc91f4425210e
      Reviewed-on: https://go-review.googlesource.com/35114
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      16e430e1
    • Keith Randall's avatar
      cmd/compile: move rotate instruction generation to SSA · 01c8719f
      Keith Randall authored
      Remove rotate generation from walk.  Remove OLROT and ssa.Lrot* opcodes.
      Generate rotates during SSA lowering for architectures that have them.
      
      This CL will allow rotates to be generated in more situations,
      like when the shift values are determined to be constant
      only after some analysis.
      
      Fixes #18254
      
      Change-Id: I8d6d684ff5ce2511aceaddfda98b908007851079
      Reviewed-on: https://go-review.googlesource.com/34232
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      01c8719f
    • Keith Randall's avatar
      cmd/compile: allow inlining of functions with intrinsics in them · 8a9dc053
      Keith Randall authored
      Intrinsics are ok to inline as they don't rewrite to actual calls.
      
      Change-Id: Ieb19c834c61579823c62c6d1a1b425d6c4d4de23
      Reviewed-on: https://go-review.googlesource.com/34272
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      8a9dc053
    • Keith Randall's avatar
      cmd/compile: use len(s)<=cap(s) to remove more bounds checks · 73f92f9b
      Keith Randall authored
      When we discover a relation x <= len(s), also discover the relation
      x <= cap(s).  That way, in situations like:
      
      a := s[x:]  // tests 0 <= x <= len(s)
      b := s[:x]  // tests 0 <= x <= cap(s)
      
      the second check can be eliminated.
      
      Fixes #16813
      
      Change-Id: Ifc037920b6955e43bac1a1eaf6bac63a89cfbd44
      Reviewed-on: https://go-review.googlesource.com/33633
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAlexandru Moșoi <alexandru@mosoi.ro>
      Reviewed-by: default avatarDavid Chase <drchase@google.com>
      73f92f9b
    • Keith Randall's avatar
      cmd/compile: fix CSE with commutative ops · 6317f92f
      Keith Randall authored
      CSE opportunities were being missed for commutative ops. We used to
      order the args of commutative ops (by arg ID) once at the start of CSE.
      But that may not be enough.
      
      i1 = (Load ptr mem)
      i2 = (Load ptr mem)
      x1 = (Add i1 j)
      x2 = (Add i2 j)
      
      Equivalent commutative ops x1 and x2 may not get their args ordered in
      the same way because because at the start of CSE, we don't know that
      the i values will be CSEd. If x1 and x2 get opposite orders we won't
      CSE them.
      
      Instead, (re)order the args of commutative operations by their
      equivalence class IDs each time we partition an equivalence class.
      
      Change-Id: Ic609fa83b85299782a5e85bf93dc6023fccf4b0c
      Reviewed-on: https://go-review.googlesource.com/33632
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarTodd Neal <todd@tneal.org>
      6317f92f
    • Emmanuel Odeke's avatar
      cmd/compile: improve error for wrong type in switch · 34b563f4
      Emmanuel Odeke authored
      Fixes #10561.
      
      Provides a better diagnostic message for failed type switch
      satisfaction in the case that a value receiver is being used
      in place of the pointer receiver that implements and satisfies
      the interface.
      
      Change-Id: If8c13ba13f2a8d81bf44bac7c3a66c12921ba921
      Reviewed-on: https://go-review.googlesource.com/35235Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      34b563f4
    • Hiroshi Ioka's avatar
      cmd/cgo: don't track same node twice in guessKinds · ba1a65fc
      Hiroshi Ioka authored
      Change-Id: Ib2c1490a42e3485913a05a0b2fecdcc425d42871
      Reviewed-on: https://go-review.googlesource.com/36083
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      ba1a65fc
    • Daniel Martí's avatar
      misc/cgo/testshared: remove unused flag.Parse() · 329fff0d
      Daniel Martí authored
      TestMain doesn't make use of any flags.
      
      Change-Id: I98ec582fb004045a5067618f605ccfeb1f9f4bbb
      Reviewed-on: https://go-review.googlesource.com/33613Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      329fff0d
    • Elias Naur's avatar
      misc/ios: allow exit code 0 to mean test success · 312ea5bf
      Elias Naur authored
      Tests that use TestMain might never call m.Run(), and simply return
      from TestMain. In that case, the iOS test harness never sees the
      PASS from the testing framework and assumes the test failed.
      
      Allow an exit with exit code 0 to also mean test success, thereby
      fixing the objdump test on iOS.
      
      Change-Id: I1fe9077b05931aa0905e41b88945cd153c5b35b6
      Reviewed-on: https://go-review.googlesource.com/36065Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      312ea5bf
    • Emmanuel Odeke's avatar
      cmd/compile: improve error message if init is directly invoked · cb6e0639
      Emmanuel Odeke authored
      Fixes #8481.
      
      Inform the user that init functions cannot be directly invoked
      in user code, as mandated by the spec at:
      http://golang.org/ref/spec#Program_initialization_and_execution.
      
      Change-Id: Ib12c0c08718ffd48b76b6f9b13c76bb6612d2e7b
      Reviewed-on: https://go-review.googlesource.com/34790Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      cb6e0639
    • Martin Möhrmann's avatar
      cmd/compile: intrinsify math.Sqrt by using only the ssa backend · dbd51ce9
      Martin Möhrmann authored
      Change-Id: If3cb64f52fe0fd7331b6f1acf3d15dd705dfd633
      Reviewed-on: https://go-review.googlesource.com/32591
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      dbd51ce9
    • Emmanuel Odeke's avatar
      cmd/compile: fix conversion error message for printed slices · dba0d382
      Emmanuel Odeke authored
      Fixes #15055.
      
      Updates exprfmt printing using fmt verb "%v" to check that n.Left
      is non-nil before attempting to print it, otherwise we'll print
      the nodes in the list using verb "%.v".
      
      Credit to @mdempsky for this approach and for finding
      the root cause of the issue.
      
      Change-Id: I20a6464e916dc70d5565e145164bb9553e5d3865
      Reviewed-on: https://go-review.googlesource.com/25361Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      dba0d382
    • Josh Bleecher Snyder's avatar
      test: add extra test for issue18661 · b443baba
      Josh Bleecher Snyder authored
      Make sure that the lack of an lvalue doesn't
      cause extra side-effects.
      
      Updates #18661
      Updates #18739
      
      Change-Id: I52eb4b4a5c6f8ff5cddd2115455f853c18112c19
      Reviewed-on: https://go-review.googlesource.com/36126
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      b443baba
    • Matthew Dempsky's avatar
      cmd/compile: skip reexporting types in reexportdep · edad59cf
      Matthew Dempsky authored
      The binary export format embeds type definitions inline as necessary,
      so there's no need to add them to exportlist. Also, constants are
      embedded directly by value, so they can be omitted too.
      
      Change-Id: Id1879eb97c298a5a52f615cf9883c346c7f7bd69
      Reviewed-on: https://go-review.googlesource.com/36170
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      edad59cf
    • Matthew Dempsky's avatar
      cmd/compile/internal/gc: add comment and test for #15550 · 16dd0624
      Matthew Dempsky authored
      When switching to the new parser, I changed cmd/compile to handle iota
      per an intuitive interpretation of how nested constant declarations
      should work (which also matches go/types).
      
      Note: if we end up deciding that the current spec wording is
      intentional (i.e., confirming gccgo's current behavior), the test will
      need to be updated to expect 4 instead of 1.
      
      Updates #15550.
      
      Change-Id: I441f5f13209f172b73ef75031f2a9daa5e985277
      Reviewed-on: https://go-review.googlesource.com/36122Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      16dd0624
    • Alex Brainman's avatar
      cmd/link: assume that runtime.epclntab lives in .text section · 99e1e4f6
      Alex Brainman authored
      Sometimes STEXT symbols point to the first byte of .data
      section, instead of the end of .text section. But, while writing
      pe symbol table, we should treat them as if they belong to the
      .text section. Change pe symbol table records for these symbols.
      
      Fixes #14710
      
      Change-Id: I1356e61aa8fa37d590d7b1677b2bac214ad0ba4e
      Reviewed-on: https://go-review.googlesource.com/35272
      Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      99e1e4f6