1. 11 Oct, 2017 16 commits
    • Austin Clements's avatar
      runtime: mark mstart as nowritebarrierrec · a212083e
      Austin Clements authored
      mstart is the entry point for new threads, so it certainly can't
      interact with GC enough to have write barriers. We move the one small
      piece that is allowed to have write barriers out into its own
      function.
      
      Change-Id: Id9c31d6ffac31d0051fab7db15eb428c11cadbad
      Reviewed-on: https://go-review.googlesource.com/46035
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Reviewed-by: default avatarRick Hudson <rlh@golang.org>
      a212083e
    • Russ Cox's avatar
      cmd/go: replace a.Package.Internal.Pkgfile with a.built · 8f7f46f5
      Russ Cox authored
      Logically the build needs to start treating a.Package as immutable,
      since we might want to build a.Package multiple ways.
      Record the built target in a.built instead.
      
      Right now a.built is predictable ahead of time, but we want to
      move toward satisfying some builds from a cache directory,
      in which case a.built will point into the cache directory
      and not be determined until action execution time.
      
      There is probably more to do with shared libraries, but this
      does not break what's there.
      
      Change-Id: I941988b520bee2f664fd8cabccf389e1dc29628b
      Reviewed-on: https://go-review.googlesource.com/69050
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      8f7f46f5
    • Austin Clements's avatar
      runtime: make m.nextwaitm an muintptr · 12ec5472
      Austin Clements authored
      This field is really a *m (modulo its bottom bit). Change it from
      uintptr to muintptr to document this fact.
      
      Change-Id: I2d181a955ef1d2c1a268edf20091b440d85726c9
      Reviewed-on: https://go-review.googlesource.com/46034
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      Reviewed-by: default avatarRick Hudson <rlh@golang.org>
      12ec5472
    • Russ Cox's avatar
      cmd/go: clean up compile vs link vs shared library actions · 4e8be995
      Russ Cox authored
      Everything got a bit tangled together in b.action1.
      Try to tease things apart again.
      
      In general this is a refactoring of the existing code, with limited
      changes to the effect of the code.
      
      The main additional change is to complete a.Deps for link actions.
      That list now directly contains all the inputs the linker will attempt
      to read, eliminating the need for a transitive traversal of the entire
      action graph to find those. The comepleteness of a.Deps will be
      important when we eventually use it to decide whether an cached
      action output can be reused.
      
      all.bash passes, but it's possible I've broken some subtety of
      buildmode=shared again. Certainly that code took the longest
      to get working.
      
      Change-Id: I34e849eda446dca45a9cfce02b07bec6edb6d0d4
      Reviewed-on: https://go-review.googlesource.com/69831
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      4e8be995
    • Austin Clements's avatar
      runtime: don't start new threads from locked threads · 2595fe7f
      Austin Clements authored
      Applications that need to manipulate kernel thread state are currently
      on thin ice in Go: they can use LockOSThread to prevent other
      goroutines from running on the manipulated thread, but Go may clone
      this manipulated state into a new thread that's put into the runtime's
      thread pool along with other threads.
      
      Fix this by never starting a new thread from a locked thread or a
      thread that may have been started by C. Instead, the runtime starts a
      "template thread" with a known-good state. If it then needs to start a
      new thread but doesn't know that the current thread is in a good
      state, it forwards the thread creation to the template thread.
      
      Fixes #20676.
      
      Change-Id: I798137a56e04b7723d55997e9c5c085d1d910643
      Reviewed-on: https://go-review.googlesource.com/46033
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      2595fe7f
    • Russ Cox's avatar
      cmd/go: separate compile and link steps in action graph · 9a9780a2
      Russ Cox authored
      To the extent that invoking the compiler and invoking the linker
      have different dependency requirements, representing both steps
      by a single action node leads to confusion.
      
      If we move to having separate .a and .x (import metadata) files
      in the standard builds, then the .a is a link dependency but not
      a compile dependency, and vice versa for .x.
      Today, in shared library builds, the .a is a compile dependency
      and a link dependency, while the .so is only a link dependency.
      
      Also in this CL: change the gccgo link step to extract _cgo_flags
      into root.Objdir, which is private to the link step, instead of into
      b.WorkDir, which is shared by all the link steps that could possibly
      be running in parallel. And attempt to handle the -n and -x flags
      when loading _cgo_flags, instead of dying attempting to read
      an archive that wasn't written.
      
      Also in this CL: create a.Objdir before running a.Func, to avoid
      duplicating the Mkdir(a.Objdir) in every a.Func.
      
      A future CL will update the link action's Deps to be accurate.
      (Right now the link steps search out the true Deps by walking
      the entire action graph.)
      
      Change-Id: I15128ce2bd064887f98abc3a4cf204241f518631
      Reviewed-on: https://go-review.googlesource.com/69830
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      9a9780a2
    • David Crawshaw's avatar
      debug/elf: add relocation constants · 0c6fc0d7
      David Crawshaw authored
      Compiled from various tables found around the internet.
      
      Some of these are used by cmd/link.
      
      Change-Id: I258b25e694dbe91a61d675763f2c47ccc928fd70
      Reviewed-on: https://go-review.googlesource.com/69012
      Run-TryBot: David Crawshaw <crawshaw@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      0c6fc0d7
    • Ian Lance Taylor's avatar
      cmd/go: correct directory used in checkNestedVCS test · 862b78e1
      Ian Lance Taylor authored
      This error was not used when using git because nested git is permitted.
      Add test using Mercurial, so that at least we have a test, even though
      the test is not run by default.
      
      Fixes #22157
      Fixes #22201
      
      Change-Id: If521f3c09b0754e00e56fa3cd0364764a57a43ad
      Reviewed-on: https://go-review.googlesource.com/69670
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      862b78e1
    • Ben Shi's avatar
      cmd/compile: optimize ARM code with CMN/TST/TEQ · 1ec78d1d
      Ben Shi authored
      CMN/TST/TEQ were supported since ARMv4, which can be used to
      simplify comparisons.
      
      This patch implements the optimization and here are the benchmark
      results.
      
      1. A special test case got 18.21% improvement.
      name                     old time/op    new time/op    delta
      TSTTEQ-4                    806µs ± 1%     659µs ± 0%  -18.21%  (p=0.000 n=20+18)
      (https://github.com/benshi001/ugo1/blob/master/tstteq_test.go)
      
      2. There is no regression in the compilecmp benchmark.
      name        old time/op       new time/op       delta
      Template          2.31s ± 1%        2.30s ± 1%    ~     (p=0.661 n=10+9)
      Unicode           1.32s ± 3%        1.32s ± 5%    ~     (p=0.280 n=10+10)
      GoTypes           7.69s ± 1%        7.65s ± 0%  -0.52%  (p=0.027 n=10+8)
      Compiler          36.5s ± 1%        36.4s ± 1%    ~     (p=0.546 n=9+9)
      SSA               85.1s ± 2%        84.9s ± 1%    ~     (p=0.529 n=10+10)
      Flate             1.43s ± 2%        1.43s ± 2%    ~     (p=0.661 n=10+9)
      GoParser          1.81s ± 2%        1.81s ± 1%    ~     (p=0.796 n=10+10)
      Reflect           5.10s ± 2%        5.09s ± 1%    ~     (p=0.853 n=10+10)
      Tar               2.47s ± 1%        2.48s ± 1%    ~     (p=0.123 n=10+10)
      XML               2.59s ± 1%        2.58s ± 1%    ~     (p=0.853 n=10+10)
      [Geo mean]        4.78s             4.77s       -0.17%
      
      name        old user-time/op  new user-time/op  delta
      Template          2.72s ± 3%        2.73s ± 2%    ~     (p=0.928 n=10+10)
      Unicode           1.58s ± 4%        1.60s ± 1%    ~     (p=0.087 n=10+9)
      GoTypes           9.41s ± 2%        9.36s ± 1%    ~     (p=0.060 n=10+10)
      Compiler          44.4s ± 2%        44.2s ± 2%    ~     (p=0.289 n=10+10)
      SSA                110s ± 2%         110s ± 1%    ~     (p=0.739 n=10+10)
      Flate             1.67s ± 2%        1.63s ± 3%    ~     (p=0.063 n=10+10)
      GoParser          2.12s ± 1%        2.12s ± 2%    ~     (p=0.840 n=10+10)
      Reflect           5.94s ± 1%        5.98s ± 1%    ~     (p=0.063 n=9+10)
      Tar               3.01s ± 2%        3.02s ± 2%    ~     (p=0.584 n=10+10)
      XML               3.04s ± 3%        3.02s ± 2%    ~     (p=0.696 n=10+10)
      [Geo mean]        5.73s             5.72s       -0.20%
      
      name        old text-bytes    new text-bytes    delta
      HelloSize         579kB ± 0%        579kB ± 0%    ~     (all equal)
      
      name        old data-bytes    new data-bytes    delta
      HelloSize        5.46kB ± 0%       5.46kB ± 0%    ~     (all equal)
      
      name        old bss-bytes     new bss-bytes     delta
      HelloSize        72.8kB ± 0%       72.8kB ± 0%    ~     (all equal)
      
      name        old exe-bytes     new exe-bytes     delta
      HelloSize        1.03MB ± 0%       1.03MB ± 0%    ~     (all equal)
      
      3. There is little change in the go1 benchmark (excluding the noise).
      name                     old time/op    new time/op     delta
      BinaryTree17-4              40.3s ± 1%      40.6s ± 1%  +0.80%  (p=0.000 n=30+30)
      Fannkuch11-4                24.2s ± 1%      24.1s ± 0%    ~     (p=0.093 n=30+30)
      FmtFprintfEmpty-4           834ns ± 0%      826ns ± 0%  -0.93%  (p=0.000 n=29+24)
      FmtFprintfString-4         1.39µs ± 1%     1.36µs ± 0%  -2.02%  (p=0.000 n=30+30)
      FmtFprintfInt-4            1.43µs ± 1%     1.44µs ± 1%    ~     (p=0.155 n=30+29)
      FmtFprintfIntInt-4         2.09µs ± 0%     2.11µs ± 0%  +1.16%  (p=0.000 n=28+30)
      FmtFprintfPrefixedInt-4    2.33µs ± 1%     2.36µs ± 0%  +1.25%  (p=0.000 n=30+30)
      FmtFprintfFloat-4          4.27µs ± 1%     4.32µs ± 1%  +1.27%  (p=0.000 n=30+30)
      FmtManyArgs-4              8.18µs ± 0%     8.14µs ± 0%  -0.46%  (p=0.000 n=25+27)
      GobDecode-4                 101ms ± 1%      101ms ± 1%    ~     (p=0.182 n=29+29)
      GobEncode-4                89.6ms ± 1%     87.8ms ± 2%  -2.02%  (p=0.000 n=30+29)
      Gzip-4                      4.07s ± 1%      4.08s ± 1%    ~     (p=0.173 n=30+27)
      Gunzip-4                    602ms ± 1%      600ms ± 1%  -0.29%  (p=0.000 n=29+28)
      HTTPClientServer-4          679µs ± 4%      683µs ± 3%    ~     (p=0.197 n=30+30)
      JSONEncode-4                241ms ± 1%      239ms ± 1%  -0.84%  (p=0.000 n=30+30)
      JSONDecode-4                903ms ± 1%      882ms ± 1%  -2.33%  (p=0.000 n=30+30)
      Mandelbrot200-4            41.8ms ± 0%     41.8ms ± 0%    ~     (p=0.719 n=30+30)
      GoParse-4                  45.5ms ± 1%     45.8ms ± 1%  +0.52%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4      1.27µs ± 1%     1.27µs ± 0%  -0.60%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4      7.77µs ± 6%     7.69µs ± 4%  -0.96%  (p=0.040 n=30+30)
      RegexpMatchEasy1_32-4      1.29µs ± 1%     1.28µs ± 1%  -0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4      10.3µs ± 6%     10.2µs ± 3%    ~     (p=0.453 n=30+27)
      RegexpMatchMedium_32-4     1.98µs ± 1%     2.00µs ± 1%  +0.85%  (p=0.000 n=30+29)
      RegexpMatchMedium_1K-4      503µs ± 0%      503µs ± 1%    ~     (p=0.752 n=30+30)
      RegexpMatchHard_32-4       27.1µs ± 1%     26.5µs ± 0%  -1.96%  (p=0.000 n=30+24)
      RegexpMatchHard_1K-4        809µs ± 1%      799µs ± 1%  -1.29%  (p=0.000 n=29+30)
      Revcomp-4                  67.3ms ± 2%     67.2ms ± 1%    ~     (p=0.265 n=29+29)
      Template-4                  1.08s ± 1%      1.07s ± 0%  -1.39%  (p=0.000 n=30+22)
      TimeParse-4                6.93µs ± 1%     6.96µs ± 1%  +0.40%  (p=0.005 n=30+30)
      TimeFormat-4               13.3µs ± 0%     13.3µs ± 1%    ~     (p=0.734 n=30+30)
      [Geo mean]                  709µs           707µs       -0.32%
      
      name                     old speed      new speed       delta
      GobDecode-4              7.59MB/s ± 1%   7.57MB/s ± 1%    ~     (p=0.145 n=29+29)
      GobEncode-4              8.56MB/s ± 1%   8.74MB/s ± 1%  +2.07%  (p=0.000 n=30+29)
      Gzip-4                   4.76MB/s ± 1%   4.75MB/s ± 1%  -0.25%  (p=0.037 n=30+30)
      Gunzip-4                 32.2MB/s ± 1%   32.3MB/s ± 1%  +0.29%  (p=0.000 n=29+28)
      JSONEncode-4             8.04MB/s ± 1%   8.11MB/s ± 1%  +0.85%  (p=0.000 n=30+30)
      JSONDecode-4             2.15MB/s ± 1%   2.20MB/s ± 1%  +2.29%  (p=0.000 n=30+30)
      GoParse-4                1.27MB/s ± 1%   1.26MB/s ± 1%  -0.73%  (p=0.000 n=30+30)
      RegexpMatchEasy0_32-4    25.1MB/s ± 1%   25.3MB/s ± 0%  +0.61%  (p=0.000 n=30+30)
      RegexpMatchEasy0_1K-4     131MB/s ± 6%    133MB/s ± 4%  +1.35%  (p=0.009 n=28+30)
      RegexpMatchEasy1_32-4    24.9MB/s ± 1%   25.0MB/s ± 1%  +0.54%  (p=0.000 n=30+30)
      RegexpMatchEasy1_1K-4    99.2MB/s ± 6%  100.2MB/s ± 3%    ~     (p=0.448 n=30+27)
      RegexpMatchMedium_32-4    503kB/s ± 1%    500kB/s ± 0%  -0.66%  (p=0.002 n=30+24)
      RegexpMatchMedium_1K-4   2.04MB/s ± 0%   2.04MB/s ± 1%    ~     (p=0.358 n=30+30)
      RegexpMatchHard_32-4     1.18MB/s ± 1%   1.20MB/s ± 1%  +1.75%  (p=0.000 n=30+30)
      RegexpMatchHard_1K-4     1.26MB/s ± 1%   1.28MB/s ± 1%  +1.42%  (p=0.000 n=30+30)
      Revcomp-4                37.8MB/s ± 2%   37.8MB/s ± 1%    ~     (p=0.266 n=29+29)
      Template-4               1.80MB/s ± 1%   1.82MB/s ± 1%  +1.46%  (p=0.000 n=30+30)
      [Geo mean]               6.91MB/s        6.96MB/s       +0.70%
      
      fixes #21583
      
      Change-Id: I24065a80588ccae7de3ad732a3cfb0026cf7e214
      Reviewed-on: https://go-review.googlesource.com/67490Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      1ec78d1d
    • Frank Somers's avatar
      runtime: move vdso_linux_amd64.go to vdso_linux.go · 4477107b
      Frank Somers authored
      This is a preparation step for adding vDSO support on linux/386.
      
      In a follow-on change, the vDSO ELF symbol lookup code in this
      file will be refactored so it can be used on multiple architectures.
      
      First, move the file to an architecture-neutral file name so that
      the change history is preserved. Build tags are added so that the
      build behaves as it did before.
      
      vdso_linux_amd64.go will be recreated later, just containing the
      amd64 specifics.
      
      If the move and refactor were combined in a single change, then the
      history to date would be lost because git would see the existing code
      as a new file.
      
      Change-Id: Iddb5da0d7faf141fd7cc835fe6a80c80153897e9
      Reviewed-on: https://go-review.googlesource.com/69710
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      4477107b
    • Daniel Martí's avatar
      cmd/compile: eliminate some lineno uses · 6013052e
      Daniel Martí authored
      Focused on ranges, selects and switches for this one.
      
      While at it, simplify some vars in typecheckselect.
      
      Updates #19683.
      
      Change-Id: Ib6aabe0f6826cb1930483aeb4bb2de1ff8052d9e
      Reviewed-on: https://go-review.googlesource.com/69690
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6013052e
    • Alberto Donizetti's avatar
      cmd/compile: fix OTYPESW Op comment · 07f7db3e
      Alberto Donizetti authored
      OTYPESW Op comment says
      
        // List = Left.(type)
      
      this seems to be wrong. Adding
      
        fmt.Printf("n: %v\n", cond)
        fmt.Printf("  n.List: %v\n", cond.List)
        fmt.Printf("  n.Left: %v\n", cond.Left)
        fmt.Printf("  n.Right: %v\n", cond.Right)
      
      to (s *typeSwitch) walk(sw *Node), and compiling the following code
      snippet
      
        var y interface{}
        switch x := y.(type) {
        default:
          println(x)
        }
      
      prints
      
        n: <node TYPESW>
          n.List:
          n.Left: x
          n.Right: y
      
      The correct OTYPESW Node field positions are
      
        // Left = Right.(type)
      
      This is confirmed by the fact that, further in the code,
      typeSwitch.walk() checks that Right (and not Left) is of type
      interface:
      
        cond.Right = walkexpr(cond.Right, &sw.Ninit)
        if !cond.Right.Type.IsInterface() {
          yyerror("type switch must be on an interface")
          return
        }
      
      This patch fixes the OTYPESW comment.
      
      Change-Id: Ief1e409cfabb7640d7f7b0d4faabbcffaf605450
      Reviewed-on: https://go-review.googlesource.com/69112Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      07f7db3e
    • Ian Lance Taylor's avatar
      cmd/compile: disable TestNexting in short mode · 0c53b4ec
      Ian Lance Taylor authored
      Updates #22206
      
      Change-Id: If75feddc01f8f86f294929fa7081c70eb15e581d
      Reviewed-on: https://go-review.googlesource.com/69790
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      0c53b4ec
    • griesemer's avatar
      cmd/compile/internal/syntax: consider function nesting for error recovery · 68e39030
      griesemer authored
      This re-enables functionality that inadvertently was disabled in the
      (long) past.
      
      Also, don't perform branch checks if we had errors in a function
      to avoid spurious errors or (worst-case) crashes.
      
      Slightly modified test/fixedbugs/issue14006.go to make sure the
      test still reports invalid label errors (the surrounding function
      must be syntactically correct).
      
      Change-Id: Id5642930877d7cf3400649094ec75c753b5084b7
      Reviewed-on: https://go-review.googlesource.com/69770
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      68e39030
    • griesemer's avatar
      cmd/compile/internal/syntax: factor out parsing of func bodies (cleanup) · 39edffb6
      griesemer authored
      Change-Id: If6481a5401940a923fc9a104981dfb90eed0d1ac
      Reviewed-on: https://go-review.googlesource.com/69750
      Run-TryBot: Robert Griesemer <gri@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      39edffb6
    • griesemer's avatar
      cmd/compile/internal/syntax: remove some outdated comments (cleanup) · c87fb208
      griesemer authored
      Change-Id: If242bb99d501420827b764c908580f2363e01ac4
      Reviewed-on: https://go-review.googlesource.com/69730Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      c87fb208
  2. 10 Oct, 2017 14 commits
  3. 09 Oct, 2017 10 commits
    • Daniel Martí's avatar
      cmd/link: various cleanups using tools · 966c459f
      Daniel Martí authored
      * remove unnecessary explicit types
      * remove dead assignments
      * remove unused fields
      * unindent code using early continues
      * remove some unnecessary type conversions
      * remove some unused func parameters
      
      Change-Id: I202c67e92940beacbd80fc2dc179f9556dc5d9e5
      Reviewed-on: https://go-review.googlesource.com/69118
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDavid Crawshaw <crawshaw@golang.org>
      966c459f
    • Keith Randall's avatar
      cmd/compile: add ideal int constants to dwarf · 7830a19a
      Keith Randall authored
      The core dump reader would like a bunch of ideal int
      constants to be available in dwarf.
      
      Makes the go binary 0.9% bigger.
      
      Update #14517
      
      Change-Id: I00cdfc7f53bcdc56fccba576c1d33010f03bdd95
      Reviewed-on: https://go-review.googlesource.com/69270
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarAustin Clements <austin@google.com>
      7830a19a
    • David Chase's avatar
      cmd/compile: skip ssa/debug_test.go when gdb missing etc. · 4a2376ef
      David Chase authored
      CL50610 broke the build for noopt (different inlining
      behavior) and clang (no gdb) so it needs to catch those
      cases and skip.
      
      The run/no-run logic was slightly cleaned up,
      the name of gdb on OSX was made more robust (tries gdb
      first, then ggdb), and the file names were canonicalized
      before loggging instead of in comparison to reduce
      gratuitous noise in diffs when things aren't otherwise
      equal.
      
      This probably doesn't fix problems on Alpine, but it should
      provide a cleaner and less confusing failure.
      
      Change-Id: I26c65bff5a8d3d60f1cd6ae02a282558c53dda67
      Reviewed-on: https://go-review.googlesource.com/69371
      Run-TryBot: David Chase <drchase@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      4a2376ef
    • Daniel Martí's avatar
      runtime: remove a few unused params and results · 6f5ede8b
      Daniel Martí authored
      These have never had a use - not even going back to when they were added
      in C.
      
      Change-Id: I143b6902b3bacb1fa83c56c9070a8adb9f61a844
      Reviewed-on: https://go-review.googlesource.com/69119Reviewed-by: default avatarDave Cheney <dave@cheney.net>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Dave Cheney <dave@cheney.net>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      6f5ede8b
    • Adam Langley's avatar
      encoding/asn1: don't encode strings with '*' as PrintableString. · 3b186db7
      Adam Langley authored
      The '*' character is not allowed in ASN.1 PrintableString. However, due
      to wide-spread use, we permit it so that we can parse many certificates
      with wildcards. However, that also meant that generic strings with
      asterisks in would be encoded as PrintableString.
      
      This change makes the default for such strings to be UTF8String. Thus,
      while the code PrintableStrings containing '*', it will not generate
      them unless the string type was specified in the struct field tag.
      
      Change-Id: I2d458da36649427352eeaa50a1b6020108b2ccbd
      Reviewed-on: https://go-review.googlesource.com/68990Reviewed-by: default avatarAdam Langley <agl@golang.org>
      3b186db7
    • griesemer's avatar
      go/doc: fix constant type propagation · d4023430
      griesemer authored
      The old code was seriously broken: It assumed that a constant
      declaration without a type would always inherit the type of
      the previous declaration, but in fact it only inherits the
      type of the previous declaration when there's no type and no
      constant value.
      
      While fixing this bug, found that the result was not sorted
      deterministically in all situations due to a poor choice of
      order value (which led to spurious test failures since the
      tests assume deterministic outputs). Fixed that as well.
      
      Added new test cases and fixed some old (broken) tests.
      
      Fixes #16153.
      
      Change-Id: I95b480e019b0fd3538638caba02fe651c69e0513
      Reviewed-on: https://go-review.googlesource.com/68730Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      d4023430
    • griesemer's avatar
      cmd/compile/internal/syntax: remove unused code · 1ddacfea
      griesemer authored
      Change-Id: I9c75dee7e4498cc11c08cad1ae34ff2af75f1469
      Reviewed-on: https://go-review.googlesource.com/69071Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      1ddacfea
    • Gabriel Aszalos's avatar
      runtime: remove the 'go:nosplit' directive from documentation · a04adcaf
      Gabriel Aszalos authored
      The //go:nosplit directive was visible in GoDoc because the function
      that it preceeded (Gosched) is exported. This change moves the directive
      above the documentation, hiding it from the output.
      
      Change-Id: I281fd7573f11d977487809f74c9cc16b2af0dc88
      Reviewed-on: https://go-review.googlesource.com/69120
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      a04adcaf
    • Josselin Costanzi's avatar
      encoding/base64: optimize DecodeString · 244c98fe
      Josselin Costanzi authored
      Optimize base64 decoding speed by adding 32-bits and 64-bits specialized
      methods that don't perform any error checking and fall back to the more
      complex decodeQuantum method when a non-base64 character is present.
      
      On a 64-bits cpu:
      
      name                 old time/op    new time/op     delta
      DecodeString/2-4       70.0ns ± 6%     69.2ns ± 0%     ~     (p=0.169 n=5+8)
      DecodeString/4-4       91.3ns ± 2%     80.4ns ± 0%  -11.89%  (p=0.001 n=5+10)
      DecodeString/8-4        126ns ± 5%      106ns ± 0%  -16.14%  (p=0.000 n=5+7)
      DecodeString/64-4       652ns ±21%      361ns ± 0%  -44.57%  (p=0.000 n=5+7)
      DecodeString/8192-4    61.0µs ±13%     31.5µs ± 1%  -48.38%  (p=0.001 n=5+9)
      
      name                 old speed      new speed       delta
      DecodeString/2-4     57.2MB/s ± 6%   57.7MB/s ± 2%     ~     (p=0.419 n=5+9)
      DecodeString/4-4     87.7MB/s ± 2%   99.5MB/s ± 0%  +13.45%  (p=0.001 n=5+10)
      DecodeString/8-4     94.8MB/s ± 5%  112.6MB/s ± 1%  +18.82%  (p=0.001 n=5+9)
      DecodeString/64-4     136MB/s ±19%    243MB/s ± 0%  +78.17%  (p=0.003 n=5+7)
      DecodeString/8192-4   180MB/s ±11%    347MB/s ± 1%  +92.94%  (p=0.001 n=5+9)
      
      Improves #19636
      
      Change-Id: Ic10a454851093a7e1d46ca0c140deed73535d990
      Reviewed-on: https://go-review.googlesource.com/38632
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      244c98fe
    • Daniel Martí's avatar
      cmd/vet: skip self-assigns with side effects · 320b0cdd
      Daniel Martí authored
      The existing logic for whether the left and right parts of an assignment
      were equal only checked that the gofmt representation of the two was
      equal. This only checks that the ASTs were equal.
      
      However, that method is flawed. For example, if either of the
      expressions contains a function call, the expressions may actually be
      different even if their ASTs are the same. An obvious case is a func
      call to math/rand to get a random integer, such as the one added in the
      test.
      
      If either of the expressions may have side effects, simply skip the
      check. Reuse the logic from bool.go's hasSideEffects.
      
      Fixes #22174.
      
      Change-Id: Ied7f7543dc2bb8852e817230756c6d23bc801d90
      Reviewed-on: https://go-review.googlesource.com/69116
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      320b0cdd