1. 20 Aug, 2018 25 commits
    • Michael Munday's avatar
      math: use s390x mnemonics rather than binary encodings · edae0ff8
      Michael Munday authored
      TMLL, LGDR and LDGR have all been added to the Go assembler
      previously, so we don't need to encode them using WORD and BYTE
      directives anymore. This is purely a cosmetic change, it does not
      change the contents of any object files.
      
      Change-Id: I93f815b91be310858297d8a0dc9e6d8e3f09dd65
      Reviewed-on: https://go-review.googlesource.com/129895
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      edae0ff8
    • Ben Hoyt's avatar
      text/scanner: don't allow Float exponents with no mantissa · 6c7e199e
      Ben Hoyt authored
      Previously Scanner would allow float literals like "1.5e" and "1e+"
      that weren't actually valid Go float literals, and also not valid
      when passed to ParseFloat. This commit fixes that behaviour to match
      the documentation ("recognizes all literals as defined by the Go
      language specification"), and Scanner emits an error in these cases.
      
      Fixes #26374
      
      Change-Id: I6855402ea43febb448c6dff105b9578e31803c01
      Reviewed-on: https://go-review.googlesource.com/129095Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6c7e199e
    • Martin Möhrmann's avatar
      internal/cpu: add and use cpu.CacheLinePad for padding structs · 7b9c2c19
      Martin Möhrmann authored
      Add a CacheLinePad struct type to internal/cpu that has a size of CacheLineSize.
      This can be used for padding structs in order to avoid false sharing.
      
      Updates #25203
      
      Change-Id: Icb95ae68d3c711f5f8217140811cad1a1d5be79a
      Reviewed-on: https://go-review.googlesource.com/116276
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      7b9c2c19
    • Ben Shi's avatar
      cmd/internal/obj/arm64: add register indexed FMOVS/FMOVD · 84feb4bb
      Ben Shi authored
      This CL adds register indexed FMOVS/FMOVD.
      FMOVS Fx, (Rn)(Rm)
      FMOVS Fx, (Rn)(Rm<<2)
      FMOVD Fx, (Rn)(Rm)
      FMOVD Fx, (Rn)(Rm<<3)
      FMOVS (Rn)(Rm), Fx
      FMOVS (Rn)(Rm<<2), Fx
      FMOVD (Rn)(Rm), Fx
      FMOVD (Rn)(Rm<<3), Fx
      
      Change-Id: Id76de6a4be96b64cf79d7e9a1962d9d49cb462f2
      Reviewed-on: https://go-review.googlesource.com/123995
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      84feb4bb
    • Martin Möhrmann's avatar
      internal/cpu: make all constants for s390x feature detection typed · 21ac8119
      Martin Möhrmann authored
      Only the first constant in the function and facility
      constant declaration blocks were typed constants.
      Make all other constants used for function codes and
      named facilities also typed.
      
      Change-Id: I1814121de3733094da699c78b7311f99ba4772e1
      Reviewed-on: https://go-review.googlesource.com/126776
      Run-TryBot: Martin Möhrmann <moehrmann@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      21ac8119
    • Ben Shi's avatar
      cmd/compile: optimize ARMv7 code · 0a382e0b
      Ben Shi authored
      "AND $0xffff0000, Rx" will be encoded to 12 bytes.
      1. MOVWload from the constant pool to Rtmp
      2. AND Rtmp, Rx
      3. a 4-byte item in the constant pool
      
      It can be simplified to 8 bytes on ARMv7, since ARMv7 has
      "MOVW $imm-16, Rx".
      1. MOVW $0xffff, Rtmp
      2. BIC Rtmp, Rx
      
      The above optimization also applies to BICconst, ADDconst and
      SUBconst.
      
      1. The total size of pkg/android_arm (excluding cmd/compile)
         decreases about 2KB.
      
      2. The go1 benchmark shows no regression, exlcuding noise.
      name                     old time/op    new time/op    delta
      BinaryTree17-4              25.5s ± 1%     25.2s ± 1%  -0.85%  (p=0.000 n=30+30)
      Fannkuch11-4                13.3s ± 0%     13.3s ± 0%  +0.16%  (p=0.000 n=24+25)
      FmtFprintfEmpty-4           397ns ± 0%     394ns ± 0%  -0.64%  (p=0.000 n=30+30)
      FmtFprintfString-4          679ns ± 0%     678ns ± 0%    ~     (p=0.093 n=30+29)
      FmtFprintfInt-4             708ns ± 0%     707ns ± 0%  -0.19%  (p=0.000 n=27+28)
      FmtFprintfIntInt-4         1.05µs ± 0%    1.05µs ± 0%  -0.07%  (p=0.001 n=18+30)
      FmtFprintfPrefixedInt-4    1.16µs ± 0%    1.15µs ± 0%  -0.41%  (p=0.000 n=29+30)
      FmtFprintfFloat-4          2.26µs ± 0%    2.23µs ± 1%  -1.40%  (p=0.000 n=30+30)
      FmtManyArgs-4              3.96µs ± 0%    3.95µs ± 0%  -0.29%  (p=0.000 n=29+30)
      GobDecode-4                52.9ms ± 2%    53.4ms ± 2%  +0.92%  (p=0.004 n=28+30)
      GobEncode-4                49.7ms ± 2%    49.8ms ± 2%    ~     (p=0.890 n=30+26)
      Gzip-4                      2.61s ± 0%     2.60s ± 0%  -0.36%  (p=0.000 n=29+29)
      Gunzip-4                    312ms ± 0%     311ms ± 0%  -0.13%  (p=0.000 n=30+28)
      HTTPClientServer-4         1.02ms ± 8%    1.00ms ± 7%    ~     (p=0.224 n=29+26)
      JSONEncode-4                125ms ± 1%     124ms ± 3%  -1.05%  (p=0.000 n=25+30)
      JSONDecode-4                432ms ± 1%     436ms ± 2%    ~     (p=0.277 n=26+30)
      Mandelbrot200-4            18.4ms ± 0%    18.4ms ± 0%  +0.02%  (p=0.001 n=28+25)
      GoParse-4                  22.4ms ± 1%    22.3ms ± 1%  -0.41%  (p=0.000 n=28+28)
      RegexpMatchEasy0_32-4       697ns ± 0%     706ns ± 0%  +1.23%  (p=0.000 n=19+30)
      RegexpMatchEasy0_1K-4      4.27µs ± 0%    4.26µs ± 0%  -0.06%  (p=0.000 n=30+30)
      RegexpMatchEasy1_32-4       741ns ± 0%     735ns ± 0%  -0.86%  (p=0.000 n=26+30)
      RegexpMatchEasy1_1K-4      5.49µs ± 0%    5.49µs ± 0%  -0.03%  (p=0.023 n=25+30)
      RegexpMatchMedium_32-4     1.05µs ± 2%    1.04µs ± 2%    ~     (p=0.893 n=30+30)
      RegexpMatchMedium_1K-4      261µs ± 0%     261µs ± 0%  -0.11%  (p=0.000 n=29+30)
      RegexpMatchHard_32-4       14.9µs ± 0%    14.9µs ± 0%  -0.36%  (p=0.000 n=23+29)
      RegexpMatchHard_1K-4        446µs ± 0%     445µs ± 0%  -0.17%  (p=0.000 n=30+29)
      Revcomp-4                  41.6ms ± 1%    41.7ms ± 1%  +0.27%  (p=0.040 n=28+30)
      Template-4                  531ms ± 0%     532ms ± 1%    ~     (p=0.059 n=30+30)
      TimeParse-4                3.40µs ± 0%    3.33µs ± 0%  -2.02%  (p=0.000 n=30+30)
      TimeFormat-4               6.14µs ± 0%    6.11µs ± 0%  -0.45%  (p=0.000 n=27+29)
      [Geo mean]                  384µs          383µs       -0.27%
      
      name                     old speed      new speed      delta
      GobDecode-4              14.5MB/s ± 2%  14.4MB/s ± 2%  -0.90%  (p=0.005 n=28+30)
      GobEncode-4              15.4MB/s ± 2%  15.4MB/s ± 2%    ~     (p=0.741 n=30+25)
      Gzip-4                   7.44MB/s ± 0%  7.47MB/s ± 1%  +0.37%  (p=0.000 n=25+30)
      Gunzip-4                 62.3MB/s ± 0%  62.4MB/s ± 0%  +0.13%  (p=0.000 n=30+28)
      JSONEncode-4             15.5MB/s ± 1%  15.6MB/s ± 3%  +1.07%  (p=0.000 n=25+30)
      JSONDecode-4             4.48MB/s ± 0%  4.46MB/s ± 2%    ~     (p=0.655 n=23+30)
      GoParse-4                2.58MB/s ± 1%  2.59MB/s ± 1%  +0.42%  (p=0.000 n=28+29)
      RegexpMatchEasy0_32-4    45.9MB/s ± 0%  45.3MB/s ± 0%  -1.23%  (p=0.000 n=28+30)
      RegexpMatchEasy0_1K-4     240MB/s ± 0%   240MB/s ± 0%  +0.07%  (p=0.000 n=30+30)
      RegexpMatchEasy1_32-4    43.2MB/s ± 0%  43.5MB/s ± 0%  +0.85%  (p=0.000 n=30+28)
      RegexpMatchEasy1_1K-4     186MB/s ± 0%   186MB/s ± 0%  +0.03%  (p=0.026 n=25+30)
      RegexpMatchMedium_32-4    955kB/s ± 2%   960kB/s ± 2%    ~     (p=0.084 n=30+30)
      RegexpMatchMedium_1K-4   3.92MB/s ± 0%  3.93MB/s ± 0%  +0.14%  (p=0.000 n=29+30)
      RegexpMatchHard_32-4     2.14MB/s ± 0%  2.15MB/s ± 0%  +0.31%  (p=0.000 n=30+26)
      RegexpMatchHard_1K-4     2.30MB/s ± 0%  2.30MB/s ± 0%    ~     (all equal)
      Revcomp-4                61.1MB/s ± 1%  60.9MB/s ± 1%  -0.27%  (p=0.039 n=28+30)
      Template-4               3.66MB/s ± 0%  3.65MB/s ± 1%  -0.14%  (p=0.045 n=30+30)
      [Geo mean]               12.8MB/s       12.8MB/s       +0.04%
      
      Change-Id: I02370e2584b4c041fddd324c97628fd6f0c12183
      Reviewed-on: https://go-review.googlesource.com/123179
      Run-TryBot: Ben Shi <powerman1st@163.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      0a382e0b
    • 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 7 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