1. 20 Aug, 2018 19 commits
    • Martin Möhrmann's avatar
      all: use internal/cpu feature variables directly · cd0e79d9
      Martin Möhrmann authored
      Avoid using package specific variables when there is a one to one
      correspondance to cpu feature support exported by internal/cpu.
      
      This makes it clearer which cpu feature is referenced.
      Another advantage is that internal/cpu variables are padded to avoid
      false sharing and memory and cache usage is shared by multiple packages.
      
      Change-Id: If18fb448a95207cfa6a3376f3b2ddc4b230dd138
      Reviewed-on: https://go-review.googlesource.com/126596
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      cd0e79d9
    • Alberto Donizetti's avatar
      time: always run ZoneAbbr test · 099498db
      Alberto Donizetti authored
      CL 52430 added logic to skip the testZoneAbbr test in locales where
      the timezone does not have a three-letter name, because the following
      line
      
        Parse(RFC1123, t1.Format(RFC1123))
      
      failed for timezones with only numeric names (like -07).
      
      Since Go 1.11, Parse supports the parsing of timezones with numeric
      names (this was implemented in CL 98157), so we can now run the test
      unconditionally.
      
      Change-Id: I8ed40e1ba325c0c0dc79c4184a9e71209e2e9a02
      Reviewed-on: https://go-review.googlesource.com/127757
      Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      099498db
    • Martin Möhrmann's avatar
      internal/cpu: remove parentheses from arm64 feature constants · 2556df0a
      Martin Möhrmann authored
      The parentheses are not required for the definitions and it brings
      the declaration style in line with other architectures feature bits
      defined in internal/cpu.
      
      Change-Id: I86cc3812c1488216779e0d1f0e7481687502e592
      Reviewed-on: https://go-review.googlesource.com/126775
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      2556df0a
    • Ben Shi's avatar
      cmd/compile: optimize 386's comparison · 55697131
      Ben Shi authored
      CMPL/CMPW/CMPB can take a memory operand on 386, and this CL
      implements that optimization.
      
      1. The total size of pkg/linux_386 decreases about 45KB, excluding
      cmd/compile.
      
      2. The go1 benchmark shows a little improvement.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              3.36s ± 2%     3.37s ± 3%    ~     (p=0.537 n=40+40)
      Fannkuch11-4                3.59s ± 1%     3.53s ± 2%  -1.58%  (p=0.000 n=40+40)
      FmtFprintfEmpty-4          46.0ns ± 3%    45.8ns ± 3%    ~     (p=0.249 n=40+40)
      FmtFprintfString-4         80.0ns ± 4%    78.8ns ± 3%  -1.49%  (p=0.001 n=40+40)
      FmtFprintfInt-4            89.7ns ± 2%    90.3ns ± 2%  +0.74%  (p=0.003 n=40+40)
      FmtFprintfIntInt-4          144ns ± 3%     143ns ± 3%  -0.95%  (p=0.003 n=40+40)
      FmtFprintfPrefixedInt-4     181ns ± 4%     180ns ± 2%    ~     (p=0.103 n=40+40)
      FmtFprintfFloat-4           412ns ± 3%     408ns ± 4%  -0.97%  (p=0.018 n=40+40)
      FmtManyArgs-4               607ns ± 4%     605ns ± 4%    ~     (p=0.148 n=40+40)
      GobDecode-4                7.19ms ± 4%    7.24ms ± 5%    ~     (p=0.340 n=40+40)
      GobEncode-4                7.04ms ± 9%    6.99ms ± 9%    ~     (p=0.289 n=40+40)
      Gzip-4                      400ms ± 6%     398ms ± 5%    ~     (p=0.168 n=40+40)
      Gunzip-4                   41.2ms ± 3%    41.7ms ± 3%  +1.40%  (p=0.001 n=40+40)
      HTTPClientServer-4         62.5µs ± 1%    62.1µs ± 2%  -0.61%  (p=0.000 n=37+37)
      JSONEncode-4               20.7ms ± 4%    20.4ms ± 3%  -1.60%  (p=0.000 n=40+40)
      JSONDecode-4               69.4ms ± 4%    69.2ms ± 6%    ~     (p=0.177 n=40+40)
      Mandelbrot200-4            5.22ms ± 6%    5.21ms ± 3%    ~     (p=0.531 n=40+40)
      GoParse-4                  3.29ms ± 3%    3.28ms ± 3%    ~     (p=0.321 n=40+39)
      RegexpMatchEasy0_32-4       104ns ± 4%     103ns ± 7%  -0.89%  (p=0.040 n=40+40)
      RegexpMatchEasy0_1K-4       852ns ± 3%     853ns ± 2%    ~     (p=0.357 n=40+40)
      RegexpMatchEasy1_32-4       113ns ± 8%     113ns ± 3%    ~     (p=0.906 n=40+40)
      RegexpMatchEasy1_1K-4      1.03µs ± 4%    1.03µs ± 5%    ~     (p=0.326 n=40+40)
      RegexpMatchMedium_32-4      136ns ± 3%     133ns ± 3%  -2.31%  (p=0.000 n=40+40)
      RegexpMatchMedium_1K-4     44.0µs ± 3%    43.7µs ± 3%    ~     (p=0.053 n=40+40)
      RegexpMatchHard_32-4       2.27µs ± 3%    2.26µs ± 4%    ~     (p=0.391 n=40+40)
      RegexpMatchHard_1K-4       68.0µs ± 3%    68.9µs ± 3%  +1.28%  (p=0.000 n=40+40)
      Revcomp-4                   1.86s ± 5%     1.86s ± 2%    ~     (p=0.950 n=40+40)
      Template-4                 73.4ms ± 4%    69.9ms ± 7%  -4.78%  (p=0.000 n=40+40)
      TimeParse-4                 449ns ± 4%     441ns ± 5%  -1.76%  (p=0.000 n=40+40)
      TimeFormat-4                416ns ± 3%     417ns ± 4%    ~     (p=0.304 n=40+40)
      [Geo mean]                 67.7µs         67.3µs       -0.55%
      
      name                     old speed      new speed      delta
      GobDecode-4               107MB/s ± 4%   106MB/s ± 5%    ~     (p=0.336 n=40+40)
      GobEncode-4               109MB/s ± 5%   110MB/s ± 9%    ~     (p=0.142 n=38+40)
      Gzip-4                   48.5MB/s ± 5%  48.8MB/s ± 5%    ~     (p=0.172 n=40+40)
      Gunzip-4                  472MB/s ± 3%   465MB/s ± 3%  -1.39%  (p=0.001 n=40+40)
      JSONEncode-4             93.6MB/s ± 4%  95.1MB/s ± 3%  +1.61%  (p=0.000 n=40+40)
      JSONDecode-4             28.0MB/s ± 3%  28.1MB/s ± 6%    ~     (p=0.181 n=40+40)
      GoParse-4                17.6MB/s ± 3%  17.7MB/s ± 3%    ~     (p=0.350 n=40+39)
      RegexpMatchEasy0_32-4     308MB/s ± 4%   311MB/s ± 6%  +0.96%  (p=0.025 n=40+40)
      RegexpMatchEasy0_1K-4    1.20GB/s ± 3%  1.20GB/s ± 2%    ~     (p=0.317 n=40+40)
      RegexpMatchEasy1_32-4     282MB/s ± 7%   282MB/s ± 3%    ~     (p=0.516 n=40+40)
      RegexpMatchEasy1_1K-4     994MB/s ± 4%   991MB/s ± 5%    ~     (p=0.319 n=40+40)
      RegexpMatchMedium_32-4   7.31MB/s ± 3%  7.49MB/s ± 3%  +2.46%  (p=0.000 n=40+40)
      RegexpMatchMedium_1K-4   23.3MB/s ± 3%  23.4MB/s ± 3%    ~     (p=0.052 n=40+40)
      RegexpMatchHard_32-4     14.1MB/s ± 3%  14.1MB/s ± 4%    ~     (p=0.391 n=40+40)
      RegexpMatchHard_1K-4     15.1MB/s ± 3%  14.9MB/s ± 3%  -1.27%  (p=0.000 n=40+40)
      Revcomp-4                 137MB/s ± 5%   137MB/s ± 2%    ~     (p=0.942 n=40+40)
      Template-4               26.5MB/s ± 4%  27.8MB/s ± 7%  +5.03%  (p=0.000 n=40+40)
      [Geo mean]               78.6MB/s       79.0MB/s       +0.57%
      
      Change-Id: Idcacc6881ef57cd7dc33aa87b711282842b72a53
      Reviewed-on: https://go-review.googlesource.com/126618
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      55697131
    • Ben Shi's avatar
      cmd/compile: optimize AMD64 with more read-modify-write operations · b75c5c59
      Ben Shi authored
      6 more operations which do read-modify-write with a constant
      source operand are added.
      
      1. The total size of pkg/linux_amd64 decreases about 3KB, excluding
      cmd/compile.
      
      2. The go1 benckmark shows a slight improvement.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              2.61s ± 4%     2.67s ± 2%  +2.26%  (p=0.000 n=30+29)
      Fannkuch11-4                2.39s ± 2%     2.32s ± 2%  -2.67%  (p=0.000 n=30+30)
      FmtFprintfEmpty-4          44.0ns ± 4%    41.7ns ± 4%  -5.15%  (p=0.000 n=30+30)
      FmtFprintfString-4         74.2ns ± 4%    72.3ns ± 4%  -2.59%  (p=0.000 n=30+30)
      FmtFprintfInt-4            81.7ns ± 3%    78.8ns ± 4%  -3.54%  (p=0.000 n=27+30)
      FmtFprintfIntInt-4          130ns ± 4%     124ns ± 5%  -4.60%  (p=0.000 n=30+30)
      FmtFprintfPrefixedInt-4     154ns ± 3%     152ns ± 3%  -1.13%  (p=0.012 n=30+30)
      FmtFprintfFloat-4           215ns ± 4%     212ns ± 5%  -1.56%  (p=0.002 n=30+30)
      FmtManyArgs-4               522ns ± 3%     512ns ± 3%  -1.84%  (p=0.001 n=30+30)
      GobDecode-4                6.42ms ± 5%    6.49ms ± 7%    ~     (p=0.070 n=30+30)
      GobEncode-4                6.07ms ± 8%    5.98ms ± 8%    ~     (p=0.150 n=30+30)
      Gzip-4                      236ms ± 4%     223ms ± 4%  -5.57%  (p=0.000 n=30+30)
      Gunzip-4                   37.4ms ± 3%    36.7ms ± 4%  -2.03%  (p=0.000 n=30+30)
      HTTPClientServer-4         58.7µs ± 1%    58.5µs ± 2%  -0.37%  (p=0.018 n=30+29)
      JSONEncode-4               12.0ms ± 4%    12.1ms ± 3%    ~     (p=0.112 n=30+30)
      JSONDecode-4               54.5ms ± 3%    55.5ms ± 4%  +1.80%  (p=0.006 n=30+30)
      Mandelbrot200-4            3.78ms ± 4%    3.78ms ± 4%    ~     (p=0.173 n=30+30)
      GoParse-4                  3.16ms ± 5%    3.22ms ± 5%  +1.75%  (p=0.010 n=30+30)
      RegexpMatchEasy0_32-4      76.6ns ± 1%    75.9ns ± 3%    ~     (p=0.672 n=25+30)
      RegexpMatchEasy0_1K-4       252ns ± 3%     253ns ± 3%  +0.57%  (p=0.027 n=30+30)
      RegexpMatchEasy1_32-4      69.8ns ± 4%    70.2ns ± 6%    ~     (p=0.539 n=30+30)
      RegexpMatchEasy1_1K-4       374ns ± 3%     373ns ± 5%    ~     (p=0.263 n=30+30)
      RegexpMatchMedium_32-4      107ns ± 4%     109ns ± 3%    ~     (p=0.067 n=30+30)
      RegexpMatchMedium_1K-4     33.9µs ± 5%    34.1µs ± 4%    ~     (p=0.297 n=30+30)
      RegexpMatchHard_32-4       1.54µs ± 3%    1.56µs ± 4%  +1.43%  (p=0.002 n=30+30)
      RegexpMatchHard_1K-4       46.6µs ± 3%    47.0µs ± 3%    ~     (p=0.055 n=30+30)
      Revcomp-4                   411ms ± 6%     407ms ± 6%    ~     (p=0.219 n=30+30)
      Template-4                 66.8ms ± 3%    64.8ms ± 5%  -3.01%  (p=0.000 n=30+30)
      TimeParse-4                 312ns ± 2%     319ns ± 3%  +2.50%  (p=0.000 n=30+30)
      TimeFormat-4                296ns ± 5%     299ns ± 3%  +0.93%  (p=0.005 n=30+30)
      [Geo mean]                 47.5µs         47.1µs       -0.75%
      
      name                     old speed      new speed      delta
      GobDecode-4               120MB/s ± 5%   118MB/s ± 6%    ~     (p=0.072 n=30+30)
      GobEncode-4               127MB/s ± 8%   129MB/s ± 8%    ~     (p=0.150 n=30+30)
      Gzip-4                   82.1MB/s ± 4%  87.0MB/s ± 4%  +5.90%  (p=0.000 n=30+30)
      Gunzip-4                  519MB/s ± 4%   529MB/s ± 4%  +2.07%  (p=0.001 n=30+30)
      JSONEncode-4              162MB/s ± 4%   161MB/s ± 3%    ~     (p=0.110 n=30+30)
      JSONDecode-4             35.6MB/s ± 3%  35.0MB/s ± 4%  -1.77%  (p=0.007 n=30+30)
      GoParse-4                18.3MB/s ± 4%  18.0MB/s ± 4%  -1.72%  (p=0.009 n=30+30)
      RegexpMatchEasy0_32-4     418MB/s ± 1%   422MB/s ± 3%    ~     (p=0.645 n=25+30)
      RegexpMatchEasy0_1K-4    4.06GB/s ± 3%  4.04GB/s ± 3%  -0.57%  (p=0.033 n=30+30)
      RegexpMatchEasy1_32-4     459MB/s ± 4%   456MB/s ± 6%    ~     (p=0.530 n=30+30)
      RegexpMatchEasy1_1K-4    2.73GB/s ± 3%  2.75GB/s ± 5%    ~     (p=0.279 n=30+30)
      RegexpMatchMedium_32-4   9.28MB/s ± 5%  9.18MB/s ± 4%    ~     (p=0.086 n=30+30)
      RegexpMatchMedium_1K-4   30.2MB/s ± 4%  30.0MB/s ± 4%    ~     (p=0.300 n=30+30)
      RegexpMatchHard_32-4     20.8MB/s ± 3%  20.5MB/s ± 4%  -1.41%  (p=0.002 n=30+30)
      RegexpMatchHard_1K-4     22.0MB/s ± 3%  21.8MB/s ± 3%    ~     (p=0.051 n=30+30)
      Revcomp-4                 619MB/s ± 7%   625MB/s ± 7%    ~     (p=0.219 n=30+30)
      Template-4               29.0MB/s ± 3%  29.9MB/s ± 4%  +3.11%  (p=0.000 n=30+30)
      [Geo mean]                123MB/s        123MB/s       +0.28%
      
      Change-Id: I850652cfd53329c1af804b7f57f4393d8097bb0d
      Reviewed-on: https://go-review.googlesource.com/121135
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
      b75c5c59
    • Martin Möhrmann's avatar
      cmd/compile: split slow 3 operand LEA instructions into two LEAs · b40db514
      Martin Möhrmann authored
      go tool objdump ../bin/go | grep "\.go\:" | grep -c "LEA.*0x.*[(].*[(].*"
      Before: 1012
      After: 20
      
      Updates #21735
      
      Benchmarks thanks to drchase@google.com
      Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz
      benchstat -geomean *.stdout | grep -v pkg:
      name                                       old time/op    new time/op    delta
      FastTest2KB-12                              131.0ns ± 0%   131.0ns ± 0%    ~     (all equal)
      BaseTest2KB-12                              601.3ns ± 0%   601.3ns ± 0%    ~     (p=0.942 n=45+41)
      Encoding4KBVerySparse-12                    15.38µs ± 1%   15.41µs ± 0%  +0.24%  (p=0.000 n=44+43)
      Join_8-12                                    2.117s ± 2%    2.128s ± 2%  +0.51%  (p=0.007 n=48+48)
      HashimotoLight-12                           1.663ms ± 1%   1.668ms ± 1%  +0.35%  (p=0.006 n=49+49)
      Sha3_224_MTU-12                             4.843µs ± 0%   4.836µs ± 0%  -0.14%  (p=0.000 n=45+42)
      GenSharedKeyP256-12                         73.74µs ± 0%   70.92µs ± 0%  -3.82%  (p=0.000 n=48+47)
      Run/10k/1-12                                 24.81s ± 0%    24.88s ± 0%  +0.30%  (p=0.000 n=48+47)
      Run/10k/16-12                                4.621s ± 2%    4.625s ± 3%    ~     (p=0.776 n=50+50)
      Dnrm2MediumPosInc-12                        4.018µs ± 0%   4.019µs ± 0%    ~     (p=0.060 n=50+48)
      DasumMediumUnitaryInc-12                    855.3ns ± 0%   855.0ns ± 0%  -0.03%  (p=0.000 n=47+42)
      Dgeev/Circulant10-12                        40.45µs ± 1%   41.11µs ± 1%  +1.62%  (p=0.000 n=45+49)
      Dgeev/Circulant100-12                       10.42ms ± 2%   10.61ms ± 1%  +1.83%  (p=0.000 n=49+48)
      MulWorkspaceDense1000Hundredth-12           64.69ms ± 1%   64.63ms ± 1%    ~     (p=0.718 n=48+48)
      ScaleVec10000Inc20-12                       22.31µs ± 1%   22.29µs ± 1%    ~     (p=0.424 n=50+50)
      ValidateVersionTildeFail-12                 737.6ns ± 1%   736.0ns ± 1%  -0.22%  (p=0.000 n=49+49)
      StripHTML-12                                2.846µs ± 0%   2.806µs ± 1%  -1.40%  (p=0.000 n=43+50)
      ReaderContains-12                           6.073µs ± 0%   5.999µs ± 0%  -1.22%  (p=0.000 n=48+48)
      EncodeCodecFromInternalProtobuf-12          5.817µs ± 2%   5.555µs ± 2%  -4.51%  (p=0.000 n=47+47)
      TarjanSCCGnp_10_tenth-12                    7.091µs ± 5%   7.132µs ± 7%    ~     (p=0.361 n=50+50)
      TarjanSCCGnp_1000_half-12                   82.25ms ± 3%   81.29ms ± 2%  -1.16%  (p=0.000 n=50+43)
      AStarUndirectedmallWorld_10_2_2_2_Heur-12   15.18µs ± 8%   15.11µs ± 7%    ~     (p=0.511 n=50+49)
      LouvainDirectedMultiplex-12                 20.92ms ± 1%   21.00ms ± 1%  +0.36%  (p=0.000 n=48+49)
      WalkAllBreadthFirstGnp_10_tenth-12          2.974µs ± 4%   2.964µs ± 5%    ~     (p=0.504 n=50+50)
      WalkAllBreadthFirstGnp_1000_tenth-12        9.733ms ± 4%   9.741ms ± 4%    ~     (p=0.774 n=48+50)
      TextMovementBetweenSegments-12              432.8µs ± 0%   433.2µs ± 1%    ~     (p=0.128 n=50+50)
      Growth_MultiSegment-12                      13.11ms ± 0%   13.19ms ± 1%  +0.58%  (p=0.000 n=44+46)
      AddingFields/Zap.Sugar-12                   1.296µs ± 1%   1.310µs ± 2%  +1.09%  (p=0.000 n=43+43)
      AddingFields/apex/log-12                    34.19µs ± 1%   34.31µs ± 1%  +0.35%  (p=0.000 n=45+45)
      AddingFields/inconshreveable/log15-12       30.08µs ± 2%   30.07µs ± 2%    ~     (p=0.803 n=48+47)
      AddingFields/sirupsen/logrus-12             6.683µs ± 3%   6.735µs ± 3%  +0.78%  (p=0.000 n=43+42)
      
      [Geo mean]                                  143.5µs        143.3µs       -0.16%
      
      Change-Id: I637203c75c837737f1febced75d5985703e51044
      Reviewed-on: https://go-review.googlesource.com/114655
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Reviewed-by: 's avatarIlya Tocar <ilya.tocar@intel.com>
      b40db514
    • Yury Smolsky's avatar
      cmd/cover: remove unused global var and the unquote function · c3533d7a
      Yury Smolsky authored
      Change-Id: I52a39f2d8f1a296f23624e3ec577d9ad1b8302f1
      Reviewed-on: https://go-review.googlesource.com/126555
      Run-TryBot: Yury Smolsky <yury@smolsky.by>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      c3533d7a
    • Ben Shi's avatar
      cmd/internal/obj/arm64: add SWPALD/SWPALW/SWPALH/SWPALB · 26d62b4c
      Ben Shi authored
      Those new instructions have acquire/release semantics, besides
      normal atomic SWPD/SWPW/SWPH/SWPB.
      
      Change-Id: I24821a4d21aebc342897ae52903aef612c8d8a4a
      Reviewed-on: https://go-review.googlesource.com/128476
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      26d62b4c
    • Ben Shi's avatar
      cmd/compile: optimize ARM's comparision · 285747b9
      Ben Shi authored
      Since MULA&MULS cost more CPU cycles than MUL, so
      	MUL Rx, Ry, Rd
      	CMP Ra, Rd
      cost less cycles than
      	MULA Rx, Ry, Ra, Rd
      	CMP $0, Rd
      
      This CL implement that optimization, and the GobEncode-4 of the go1 benchmark
      got a little improvement, while other cases got little impact (noise excluded).
      
      name                     old time/op    new time/op    delta
      BinaryTree17-4              25.2s ± 1%     25.2s ± 0%    ~     (p=0.420 n=30+29)
      Fannkuch11-4                13.3s ± 0%     13.3s ± 0%  +0.03%  (p=0.003 n=27+30)
      FmtFprintfEmpty-4           406ns ± 0%     405ns ± 0%    ~     (p=0.309 n=30+30)
      FmtFprintfString-4          672ns ± 0%     670ns ± 0%  -0.32%  (p=0.000 n=29+29)
      FmtFprintfInt-4             717ns ± 0%     714ns ± 0%  -0.42%  (p=0.000 n=27+22)
      FmtFprintfIntInt-4         1.07µs ± 0%    1.07µs ± 0%  +0.11%  (p=0.000 n=19+30)
      FmtFprintfPrefixedInt-4    1.12µs ± 0%    1.12µs ± 0%  -0.43%  (p=0.000 n=23+30)
      FmtFprintfFloat-4          2.25µs ± 0%    2.25µs ± 0%    ~     (p=0.509 n=29+29)
      FmtManyArgs-4              4.01µs ± 1%    4.00µs ± 0%  -0.35%  (p=0.000 n=30+30)
      GobDecode-4                53.6ms ± 4%    51.9ms ± 2%  -3.17%  (p=0.000 n=30+30)
      GobEncode-4                51.1ms ± 2%    50.6ms ± 2%  -0.98%  (p=0.000 n=30+30)
      Gzip-4                      2.61s ± 0%     2.61s ± 0%    ~     (p=0.504 n=30+30)
      Gunzip-4                    312ms ± 0%     312ms ± 0%    ~     (p=0.866 n=30+30)
      HTTPClientServer-4          977µs ± 7%     974µs ± 8%    ~     (p=0.804 n=30+29)
      JSONEncode-4                127ms ± 1%     125ms ± 2%  -1.88%  (p=0.000 n=29+29)
      JSONDecode-4                435ms ± 3%     431ms ± 2%  -0.80%  (p=0.005 n=30+30)
      Mandelbrot200-4            18.4ms ± 0%    18.4ms ± 0%  -0.02%  (p=0.006 n=29+25)
      GoParse-4                  22.4ms ± 0%    22.4ms ± 0%    ~     (p=0.105 n=27+29)
      RegexpMatchEasy0_32-4       753ns ± 0%     753ns ± 0%    ~     (all equal)
      RegexpMatchEasy0_1K-4      4.32µs ± 0%    4.32µs ± 0%    ~     (p=0.554 n=29+28)
      RegexpMatchEasy1_32-4       788ns ± 0%     788ns ± 0%    ~     (all equal)
      RegexpMatchEasy1_1K-4      5.54µs ± 0%    5.55µs ± 0%  +0.03%  (p=0.013 n=29+30)
      RegexpMatchMedium_32-4     1.08µs ± 0%    1.08µs ± 0%    ~     (p=0.443 n=28+28)
      RegexpMatchMedium_1K-4      258µs ± 0%     258µs ± 0%    ~     (p=0.932 n=30+28)
      RegexpMatchHard_32-4       14.8µs ± 0%    14.8µs ± 0%  -0.06%  (p=0.021 n=30+30)
      RegexpMatchHard_1K-4        442µs ± 0%     442µs ± 0%    ~     (p=0.554 n=29+30)
      Revcomp-4                  41.7ms ± 1%    41.7ms ± 1%    ~     (p=0.763 n=28+30)
      Template-4                  528ms ± 1%     528ms ± 0%    ~     (p=0.072 n=30+29)
      TimeParse-4                3.31µs ± 0%    3.31µs ± 0%    ~     (p=0.215 n=30+30)
      TimeFormat-4               6.07µs ± 0%    6.07µs ± 0%    ~     (p=0.733 n=30+30)
      [Geo mean]                  386µs          385µs       -0.29%
      
      name                     old speed      new speed      delta
      GobDecode-4              14.3MB/s ± 4%  14.8MB/s ± 2%  +3.23%  (p=0.000 n=30+30)
      GobEncode-4              15.0MB/s ± 2%  15.2MB/s ± 2%  +0.99%  (p=0.000 n=30+30)
      Gzip-4                   7.44MB/s ± 0%  7.44MB/s ± 0%    ~     (p=0.328 n=29+30)
      Gunzip-4                 62.2MB/s ± 0%  62.2MB/s ± 0%    ~     (p=0.905 n=30+30)
      JSONEncode-4             15.2MB/s ± 1%  15.5MB/s ± 2%  +1.93%  (p=0.000 n=29+29)
      JSONDecode-4             4.46MB/s ± 3%  4.50MB/s ± 2%  +0.79%  (p=0.007 n=30+30)
      GoParse-4                2.58MB/s ± 1%  2.58MB/s ± 1%    ~     (p=0.223 n=29+30)
      RegexpMatchEasy0_32-4    42.5MB/s ± 0%  42.5MB/s ± 0%    ~     (p=0.964 n=30+30)
      RegexpMatchEasy0_1K-4     237MB/s ± 0%   237MB/s ± 0%    ~     (p=0.392 n=29+28)
      RegexpMatchEasy1_32-4    40.6MB/s ± 0%  40.6MB/s ± 0%    ~     (p=0.974 n=30+29)
      RegexpMatchEasy1_1K-4     185MB/s ± 0%   185MB/s ± 0%  -0.03%  (p=0.012 n=29+30)
      RegexpMatchMedium_32-4    920kB/s ± 0%   920kB/s ± 0%    ~     (all equal)
      RegexpMatchMedium_1K-4   3.97MB/s ± 0%  3.97MB/s ± 0%    ~     (all equal)
      RegexpMatchHard_32-4     2.17MB/s ± 0%  2.17MB/s ± 0%  +0.18%  (p=0.000 n=30+28)
      RegexpMatchHard_1K-4     2.32MB/s ± 0%  2.32MB/s ± 0%    ~     (all equal)
      Revcomp-4                61.0MB/s ± 1%  61.0MB/s ± 1%    ~     (p=0.744 n=28+30)
      Template-4               3.68MB/s ± 1%  3.67MB/s ± 0%    ~     (p=0.147 n=30+29)
      [Geo mean]               12.7MB/s       12.7MB/s       +0.41%
      
      Change-Id: Ic6053c350c94e9bf57db16542e1370b848155342
      Reviewed-on: https://go-review.googlesource.com/129535
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      285747b9
    • Ben Shi's avatar
      cmd/compile/internal/x86: simplify 387 with FLDZ and FLZ1 · bd483592
      Ben Shi authored
      FLD1 pushes +1.0 to the 387 register stack, and FLDZ pushes +0.0
      to the 387 regiser stack.
      
      They can be used to simplify MOVSSconst/MOVSDconst when the
      constant is +0.0, -0.0, +1.0, -1.0.
      
      The size of the go executable reduces about 62KB and the total size
      of pkg/linux_386 reduces about 7KB with this optimization.
      
      Change-Id: Icc8213b58262e0024a277cf1103812a17dd4b05e
      Reviewed-on: https://go-review.googlesource.com/119635
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      bd483592
    • Yury Smolsky's avatar
      cmd/compile: remove empty branches · 5403b8ec
      Yury Smolsky authored
      Change-Id: Id87d9f55d1714fc553f5b1a9cba0f2fe348dad3e
      Reviewed-on: https://go-review.googlesource.com/126396
      Run-TryBot: Yury Smolsky <yury@smolsky.by>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      5403b8ec
    • Daniel Martí's avatar
      cmd/compile/internal/gc: various minor cleanups · 3b7b9dce
      Daniel Martí authored
      Two funcs and a field were unused. Remove them.
      
      A few statements could be made simpler.
      
      importsym's pos parameter was unused, so remove it.
      
      Finally, don't use printf-like funcs with constant strings that have no
      formatting directives.
      
      Change-Id: I415452249bf2168aa353ac4f3643dfc03017ee53
      Reviewed-on: https://go-review.googlesource.com/117699
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDave Cheney <dave@cheney.net>
      3b7b9dce
    • Daniel Martí's avatar
      all: update stale test skips · 9e4d87d1
      Daniel Martí authored
      Issues #10043, #15405, and #22660 appear to have been fixed, and
      whatever tests I could run locally do succeed, so remove the skips.
      
      Issue #7237 was closed in favor of #17906, so update its skip line.
      
      Issue #7634 was closed as it had not appeared for over three years.
      Re-enable it for now. An issue should be open if the test starts being
      skipped again.
      
      Change-Id: I67daade906744ed49223291035baddaad9f56dca
      Reviewed-on: https://go-review.googlesource.com/121735
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      9e4d87d1
    • Daniel Martí's avatar
      strings: add Builder.Cap · 0566ab33
      Daniel Martí authored
      To report the capacity of the underlying buffer. The method mirrors
      bytes.Buffer.Cap.
      
      The method can be useful to know whether or not calling write or grow
      methods will result in an allocation, or to know how much memory has
      been allocated so far.
      
      Fixes #26269.
      
      Change-Id: I391db45ae825011566b594836991e28135369a78
      Reviewed-on: https://go-review.googlesource.com/122835
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      0566ab33
    • Daniel Martí's avatar
      cmd/vet: rewrite structtag using go/types · b2e66f1a
      Daniel Martí authored
      This lets us simplify the code considerably. For example, unquoting the
      tag is no longer necessary, and we can get the field name with a single
      method call.
      
      While at it, fix a typechecking error in testdata/structtag.go, which
      hadn't been caught since vet still skips past go/types errors in most
      cases.
      
      Using go/types will also let us expand the structtag check more easily
      if we want to, for example to allow it to check for duplicates in
      embedded fields.
      
      Finally, update one of the test cases to check for regressions when we
      output invalid tag strings. We also checked that these two changes to
      testdata/structtag.go didn't fail with the old structtag check.
      
      For #25593.
      
      Change-Id: Iea4906d0f30a67f36b28c21d8aa96251aae653f5
      Reviewed-on: https://go-review.googlesource.com/115676
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      b2e66f1a
    • Tobias Klauser's avatar
      syscall: use private copy of ustat_t on Linux · 88aa2080
      Tobias Klauser authored
      Port CL 120295 from golang.org/x/sys/unix to the syscall package.
      
      The ustat syscall has been deprecated on Linux for a long time and the
      upcoming glibc 2.28 will remove ustat.h and it can no longer be used to
      to generate the Ustat_t wrapper type. Since Linux still provides the
      syscall, let's not break this functionality and add a private copy of
      struct ustat so Ustat_t can still be generated.
      
      Fixes golang/go#25990
      
      Change-Id: I0dab2ba1cc76fbd21553b499f9256fd9d59ca409
      Reviewed-on: https://go-review.googlesource.com/120563
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      88aa2080
    • Iskander Sharipov's avatar
      net: combine append calls in reverseaddr · dc79206a
      Iskander Sharipov authored
      Combined appends lead to fewer machine code and faster performance.
      Some may even say that it makes code more readable.
      
      Running revAddrTests over reverseaddr gives measurable improvements:
      
      	name              old time/op  new time/op  delta
      	ReverseAddress-8  4.10µs ± 3%  3.94µs ± 1%  -3.81%  (p=0.000 n=10+9)
      
      Change-Id: I9bda7a20f802bcdffc6e948789765d04c6da04e7
      Reviewed-on: https://go-review.googlesource.com/117615
      Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDaniel Martí <mvdan@mvdan.cc>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      dc79206a
    • Daniel Martí's avatar
      cmd/go: add missing newlines in printf formats · e0faedbb
      Daniel Martí authored
      These are all errors given by module-aware cmd/go, so they must end with
      a newline. It looks like they were omitted by mistake.
      
      Fixes #27081.
      
      Change-Id: I19b5803bb48a6d5dd52e857f483278fe20fe246b
      Reviewed-on: https://go-review.googlesource.com/129780
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      e0faedbb
    • Austin Clements's avatar
      doc/go1.11: Delve 1.1.0 added support for method calls · edf81050
      Austin Clements authored
      Change-Id: I5f887f9831378cf76f5a9f447f481ea24c63f390
      Reviewed-on: https://go-review.googlesource.com/129803Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      edf81050
  2. 18 Aug, 2018 8 commits
    • Russ Cox's avatar
      cmd/go: fix module get -insecure · bf80e3b5
      Russ Cox authored
      Need to actually use the flag for it to take effect.
      
      Fixes #27049.
      
      Change-Id: I57227b45f46f9dd67ecbf87c11bb2d08124bcfa0
      Reviewed-on: https://go-review.googlesource.com/129801
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      bf80e3b5
    • Russ Cox's avatar
      cmd/go/internal/modconv: fix TestConvertLegacyConfig expectations · c5046bca
      Russ Cox authored
      It was a bug to find that commit in the Masterminds/semver repo.
      It's not part of the main repo but only part of an unmerged pull request.
      The code was updated to try not to look at unmerged pull requests,
      but the test was not. Worse, whether the code succeeds at not looking
      at unmerged pull requests apparently depends on the git version.
      Sigh.
      
      Fixes #26754.
      Fixes #27043.
      
      Change-Id: Ib9e07f565906de4f1169244911a258396688f14d
      Reviewed-on: https://go-review.googlesource.com/129800
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      c5046bca
    • Russ Cox's avatar
      cmd/go: fix go mod tidy crash on empty module · 5d750db0
      Russ Cox authored
      Fixes #27066.
      
      Change-Id: Iede4385ad86b42d7d90814965b161a7e64d29833
      Reviewed-on: https://go-review.googlesource.com/129799
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      5d750db0
    • Russ Cox's avatar
      cmd/go: allow 'go run x.go' to use nearby internal imports in module mode · cc880de4
      Russ Cox authored
      In GOPATH mode the rule has always been that 'go run x.go' can
      import whatever the package in x.go's directory would be able to
      import. Apply the same rule here.
      
      The bad import path was triggering other mysterious errors
      during 'go run' in other circumstances. Setting it correctly fixes
      those too.
      
      Fixes #26046.
      Fixes #27022.
      
      Change-Id: I0a9b0a154a20f48add5a199da85572e7ffe0cde4
      Reviewed-on: https://go-review.googlesource.com/129798
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      cc880de4
    • Russ Cox's avatar
      cmd/go: fix and reenable TestAccidentalGitCheckout · 239b8f2e
      Russ Cox authored
      This is an important security problem so we shouldn't disable the test.
      The second half was failing on case-sensitive file systems but the
      first half is still good.
      
      Fixes #22983.
      
      Change-Id: I437bb4c9f78eb3177aa8b619e2357b2539566ca9
      Reviewed-on: https://go-review.googlesource.com/129797
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      239b8f2e
    • Russ Cox's avatar
      cmd/go: update TestGoGetUpdateWithWildcard expected behavior · 714c141c
      Russ Cox authored
      If you run
      
      	go get -u github.com/rsc/foo/bar...
      
      then the go get command has always worked hard to make sure
      that it applies the wildcard after downloading rsc/foo.
      (If it applied the wildcard only before downloading rsc/foo,
      it would match nothing if you had an empty GOPATH before,
      and you'd still have an empty afterward, which is clearly useless.)
      
      The goal has always been that if you run the same go get
      command twice, the second command doesn't find anything
      new to do.
      
      CL 19892 worked around an "internal error" failure but broke
      the rule about the first command doing everything the second
      command would. Suppose you had github.com/rsc/foo already,
      with just github.com/rsc/foo/bar, and you run
      
      	go get -u github.com/rsc/...
      
      The wildcard first matches github.com/rsc/foo/bar, but suppose
      updating the repo pulls down github.com/rsc/foo/baz, which
      in turn depends on the non-existent package github.com/rsc/quux.
      We need to reevaluate the wildcard after the download.
      
      The new pattern match refactoring makes this easier and happened
      to have corrected the behavior, but we missed a long test that
      expected the old behavior.
      
      Fix that long test.
      
      Change-Id: I088473e7a90925e5c0f9697da9554a11456ddd08
      Reviewed-on: https://go-review.googlesource.com/129796
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      714c141c
    • Russ Cox's avatar
      cmd/go: treat VCS errors as hard errors in module search · 850c964b
      Russ Cox authored
      If we're looking for a module for a/b/c/d/e,
      we check for a module named a/b/c/d/e,
      then a/b/c/d, then a/b/c, then a/b, then a.
      If we know the source repo for a/b/c and that
      fails, we should report that error instead of
      continuing the loop: a/b and a are useless,
      and the error from a/b/c contains important
      information.
      
      The errors are now a bit more verbose than
      I'd like but they will suffice for Go 1.11.
      
      $ go get github.com/bradfitz/private/sonos
      go get github.com/bradfitz/private/sonos: git ls-remote -q origin in /Users/rsc/pkg/mod/cache/vcs/61e3c76780847e514802ec6af8f940f641c6017f711444f05c59cb17ac46d456: exit status 128:
      	remote: Repository not found.
      	fatal: repository 'https://github.com/bradfitz/private/' not found
      $ go list launchpad.net/gocheck
      can't load package: package launchpad.net/gocheck: unknown import path "launchpad.net/gocheck": bzr branch --use-existing-dir https://launchpad.net/~niemeyer/gocheck/trunk . in /Users/rsc/pkg/mod/cache/vcs/f46ce2ae80d31f9b0a29099baa203e3b6d269dace4e5357a2cf74bd109e13339: exec: "bzr": executable file not found in $PATH
      $
      
      Fixes #26885.
      Fixes #26982.
      
      Change-Id: I2f9cf1853d2d68af18adad668c80513b6ba220d6
      Reviewed-on: https://go-review.googlesource.com/129683
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      850c964b
    • Russ Cox's avatar
      cmd/go: remove go mod fix, add go help go.mod · 4864decf
      Russ Cox authored
      "go mod fix" does work already done by nearly every other go command.
      It was also confusing why we had both "go mod fix" and "go mod tidy".
      Delete "go mod fix".
      
      The main reason we kept "go mod fix" this long was for the discussion
      of automatic go.mod updates in its documentation, which is now moved
      into a new "go help go.mod".
      
      Fixes #26831.
      
      Change-Id: Ic95ca8918449ab79791d27998e02eb3377ac7972
      Reviewed-on: https://go-review.googlesource.com/129682
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      4864decf
  3. 17 Aug, 2018 13 commits
    • Russ Cox's avatar
      cmd/go/internal/modfetch: correct TestCodeRepo expectation · 16a72125
      Russ Cox authored
      The proxy protocol was simplified to only send
      (and only receive) the Path and Version fields
      in the JSON blob, not Name and Short.
      (Those make sense when querying a VCS repo directly,
      but not when talking about extracted modules.)
      So don't expect them in the test.
      
      Fixes #27042.
      
      Change-Id: I3daacd668126e2227dcc8e6b89ee0cf0e3c8497c
      Reviewed-on: https://go-review.googlesource.com/129684
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      16a72125
    • David du Colombier's avatar
      os: handle TMPDIR in TempDir on Plan 9 · 0a842d55
      David du Colombier authored
      CL 129063 added a test in TestScript/mod_enabled,
      which was failing on Plan 9.
      
      The test was failing because the Init function
      of the cmd/go/internal/modload package was
      expecting ModRoot to be part of os.TempDir.
      
      However, ModRoot was set to TMPDIR, while
      os.TempDir is returning /tmp on Plan 9.
      
      This change fixes the implementation of
      os.TempDir on Plan 9 to handle the TMPDIR
      environment variable, similarly to Unix.
      
      Fixes #27065.
      
      Change-Id: Id6ff926c5c379f63cab2dfc378fa6c15293fd453
      Reviewed-on: https://go-review.googlesource.com/129775Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      0a842d55
    • Russ Cox's avatar
      cmd/go: do not turn list ./nonexist into a network lookup · 64fae252
      Russ Cox authored
      If you're in a directory corresponding to x/y
      and you run go list ./z, we do at some point
      want to turn that into x/y/z. But if ./z does
      not exist that will make the go command
      check the network to see if it can find x/y/z.
      That's clearly wrong: ./z means that directory,
      nothing else. And it turns a typo into a long delay,
      which is even worse.
      
      Fixes #26874.
      
      Change-Id: Iec15fa7b359af11b6a4fc6cb082e593658fb6e41
      Reviewed-on: https://go-review.googlesource.com/129061
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      64fae252
    • Russ Cox's avatar
      cmd/go: report which patterns match each package in list · 8dd27b18
      Russ Cox authored
      It's important for some uses of go/packages, as well as for some
      of go/packages's internal use, to be able to tell which results from
      go list output correspond to which patterns, keeping in mind that
      a single package might have been matched by multiple patterns.
      
      Also adds test for #26925.
      
      Change-Id: I708ac162f65d9946fe6afb244b08dc7b04d2b530
      Reviewed-on: https://go-review.googlesource.com/129060
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      8dd27b18
    • Russ Cox's avatar
      cmd/go: fix -gcflags, -ldflags not applying to current directory · 2ce6da0b
      Russ Cox authored
      A flag setting like -gcflags=-e applies only to the packages
      named on the command line, not to their dependencies.
      The way we used to implement this was to remember the
      command line arguments, reinterpret them as pattern matches
      instead of package argument generators (globs), and apply them
      during package load. The reason for this complexity was to
      address a command-line like:
      
      	go build -gcflags=-e fmt runtime
      
      The load of fmt will load dependencies, including runtime,
      and the load of runtime will reuse the result of the earlier load.
      Because we were computing the effective -gcflags for each
      package during the load, we had to have a way to tell, when
      encountering runtime during the load of fmt, that runtime had
      been named on the command line, even though we hadn't
      gotten that far. That would be easy if the only possible
      arguments were import paths, but we also need to handle
      
      	go build -gcflags=-e fmt runt...
      	go build -gcflags=-e fmt $GOROOT/src/runtime
      	go build -gcflags=-e fmt $GOROOT/src/runt...
      	and so on.
      
      The match predicates usually did their job well, but not
      always. In particular, thanks to symlinks and case-insensitive
      file systems and unusual ways to spell file paths, it's always
      been possible in various corner cases to give an argument
      that evalutes to the runtime package during loading but
      failed to match it when reused to determine "was this package
      named on the command line?"
      
      CL 109235 fixed one instance of this problem by making
      a directory pattern match case-insensitive on Windows, but that
      is incorrect in some other cases and doesn't address the root problem,
      namely that there will probably always be odd corner cases
      where pattern matching and pattern globbing are not exactly aligned.
      
      This CL eliminates the assumption that pattern matching
      and pattern globbing are always completely in agreement,
      by simply marking the packages named on the command line
      after the package load returns them. This means delaying
      the computation of tool flags until after the load too,
      for a few different ways packages are loaded.
      The different load entry points add some complexity,
      which is why the original approach seemed more attractive,
      but the original approach had complexity that we simply
      didn't recognize at the time.
      
      This CL then rolls back the CL 109235 pattern-matching change,
      but it keeps the test introduced in that CL. That test still passes.
      
      In addition to fixing ambiguity due to case-sensitive file systems,
      this new approach also very likely fixes various ambiguities that
      might arise from abuse of symbolic links.
      
      Fixes #24232.
      Fixes #24456.
      Fixes #24750.
      Fixes #25046.
      Fixes #25878.
      
      Change-Id: I0b09825785dfb5112fb11494cff8527ebf57966f
      Reviewed-on: https://go-review.googlesource.com/129059
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      2ce6da0b
    • Russ Cox's avatar
      cmd/go: distinguish patterns from the results of matching them · d46587c4
      Russ Cox authored
      To date the go command has always just treated the command line
      package patterns as a []string, expanded by pattern matching into
      another []string. As a result, the code is not always clear about
      whether a particular []string contains patterns or results.
      A few different important bugs are caused by not keeping
      this distinction clear enough. This CL sets us up well for fixing those,
      by introducing an explicit search.Match struct holding the
      results of matching a single pattern.
      
      The added clarity here also makes it clear how to avoid duplicate
      warnings about unmatched packages.
      
      Fixes #26925. (Test in followup CL.)
      
      Change-Id: Ic2f0606f7ab8b3734a40e22d3cb1e6f58d031061
      Reviewed-on: https://go-review.googlesource.com/129058
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      d46587c4
    • Alan Donovan's avatar
      doc: describe golang.org/x/go/packages in go1.11 release notes · 08d10f9a
      Alan Donovan authored
      Also, rename an HTML element ID to avoid duplicate.
      
      Fixes golang/go#27038
      
      Change-Id: Icc064a1cc86ddc794fc085d98b4cde3effff8ad0
      Reviewed-on: https://go-review.googlesource.com/129635Reviewed-by: 's avatarAndrew Bonventre <andybons@golang.org>
      Reviewed-by: 's avatarIan Cottrell <iancottrell@google.com>
      08d10f9a
    • Russ Cox's avatar
      go/doc: allow interior dot in heading, as in "go.mod" · c81d216d
      Russ Cox authored
      Only the expected headings are affected.
      Diffing the output of "go run headscan.go" before and after:
      
      $ diff head1 head2
      26a27,28
      > 	Edit go.mod from tools or scripts
      > 	Make go.mod semantically consistent
      168c170
      < 141 headings found
      ---
      > 143 headings found
      $
      
      Fixes #26938.
      
      Change-Id: I204fd982a60773aa26880cd19eed890c373b8ab6
      Reviewed-on: https://go-review.googlesource.com/129677
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      c81d216d
    • Russ Cox's avatar
      doc/code: drop mentions of GOPATH/pkg directory · 3e0f5f93
      Russ Cox authored
      It's already half gone and later will be all gone.
      It's not worth explaining in an introduction doc.
      
      Fixes #24506
      Updates #4719
      
      Change-Id: Ie48128b3aa090d84e0e734aa45f14a4480292913
      Reviewed-on: https://go-review.googlesource.com/129679Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      3e0f5f93
    • Daniel Martí's avatar
      cmd/vet: don't suggest ... if it breaks a program · 2482451f
      Daniel Martí authored
      It is possible to write a function that seems to wrap a print/printf
      call, but then doesn't. For example, if the string parameter we thought
      was the format is used as another argument.
      
      One option would be to make vet's print analysis smarter, to detect when
      format strings are indeed used like we initially suspected.
      
      However, I've opted for a simpler solution - check if the print/printf
      call is already using more than one variadic argument, in which case
      using an ellipsis in the last one would break the program:
      
      	// too many arguments in call to fmt.Printf
      	fmt.Printf(format, arg0, args...)
      
      Fixes #26979.
      
      Change-Id: I39371f1cec8483cfd2770a91670c1e80cbb9efdf
      Reviewed-on: https://go-review.googlesource.com/129575
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      2482451f
    • Dan Johnson's avatar
      cmd/compile: make duplicate anonymous interface output deterministic · 876c6d1f
      Dan Johnson authored
      Ranging through a map is non-deterministic and there can be duplicate
      entries in the set (with the same name) which don't have identical
      definitions in some cases.
      
      Fixes #27013
      
      Change-Id: I378c48bc359c10b25b9238e0c663b498455b19fd
      Reviewed-on: https://go-review.googlesource.com/129515Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      876c6d1f
    • Russ Cox's avatar
      cmd/go: document import "C" check from CL 129062 · 751ea936
      Russ Cox authored
      Added this locally but then broke the first rule of Gerrit
      and clicked Submit instead of running "git submit".
      
      Change-Id: I83c28d9151c566e9b2092e2613d67731a5d64beb
      Reviewed-on: https://go-review.googlesource.com/129678
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      751ea936
    • Russ Cox's avatar
      cmd/go: ignore import "C" files in module loader in non-cgo mode · 974d5364
      Russ Cox authored
      Obviously, including files that import "C" when cgo is disabled is wrong.
      The package load step correctly excludes them and finds no files at all,
      which then causes a failure.
      
      Fixes #26927.
      
      Change-Id: I00e6d6450e783d467d20bde99e91240ecb0db837
      Reviewed-on: https://go-review.googlesource.com/129062
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      Reviewed-by: 's avatarDavid du Colombier <0intro@gmail.com>
      974d5364