1. 09 Oct, 2019 20 commits
    • Jay Conrod's avatar
      cmd/go: forbid resolving import to modules when outside of a module · 3322f3e0
      Jay Conrod authored
      When in module mode outside of any module, 'go build' and most other
      commands will now report an error instead of resolving a package path
      to a module.
      
      Previously, most commands would attempt to find the latest version of
      a module providing the package. This could be very slow if many
      packages needed to be resolved this way. Since there is no go.mod file
      where module requirements can be saved, it's a repeatedly slow and
      confusing experience.
      
      After this change, 'go build' and other commands may still be used
      outside of a module on packages in std and source files (.go
      arguments) that only import packages in std. Listing any other package
      on the command line or importing a package outside std will cause an
      error.
      
      'go get' is exempted from the new behavior, since it's expected that
      'go get' resolves paths to modules at new versions.
      
      Updates #32027
      
      Change-Id: Ia9d3a3b4ad738ca5423472e17818d62b96a2c959
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198778
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      3322f3e0
    • Jay Conrod's avatar
      cmd/doc: show original import error when package cannot be found · aa09e751
      Jay Conrod authored
      Updates #34669
      
      Change-Id: I8d0ee68885e804e131f42a512080486f9b25e9dd
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199819
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      aa09e751
    • Jay Conrod's avatar
      go/build: import packages in module mode when GO111MODULE is "on" · 99b9ee3e
      Jay Conrod authored
      go/build.Import locates package dirctories using 'go list' when in
      module mode (finding, downloading, and extracting modules is
      complicated, so go/build does not handle it).
      
      Previously, Import used 'go list' if GO111MODULE was not explicitly
      off and a go.mod file was present (plus some other conditions). With
      this change, if GO111MODULE is "on", a go.mod file does not need to be
      present.
      
      Fixes #34669
      
      Change-Id: I9e56871054d4b07c3fc04b6f14a5c8c8e9f3c333
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199818
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      99b9ee3e
    • Brad Fitzpatrick's avatar
      all: remove the nacl port (part 2, amd64p32 + toolchain) · 07b4abd6
      Brad Fitzpatrick authored
      This is part two if the nacl removal. Part 1 was CL 199499.
      
      This CL removes amd64p32 support, which might be useful in the future
      if we implement the x32 ABI. It also removes the nacl bits in the
      toolchain, and some remaining nacl bits.
      
      Updates #30439
      
      Change-Id: I2475d5bb066d1b474e00e40d95b520e7c2e286e1
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200077Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      07b4abd6
    • Ainar Garipov's avatar
      dog/go1.14: properly close code tags · 19a7490e
      Ainar Garipov authored
      Some code tags in the HTML were not properly closed. Close them so that
      the text is rendered correctly.
      
      Change-Id: I5c2170ffced313417f65004d53518128c34f7979
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200117Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      19a7490e
    • Jay Conrod's avatar
      cmd/go: eliminate redundancy in import error messages · 32b6eb80
      Jay Conrod authored
      This change introduces a new interface, load.ImportPathError. An error
      may satisfy this by providing an ImportPath method and including the
      import path in its error text. modload.ImportMissingError satisfies
      this interface. load.ImportErrorf also provides a convenient way to
      create an error satisfying this interface with an arbitrary message.
      
      When load.PackageError formats its error text, it may omit the last
      path on the import stack if the wrapped error satisfies
      ImportPathError and has a matching path.
      
      To make this work, PackageError.Err is now an error instead of a
      string. PackageError.MarshalJSON will write Err as a string for
      'go list -json' output.
      
      When go/build.Import invokes 'go list' in module mode, it now runs
      with '-e' and includes '.Error' in the output format instead of
      expecting the error to be in the raw stderr text. If a package error
      is printed and a directory was not found, the error will be returned
      without extra decoration.
      
      Fixes #34752
      
      Change-Id: I2d81dab7dec19e0ae9f51f6412bc9f30433a8596
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199840
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      32b6eb80
    • Bryan C. Mills's avatar
      Revert "cmd/go: fail if a test binary exits with no output" · b3104fe3
      Bryan C. Mills authored
      This reverts CL 184457.
      
      Reason for revert: introduced failures in the regression test for #18153.
      
      Fixes #34791
      Updates #29062
      
      Change-Id: I4040965163f809083c023be055e69b1149d6214e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200106
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      Reviewed-by: default avatarAlexander Rakoczy <alex@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      b3104fe3
    • Jason A. Donenfeld's avatar
      cmd/go/internal/modfile: remove preceding empty lines when setting require · 4c7a8d63
      Jason A. Donenfeld authored
      When rewriting a go.mod file, we currently sort all of the require
      lines in a block. The way the parser works is that it considers
      preceding blank lines to be empty comment lines, and preceding empty
      comment lines are "owned" by their adjoining line. So when we go to sort
      them, the empty lines follow around each sorted entry, which doesn't
      make a whole lot of sense, since usually vertical space is inserted to
      show sections, and if things get moved around by sorting, those sections
      are no longer meaningful. This all results in one especially troublesome
      edge case: blank lines between a block opening ("require (") and the
      first block line ("golang.org/x/sys ...") are not treated the same way
      and are rewritten out of existence.
      
      Here's an example of the behavior this fixes.
      
      Starting input file:
      
          require (
              golang.zx2c4.com/wireguard master
      
              golang.org/x/crypto latest
              golang.org/x/net latest
              golang.org/x/sys latest
              golang.org/x/text latest
      
              github.com/lxn/walk latest
              github.com/lxn/win latest
          )
      
      Now we run this through `GOPROXY=direct go get -d`:
      
          require (
      
              github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a
              github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48
      
              golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
              golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
              golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
              golang.org/x/text v0.3.2
              golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49
          )
      
      Notice how the blank lines before lxn/walk and x/crypto were preserved.
      
      Finally, we have this be rewritten yet again with a call to `go build`:
      
          require (
              github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a
              github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48
      
              golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
              golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
              golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
              golang.org/x/text v0.3.2
              golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49
          )
      
      In this final resting point, the first blank line has been removed.
      
      The discrepancy between those two last stages are especially bothersome,
      because it makes for lots of dirty git commits and file contents
      bouncing back and forth.
      
      This commit fixes the problem as mentioned above, getting rid of those
      preceding blank lines. The output in all cases looks as it should, like
      this:
      
          require (
              github.com/lxn/walk v0.0.0-20190619151032-86d8802c197a
              github.com/lxn/win v0.0.0-20190716185335-d1d36f0e4f48
              golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
              golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7
              golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
              golang.org/x/text v0.3.2
              golang.zx2c4.com/wireguard v0.0.20190806-0.20190822065259-3cedc22d7b49
          )
      
      Fixes #33779
      
      Change-Id: I11c894440bd35f343ee62db3e06a50fa871f2599
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199917
      Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      4c7a8d63
    • Emmanuel T Odeke's avatar
      net/http: update bundled x/net/http2 · 829fae3b
      Emmanuel T Odeke authored
      Updates x/net/http2 to git rev d66e71096ffb9f08f36d9aefcae80ce319de6d68
      
          http2: end stream eagerly after sending the request body
          https://golang.org/cl/181157 (fixes #32254)
      
          all: fix typos
          https://golang.org/cl/193799
      
          http2: fix memory leak in random write scheduler
          https://golang.org/cl/198462 (fixes #33812)
      
          http2: do not sniff body if Content-Encoding is set
          https://golang.org/cl/199841 (updates #31753)
      
      Also unskips tests from CL 199799.
      
      Change-Id: I241c0b1cd18cad5041485be92809137a973e33bd
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200102
      Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      829fae3b
    • Emmanuel T Odeke's avatar
      net/http: do not sniff response if Content-Encoding header is set · e24a628a
      Emmanuel T Odeke authored
      Fixes #31753
      
      Change-Id: I32ec5906ef6714e19b094f67cb0f10a211a9c500
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199799
      Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      e24a628a
    • Bryan C. Mills's avatar
      cmd/go/internal/list: disallow 'list -m' with '-mod=vendor' · 6cba4dbf
      Bryan C. Mills authored
      Updates #33848
      
      Change-Id: I81663386297282397ce1b546a8b15597bfbcea78
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199821
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      6cba4dbf
    • Bryan C. Mills's avatar
      cmd/go: automatically check and use vendored packages · 1736f3a1
      Bryan C. Mills authored
      This implements the proposal described in
      https://golang.org/issue/33848#issuecomment-537222782.
      
      Fixes #33848
      
      Change-Id: Ia34d6500ca396b6aa644b920233716c6b83ef729
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198319
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      1736f3a1
    • Jay Conrod's avatar
      cmd/go: document multiple conditions in TestScript · dae8e719
      Jay Conrod authored
      This functionality already exists but was undocumented. Related to
      comments in CL 198797.
      
      Change-Id: Icce40bd7c362423e6ed9c20673ce3de1311e5fd5
      Reviewed-on: https://go-review.googlesource.com/c/go/+/200040
      Run-TryBot: Jay Conrod <jayconrod@google.com>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      dae8e719
    • Than McIntosh's avatar
      test: new testcase for gccgo compiler problem · 22d3da47
      Than McIntosh authored
      Test case with code that caused a gccgo error while emitting export
      data for an inlinable function.
      
      Updates #34577.
      
      Change-Id: I28b598c4c893c77f4a76bb4f2d27e5b42f702992
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198057
      Run-TryBot: Than McIntosh <thanm@google.com>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      22d3da47
    • Daniel Martí's avatar
      cmd/go: fail if a test binary exits with no output · 1fba10c9
      Daniel Martí authored
      For example, if a test calls os.Exit(0), that could trick a 'go test'
      run into not running some of the other tests, and thinking that they all
      succeeded. This can easily go unnoticed and cause developers headaches.
      
      Add a simple sanity check as part of 'go test': if the test binary
      succeeds and doesn't print anything, we should error, as something
      clearly went very wrong.
      
      This is done by inspecting each of the stdout writes from the spawned
      process, since we don't want to read the entirety of the output into a
      buffer. We need to introduce a "buffered" bool var, as there's now an
      io.Writer layer between cmd.Stdout and &buf.
      
      A few TestMain funcs in the standard library needed fixing, as they
      returned without printing anything as a means to skip testing the entire
      package. For that purpose add testenv.MainMust, which prints a warning
      and prints SKIP, similar to when -run matches no tests.
      
      Finally, add tests for both os.Exit(0) and os.Exit(1), both as part of
      TestMain and as part of a single test, and test that the various stdout
      modes still do the right thing.
      
      Fixes #29062.
      
      Change-Id: Ic6f8ef3387dfc64e4cd3e8f903d7ca5f5f38d397
      Reviewed-on: https://go-review.googlesource.com/c/go/+/184457
      Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      1fba10c9
    • Michael Munday's avatar
      cmd/asm: add s390x branch-on-count instructions · 38c4a737
      Michael Munday authored
      The branch-on-count instructions on s390x decrement the input
      register and then compare its value to 0. If not equal the branch
      is taken.
      
      These instructions are useful for implementing loops with a set
      number of iterations (which might be in a register).
      
      For example, this for loop:
      
      	for i := 0; i < n; i++ {
      		... // i is not used or modified in the loop
      	}
      
      Could be implemented using this assembly:
      
      	MOVD  Rn, Ri
      loop:
      	...
      	BRCTG Ri, loop
      
      Note that i will count down from n in the assembly whereas in the
      original for loop it counted up to n which is why we can't use i
      in the loop.
      
      These instructions will only be used in hand-written codegen and
      assembly for now since SSA blocks cannot currently modify values.
      We could look into this in the future though.
      
      Change-Id: Iaab93b8aa2699513b825439b8ea20d8fe2ea1ee6
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199977
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      38c4a737
    • Michael Munday's avatar
      cmd/asm: fix element size encoding for VSUMQ instruction on s390x · ff86ce13
      Michael Munday authored
      The element size for VSUMQF and VSUMQG was off by one. Fix this
      and add tests for VSUM* instruction encodings.
      
      Change-Id: I6de2dabb383e5bc6f85eef1e0f106ba949c9030b
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199978
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      ff86ce13
    • Bryan C. Mills's avatar
      cmd/go: suppress more errors in package-to-module loading · 421d35cf
      Bryan C. Mills authored
      In CL 197059, I suppressed errors if the target package was already found.
      However, that does not cover the case of passing a '/v2' module path to
      'go get' when the module does not contain a package at its root.
      
      This CL is a minimal fix for that case, intended to be backportable to 1.13.
      
      (Longer term, I intend to rework the version-validation check to treat
      all mismatched paths as ErrNotExist.)
      
      Fixes #34746
      Updates #34383
      
      Change-Id: Ia963c2ea00fae424812b8f46a4d6c2c668252147
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199839
      Run-TryBot: Bryan C. Mills <bcmills@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      421d35cf
    • Elias Naur's avatar
      go/build: allow ~ and ^ in #cgo directives for sr.ht import paths · 0b204f95
      Elias Naur authored
      Fixes #32260
      
      Change-Id: Ib44ee33b8143d523875cf5a2bc5e36bf082801a4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199918
      Run-TryBot: Elias Naur <mail@eliasnaur.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarDaniel Martí <mvdan@mvdan.cc>
      Reviewed-by: default avatarJay Conrod <jayconrod@google.com>
      0b204f95
    • Brad Fitzpatrick's avatar
      all: remove the nacl port (part 1) · a38a917a
      Brad Fitzpatrick authored
      You were a useful port and you've served your purpose.
      Thanks for all the play.
      
      A subsequent CL will remove amd64p32 (including assembly files and
      toolchain bits) and remaining bits. The amd64p32 removal will be
      separated into its own CL in case we want to support the Linux x32 ABI
      in the future and want our old amd64p32 support as a starting point.
      
      Updates #30439
      
      Change-Id: Ia3a0c7d49804adc87bf52a4dea7e3d3007f2b1cd
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199499
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      a38a917a
  2. 08 Oct, 2019 15 commits
    • Matthew Dempsky's avatar
      cmd/compile: split n.Noescape() into separate uses · 2197321d
      Matthew Dempsky authored
      n.Noescape() was overloaded for two uses: (1) to indicate a function
      was annotated with //go:noescape, and (2) to indicate that certain
      temporary allocations don't outlive the current statement.
      
      The first use case is redundant with n.Func.Pragma&Noescape!=0, which
      is the convention we use for checking other function-level pragmas.
      
      The second use case is better served by renaming "Noescape" to
      "Transient".
      
      Passes toolstash-check.
      
      Change-Id: I0f09d2d5767513894b7bf49da9cdabd04aa4a05e
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199822
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      2197321d
    • Robert Griesemer's avatar
      go/types: don't skip defined types when reporting cycles · 5650a53d
      Robert Griesemer authored
      The newly introduced "late-stage" cycle detection for types
      (https://golang.org/cl/196338/) "skips" named types on the
      RHS of a type declaration when reporting a cycle. For instance,
      for:
      
      	type (
      	   A B
      	   B [10]C
      	   C A
      	)
      
      the reported cycle is:
      
      	illegal cycle in declaration of C
      	       C refers to
      	       C
      
      because the underlying type of C resolves to [10]C (note that
      cmd/compile does the same but simply says invalid recursive
      type C).
      
      This CL introduces the Named.orig field which always refers
      to the RHS type in a type definition (and is never changed).
      By using Named.orig rather than Named.underlying for the type
      validity check, the cycle as written in the source code is
      reported:
      
       	illegal cycle in declaration of A
       	       A refers to
       	       B refers to
       	       C refers to
       	       A
      
      Fixes #34771.
      
      Change-Id: I41e260ceb3f9a15da87ffae6a3921bd8280e2ac4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199937
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      5650a53d
    • Katie Hockman's avatar
      net/textproto: do not allow multi-line header field names · ce83f41f
      Katie Hockman authored
      Fixes #34702
      
      Change-Id: I98320d54726e646a310e583283ddab676c3503e7
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199838
      Run-TryBot: Katie Hockman <katie@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ce83f41f
    • Dan Peterson's avatar
      cmd/go: respect -mod flag in fmt · ed7e4308
      Dan Peterson authored
      Fixes #27841
      
      Change-Id: Ifcfd938aff8680cf7b44dfc09fde01d6105345a0
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198257
      Run-TryBot: Dan Peterson <dpiddy@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
      ed7e4308
    • Davor Kapsa's avatar
      net/http: use err as error var in server.Serve · decf9f6f
      Davor Kapsa authored
      Change-Id: Icbf97d640fb26eed646f9e85c1f1c94b1469ca4f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199778Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      decf9f6f
    • Robert Griesemer's avatar
      go/types: remove objSet type in favor of explicit map type (cleanup) · 868de9a1
      Robert Griesemer authored
      Avoid confusion between (now gone) objSet and objset types.
      Also: rename visited -> seen in initorder.go.
      
      No functional changes.
      
      Change-Id: Ib0aa25e006eee55a79a739194d0d26190354a9f2
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198044Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      868de9a1
    • Robert Griesemer's avatar
      go/types: simplify some code and remove TODOs (cleanup) · c7d7042e
      Robert Griesemer authored
      - remove Checker.cycle in favor of using a "seen" map
      - rename Checker.typeCycle -> Checker.cycle
      - remove TODO in api.go since the API is frozen
      
      Change-Id: I182a8215978dad54e9c6e79c21c5ec88ec802349
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198042Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      c7d7042e
    • Robert Griesemer's avatar
      go/types: fix cycle detection · 37a22900
      Robert Griesemer authored
      For Go 1.13, we rewrote the go/types cycle detection scheme. Unfortunately,
      it was a bit too clever and introduced a bug (#34333). Here's an example:
      
      type A struct {
      	f1 *B
      	f2 B
      }
      
      type B A
      
      When type-checking this code, the first cycle A->*B->B->A (via field f1)
      is ok because there's a pointer indirection. Though in the process B is
      considered "type-checked" (and painted/marked from "grey" to black").
      When type-checking f2, since B is already completely set up, go/types
      doesn't complain about the invalid cycle A->B->A (via field f2) anymore.
      On the other hand, with the fields f1, f2 swapped:
      
      type A struct {
      	f2 B
      	f1 *B
      }
      
      go/types reports an error because the cycle A->B->A is type-checked first.
      In general, we cannot know the "right" order in which types need to be
      type-checked.
      
      This CL fixes the issue as follows:
      
      1) The global object path cycle detection does not take (pointer, function,
         reference type) indirections into account anymore for cycle detection.
         That mechanism was incorrect to start with and the primary cause for this
         issue. As a consequence we don't need Checker.indirectType and indir anymore.
      
      2) After processing type declarations, Checker.validType is called to
         verify that a type doesn't expand indefinitively. This corresponds
         essentially to cmd/compile's dowidth computation (without size computation).
      
      3) Cycles involving only defined types (e.g.: type (A B; B C; C A))
         require separate attention as those must now be detected when resolving
         "forward chains" of type declarations. Checker.underlying was changed
         to detect these cycles.
      
      All three cycle detection mechanism use an object path ([]Object) to
      report cycles. The cycle error reporting mechanism is now factored out
      into Checker.cycleError and used by all three mechanisms. It also makes
      an attempt to report the cycle starting with the "first" (earliest in the
      source) object.
      
      Fixes #34333.
      
      Change-Id: I2c6446445e47344cc2cd034d3c74b1c345b8c1e6
      Reviewed-on: https://go-review.googlesource.com/c/go/+/196338
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      37a22900
    • Lynn Boger's avatar
      cmd/compile: use vsx loads and stores for LoweredMove, LoweredZero on ppc64x · 816ff444
      Lynn Boger authored
      This improves the code generated for LoweredMove and LoweredZero by
      using LXVD2X and STXVD2X to move 16 bytes at a time. These instructions
      are now used if the size to be moved or zeroed is >= 64. These same
      instructions have already been used in the asm implementations for
      memmove and memclr.
      
      Some examples where this shows an improvement on power8:
      
      MakeSlice/Byte                                  27.3ns ± 1%     25.2ns ± 0%    -7.69%
      MakeSlice/Int16                                 40.2ns ± 0%     35.2ns ± 0%   -12.39%
      MakeSlice/Int                                   94.9ns ± 1%     77.9ns ± 0%   -17.92%
      MakeSlice/Ptr                                    129ns ± 1%      103ns ± 0%   -20.16%
      MakeSlice/Struct/24                              176ns ± 1%      131ns ± 0%   -25.67%
      MakeSlice/Struct/32                              200ns ± 1%      142ns ± 0%   -29.09%
      MakeSlice/Struct/40                              220ns ± 2%      156ns ± 0%   -28.82%
      GrowSlice/Byte                                  81.4ns ± 0%     73.4ns ± 0%    -9.88%
      GrowSlice/Int16                                  118ns ± 1%       98ns ± 0%   -17.03%
      GrowSlice/Int                                    178ns ± 1%      134ns ± 1%   -24.65%
      GrowSlice/Ptr                                    249ns ± 4%      212ns ± 0%   -14.94%
      GrowSlice/Struct/24                              294ns ± 5%      215ns ± 0%   -27.08%
      GrowSlice/Struct/32                              315ns ± 1%      248ns ± 0%   -21.49%
      GrowSlice/Struct/40                              382ns ± 4%      289ns ± 1%   -24.38%
      ExtendSlice/IntSlice                             109ns ± 1%       90ns ± 1%   -17.51%
      ExtendSlice/PointerSlice                         142ns ± 2%      118ns ± 0%   -16.75%
      ExtendSlice/NoGrow                              6.02ns ± 0%     5.88ns ± 0%    -2.33%
      Append                                          27.2ns ± 0%     27.6ns ± 0%    +1.38%
      AppendGrowByte                                  4.20ms ± 3%     2.60ms ± 0%   -38.18%
      AppendGrowString                                 134ms ± 3%      102ms ± 2%   -23.62%
      AppendSlice/1Bytes                              5.65ns ± 0%     5.67ns ± 0%    +0.35%
      AppendSlice/4Bytes                              6.40ns ± 0%     6.55ns ± 0%    +2.34%
      AppendSlice/7Bytes                              8.74ns ± 0%     8.84ns ± 0%    +1.14%
      AppendSlice/8Bytes                              5.68ns ± 0%     5.70ns ± 0%    +0.40%
      AppendSlice/15Bytes                             9.31ns ± 0%     9.39ns ± 0%    +0.86%
      AppendSlice/16Bytes                             14.0ns ± 0%      5.8ns ± 0%   -58.32%
      AppendSlice/32Bytes                             5.72ns ± 0%     5.68ns ± 0%    -0.66%
      AppendSliceLarge/1024Bytes                       918ns ± 8%      615ns ± 1%   -33.00%
      AppendSliceLarge/4096Bytes                      3.25µs ± 1%     1.92µs ± 1%   -40.84%
      AppendSliceLarge/16384Bytes                     8.70µs ± 2%     4.69µs ± 0%   -46.08%
      AppendSliceLarge/65536Bytes                     18.1µs ± 3%      7.9µs ± 0%   -56.30%
      AppendSliceLarge/262144Bytes                    69.8µs ± 2%     25.9µs ± 0%   -62.91%
      AppendSliceLarge/1048576Bytes                    258µs ± 1%       93µs ± 0%   -63.96%
      
      Change-Id: I21625dbe231a2029ddb9f7d73f5a6417b35c1e49
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199639
      Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      816ff444
    • diaxu01's avatar
      cmd/internal/obj/arm64: add error checking for system registers. · 9ce5cad0
      diaxu01 authored
      This CL adds system register error checking test cases. There're two kinds of
      error test cases:
      
      1. illegal combination.
      MRS should be used in this way: MRS <system register>, <general register>.
      MSR should be used in this way: MSR <general register>, <system register>.
      Error usage examples:
      MRS     R8, VTCR_EL2    // ERROR "illegal combination"
      MSR     VTCR_EL2, R8    // ERROR "illegal combination"
      
      2. illegal read or write access.
      Error usage examples:
      MSR     R7, MIDR_EL1    // ERROR "expected writable system register or pstate"
      MRS     OSLAR_EL1, R3   // ERROR "expected readable system register"
      
      This CL reads system registers readable and writeable property to check whether
      they're used with legal read or write access. This property is named AccessFlags
      in sysRegEnc.go, and it is automatically generated by modifing the system register
      generator.
      
      Change-Id: Ic83d5f372de38d1ecd0df1ca56b354ee157f16b4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/194917Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      9ce5cad0
    • Tobias Klauser's avatar
      cmd/compile: regenerate known formats in fmtmap_test.go · d458b868
      Tobias Klauser authored
      This fixes TestFormats after CL 198037
      
      Change-Id: I3fb7d667f7c2a1fd88a320482310d33b75e068c4
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199777
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      Reviewed-by: default avatarMichael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      d458b868
    • Tobias Klauser's avatar
      syscall: don't use deprecated syscalls on linux/arm64 · cedb5616
      Tobias Klauser authored
      Reimplement syscall wrappers for linux/arm64 in terms of supported
      syscalls (or in case of Ustat make it return ENOSYS) and remove the
      manually added SYS_* consts for the deprecated syscalls. Adapted from
      golang.org/x/sys/unix where this is already done since CL 119655.
      
      Change-Id: I94ab48a4645924df3822497d0575f1a1573d509f
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199140
      Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      cedb5616
    • Michael Munday's avatar
      cmd/compile: add SSA rules for s390x compare-and-branch instructions · 6ec4c71e
      Michael Munday authored
      This commit adds SSA rules for the s390x combined compare-and-branch
      instructions. These have a shorter encoding than separate compare
      and branch instructions and they also don't clobber the condition
      code (a.k.a. flag register) reducing pressure on the flag allocator.
      
      I have deleted the 'loop_test.go' file and replaced it with a new
      codegen test which performs a wider range of checks.
      
      Object sizes from compilebench:
      
      name                      old object-bytes  new object-bytes  delta
      Template                        562kB ± 0%        561kB ± 0%   -0.28%  (p=0.000 n=10+10)
      Unicode                         217kB ± 0%        217kB ± 0%   -0.17%  (p=0.000 n=10+10)
      GoTypes                        2.03MB ± 0%       2.02MB ± 0%   -0.59%  (p=0.000 n=10+10)
      Compiler                       8.16MB ± 0%       8.11MB ± 0%   -0.62%  (p=0.000 n=10+10)
      SSA                            27.4MB ± 0%       27.0MB ± 0%   -1.45%  (p=0.000 n=10+10)
      Flate                           356kB ± 0%        356kB ± 0%   -0.12%  (p=0.000 n=10+10)
      GoParser                        438kB ± 0%        436kB ± 0%   -0.51%  (p=0.000 n=10+10)
      Reflect                        1.37MB ± 0%       1.37MB ± 0%   -0.42%  (p=0.000 n=10+10)
      Tar                             485kB ± 0%        483kB ± 0%   -0.39%  (p=0.000 n=10+10)
      XML                             630kB ± 0%        621kB ± 0%   -1.45%  (p=0.000 n=10+10)
      [Geo mean]                     1.14MB            1.13MB        -0.60%
      
      name                      old text-bytes    new text-bytes    delta
      HelloSize                       763kB ± 0%        754kB ± 0%   -1.30%  (p=0.000 n=10+10)
      CmdGoSize                      10.7MB ± 0%       10.6MB ± 0%   -0.91%  (p=0.000 n=10+10)
      [Geo mean]                     2.86MB            2.82MB        -1.10%
      
      Change-Id: Ibca55d9c0aa1254aee69433731ab5d26a43a7c18
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198037
      Run-TryBot: Michael Munday <mike.munday@ibm.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      6ec4c71e
    • Cuong Manh Le's avatar
      cmd/compile: don't use statictmps for small object in slice literal · 77f5adba
      Cuong Manh Le authored
      Fixes #21561
      
      Change-Id: I89c59752060dd9570d17d73acbbaceaefce5d8ce
      Reviewed-on: https://go-review.googlesource.com/c/go/+/197560
      Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
      Run-TryBot: Keith Randall <khr@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      77f5adba
    • Richard Musiol's avatar
      syscall: on wasm, do not panic if "process" global is not defined · ecba8352
      Richard Musiol authored
      When running wasm in the browser, the "process" global is not defined.
      This causes functions like os.Getpid() to panic, which is unusual.
      For example on Windows os.Getpid() returns -1 and does not panic.
      
      This change adds a dummy polyfill for "process" which returns -1 or an
      error. It also extends the polyfill for "fs".
      
      Fixes #34627
      Replaces CL 199357
      
      Change-Id: Ifeb12fe7e152c517848933a9ab5f6f749896dcef
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199698
      Run-TryBot: Richard Musiol <neelance@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      ecba8352
  3. 07 Oct, 2019 5 commits
    • David Chase's avatar
      cmd/compile: suppress statement marks on interior of switch tree · 01ff213a
      David Chase authored
      The lines on nodes within the IF-tree generated for switch
      statements looks like control flow so the lines get marked
      as statement boundaries.  Except for the first/root comparison,
      explicitly disable the marks.
      
      Change-Id: I64b966ed8e427cdc6b816ff6b6a2eb754346edc7
      Reviewed-on: https://go-review.googlesource.com/c/go/+/198738
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarJeremy Faller <jeremy@golang.org>
      01ff213a
    • Matthew Dempsky's avatar
      cmd/compile: remove useless block-indirection in type switch · ab00f89c
      Matthew Dempsky authored
      Previously, when emitting type switches without an explicit "case nil"
      clause, we would emit:
      
          if x == nil { goto Lnil }
          ...
          Lnil: goto Ldefault
      
      But we can instead just emit:
      
          if x == nil { goto Ldefault }
      
      Doesn't pass toolstash-check; seems like it causes some harmless
      instruction scheduling changes.
      
      Change-Id: Ie233dda26756911e93a08b3db40407ba38694c62
      Reviewed-on: https://go-review.googlesource.com/c/go/+/199644
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      ab00f89c
    • Ben Schwartz's avatar
      runtime: speed up receive on empty closed channel · e1446d9c
      Ben Schwartz authored
      Currently, nonblocking receive on an open channel is about
      700 times faster than nonblocking receive on a closed channel.
      This change makes closed channels equally fast.
      
      Fixes #32529
      
      relevant benchstat output:
      name                       old time/op    new time/op    delta
      MakeChan/Byte-40            140ns ± 4%     137ns ± 7%   -2.38%  (p=0.023 n=17+19)
      MakeChan/Int-40             174ns ± 5%     173ns ± 6%     ~     (p=0.437 n=18+19)
      MakeChan/Ptr-40             315ns ±15%     301ns ±15%     ~     (p=0.051 n=20+20)
      MakeChan/Struct/0-40        123ns ± 8%      99ns ±11%  -19.18%  (p=0.000 n=20+17)
      MakeChan/Struct/32-40       297ns ± 8%     241ns ±18%  -19.13%  (p=0.000 n=20+20)
      MakeChan/Struct/40-40       344ns ± 5%     273ns ±23%  -20.49%  (p=0.000 n=20+20)
      ChanNonblocking-40         0.32ns ± 2%    0.32ns ± 2%   -1.25%  (p=0.000 n=19+18)
      SelectUncontended-40       5.72ns ± 1%    5.71ns ± 2%     ~     (p=0.326 n=19+19)
      SelectSyncContended-40     10.9µs ±10%    10.6µs ± 3%   -2.77%  (p=0.009 n=20+16)
      SelectAsyncContended-40    1.00µs ± 0%    1.10µs ± 0%  +10.75%  (p=0.000 n=18+19)
      SelectNonblock-40          1.22ns ± 2%    1.21ns ± 4%     ~     (p=0.141 n=18+19)
      ChanUncontended-40          240ns ± 4%     233ns ± 4%   -2.82%  (p=0.000 n=20+20)
      ChanContended-40           86.7µs ± 0%    82.7µs ± 0%   -4.64%  (p=0.000 n=20+19)
      ChanSync-40                 294ns ± 7%     284ns ± 9%   -3.44%  (p=0.006 n=20+20)
      ChanSyncWork-40            38.4µs ±19%    34.0µs ± 4%  -11.33%  (p=0.000 n=20+18)
      ChanProdCons0-40           1.50µs ± 1%    1.63µs ± 0%   +8.53%  (p=0.000 n=19+19)
      ChanProdCons10-40          1.17µs ± 0%    1.18µs ± 1%   +0.44%  (p=0.000 n=19+20)
      ChanProdCons100-40          985ns ± 0%     959ns ± 1%   -2.64%  (p=0.000 n=20+20)
      ChanProdConsWork0-40       1.50µs ± 0%    1.60µs ± 2%   +6.54%  (p=0.000 n=18+20)
      ChanProdConsWork10-40      1.26µs ± 0%    1.26µs ± 2%   +0.40%  (p=0.015 n=20+19)
      ChanProdConsWork100-40     1.27µs ± 0%    1.22µs ± 0%   -4.15%  (p=0.000 n=20+19)
      SelectProdCons-40          1.50µs ± 1%    1.53µs ± 1%   +1.95%  (p=0.000 n=20+20)
      ChanCreation-40            82.1ns ± 5%    81.6ns ± 7%     ~     (p=0.483 n=19+19)
      ChanSem-40                  877ns ± 0%     719ns ± 0%  -17.98%  (p=0.000 n=18+19)
      ChanPopular-40             1.75ms ± 2%    1.78ms ± 3%   +1.76%  (p=0.002 n=20+19)
      ChanClosed-40               215ns ± 1%       0ns ± 6%  -99.82%  (p=0.000 n=20+18)
      
      Change-Id: I6d5ca4f1530cc9e1a9f3ef553bbda3504a036448
      Reviewed-on: https://go-review.googlesource.com/c/go/+/181543
      Run-TryBot: Keith Randall <khr@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      e1446d9c
    • Matthew Dempsky's avatar
      cmd/compile: reimplement parameter leak encoding · a0894ea5
      Matthew Dempsky authored
      Currently, escape analysis is able to record at most one dereference
      when a parameter leaks to the heap; that is, at call sites, it can't
      distinguish between any of these three functions:
      
          func x1(p ****int) { sink = *p }
          func x2(p ****int) { sink = **p }
          func x3(p ****int) { sink = ***p }
      
      Similarly, it's limited to recording parameter leaks to only the first
      4 parameters, and only up to 6 dereferences.
      
      All of these limitations are due to the awkward encoding scheme used
      at the moment.
      
      This CL replaces the encoding scheme with a simple [8]uint8 array,
      which can handle up to the first 7 parameters, and up to 254
      dereferences, which ought to be enough for anyone. And if not, it's
      much more easily increased.
      
      Shrinks export data size geometric mean for Kubernetes by 0.07%.
      
      Fixes #33981.
      
      Change-Id: I10a94b9accac9a0c91490e0d6d458316f5ca1e13
      Reviewed-on: https://go-review.googlesource.com/c/go/+/197680Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      a0894ea5
    • Matthew Dempsky's avatar
      cmd/compile: introduce EscLeaks abstraction · 05a805a6
      Matthew Dempsky authored
      This CL better abstracts away the parameter leak info that was
      directly encoded into the uint16 value. Followup CL will rewrite the
      implementation.
      
      Passes toolstash-check.
      
      Updates #33981.
      
      Change-Id: I27f81d26f5dd2d85f5b0e5250ca529819a1f11c2
      Reviewed-on: https://go-review.googlesource.com/c/go/+/197679
      Run-TryBot: Matthew Dempsky <mdempsky@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
      05a805a6