1. 24 Jan, 2018 3 commits
  2. 23 Jan, 2018 11 commits
    • Keith Randall's avatar
      cmd/compile: don't let spills clobber arguments · 7eaa8efb
      Keith Randall authored
      The compiler allows code to have multiple differently-typed views of a
      single argument. For instance, if we have
      
      func f(x float64) {
         y := *(*int64)(unsafe.Pointer(&x))
         ...
      }
      
      Then in SSA we get two OpArg ops, one with float64 type and one with
      int64 type.
      
      The compiler will try to reuse argument slots for spill slots. It
      checks that the argument slot is dead by consulting an interference
      graph.
      
      When building the interference graph, we normally ignore cross-type
      edges because the values on either end of that edge can't be allocated
      to the same slot. (This is just a space-saving optimization.) This
      rule breaks down when one of the values is an argument, because of the
      multiple views described above. If we're spilling a float64, it is not
      enough that the float64 version of x is dead; the int64 version of x
      has to be dead also.
      
      Remove the optimization of not recording interference edges if types
      don't match. That optimization is incorrect if one of the values
      connected by the edge is an argument.
      
      Fixes #23522
      
      Change-Id: I361f85d80fe3bc7249014ca2c3ec887c3dc30271
      Reviewed-on: https://go-review.googlesource.com/89335
      Run-TryBot: Keith Randall <khr@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      7eaa8efb
    • Robert Griesemer's avatar
      go/types: more robust behavior in the presence errors (due to import "C") · f27a1ff2
      Robert Griesemer authored
      - Don't complain about invalid constant type if the type is
        invalid already (we do this in other places as well). This
        is useful to do in general, and even more so if we have
        invalid types due to import "C".
      
      - Type-check the lhs of an assignment even if we bail out early
        due to an error on the rhs. This was simply an oversight. We
        already have machinery in place to "use" expressions; in this
        case we just have to also make sure we don't overcount "uses"
        of variables on the lhs.
      
      - Fix overcount uses correction in assignments: Only do it if
        the variable in question is declared inside the same package
        to avoid possible race conditions when type-checking exported
        variables concurrently.
      
      Fixes #22090.
      
      Change-Id: I4c1b59f9ce38970e7129fedc5f6023908386e4f1
      Reviewed-on: https://go-review.googlesource.com/88375Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
      f27a1ff2
    • Austin Clements's avatar
      runtime: never allocate during an unrecoverable panic · 2edc4d46
      Austin Clements authored
      Currently, startpanic_m (which prepares for an unrecoverable panic)
      goes out of its way to make it possible to allocate during panic
      handling by allocating an mcache if there isn't one.
      
      However, this is both potentially dangerous and unnecessary.
      Allocating an mcache is a generally complex thing to do in an already
      precarious situation. Specifically, it requires obtaining the heap
      lock, and there's evidence that this may be able to deadlock (#23360).
      However, it's also unnecessary because we never allocate from the
      unrecoverable panic path.
      
      This didn't use to be the case. The call to allocmcache was introduced
      long ago, in CL 7388043, where it was in preparation for separating Ms
      and Ps and potentially running an M without an mcache. At the time,
      after calling startpanic, the runtime could call String and Error
      methods on panicked values, which could do anything including
      allocating. That was generally unsafe even at the time, and CL 19792
      fixed this be pre-printing panic messages before calling startpanic.
      As a result, we now no longer allocate after calling startpanic.
      
      This CL not only removes the allocmcache call, but goes a step further
      to explicitly disallow any allocation during unrecoverable panic
      handling, even in situations where it might be safe. This way, if
      panic handling ever does an allocation that would be unsafe in unusual
      circumstances, we'll know even if it happens during normal
      circumstances.
      
      This would help with debugging #23360, since the deadlock in
      allocmcache is currently masking the real failure.
      
      Beyond all.bash, I manually tested this change by adding panics at
      various points in early runtime init, signal handling, and the
      scheduler to check unusual panic situations.
      
      Change-Id: I85df21e2b4b20c6faf1f13fae266c9339eebc061
      Reviewed-on: https://go-review.googlesource.com/88835
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      2edc4d46
    • Austin Clements's avatar
      runtime: don't grow the stack on sigpanic if throwsplit · 9483a0bc
      Austin Clements authored
      Currently, if a _SigPanic signal arrives in a throwsplit context,
      nothing is stopping the runtime from injecting a call to sigpanic that
      may attempt to grow the stack. This will fail and, in turn, mask the
      real problem.
      
      Fix this by checking for throwsplit in the signal handler itself
      before injecting the sigpanic call.
      
      Updates #21431, where this problem is likely masking the real problem.
      
      Change-Id: I64b61ff08e8c4d6f6c0fb01315d7d5e66bf1d3e2
      Reviewed-on: https://go-review.googlesource.com/87595
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      9483a0bc
    • Robert Griesemer's avatar
      spec: consistently use "defined type" and "type name" (cleanup) · 9b49ac03
      Robert Griesemer authored
      When we introduced the notion of alias type declarations, we renamed
      "named type" to "defined type" to avoid confusion with types denoted
      by aliases and thus are also types with names, or "named types".
      
      Some of the old uses of "named types" remained; this change removes
      them.
      
      Now the spec consistently uses the terms:
      
      - "defined type"  for a type declared via a type definition
      - "type name"     for any name denoting an (alias or defined) type
      - "alias"         for a type name declared in an alias declaration
      
      New prose is encouraged to avoid the term "named type" to counter-
      act further confusion.
      
      Fixes #23474.
      
      Change-Id: I5fb59f1208baf958da79cf51ed3eb1411cd18e03
      Reviewed-on: https://go-review.googlesource.com/89115Reviewed-by: 's avatarRob Pike <r@golang.org>
      9b49ac03
    • fanzha02's avatar
      cmd/internal/obj/arm64: fix assemble VLD1/VST1 bug · cafb36bf
      fanzha02 authored
      The current code misassembles VLD1/VST1 instruction with non-zero
      offset. The offset is dropped silently without any error message.
      The cause of the misassembling is the current code treats argument
      (Rn)(Rm) as ZOREG type.
      
      The fix changes the matching rules and considers (Rn)(Rm) as ROFF
      type. The fix will report error information when assembles VLD1/VST1
      (R8)(R13), [V1.16B].
      The fix enables the ARM64Errors test.
      
      Fixes #23448
      
      Change-Id: I3dd518b91e9960131ffb8efcb685cb8df84b70eb
      Reviewed-on: https://go-review.googlesource.com/87956Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      Run-TryBot: Cherry Zhang <cherryyz@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      cafb36bf
    • Russ Cox's avatar
      doc, cmd/go: final release notes edits · 4a2f28f5
      Russ Cox authored
      Except for removing the DRAFT marker, I think these are now ready to go.
      
      Change-Id: I20604f5b135616189a24990db463c7bb5e7d48f1
      Reviewed-on: https://go-review.googlesource.com/88975
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      4a2f28f5
    • Fazlul Shahriar's avatar
      os: handle ' is a directory' error as IsExist on Plan 9 · 99e6e482
      Fazlul Shahriar authored
      This error is returned by os.Mkdir when the directory already exists.
      
      This change fixes some upspin tests.
      
      Change-Id: I9ad5aefebb32dff577726d537b4f3826d79868eb
      Reviewed-on: https://go-review.googlesource.com/88656Reviewed-by: 's avatarDavid du Colombier <0intro@gmail.com>
      Run-TryBot: David du Colombier <0intro@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      99e6e482
    • Martin Möhrmann's avatar
      cmd/dist: only run swig tests when a go directory is present in swiglib · 4a7334b7
      Martin Möhrmann authored
      When there is no go directory inside the swiglib directory then swig
      was installed without Go support. Tests in misc/swig will fail when
      swig is installed without Go support.
      
      Add additional checks for the presence of a go directory in the directory
      reported by 'swig -go -swiglib' to determine if misc/swig tests should
      be run.
      
      This avoids all.bash failing when swig but not swig-go is installed
      using macports.
      
      Tested on darwin with swig and with and without swig-go installed
      using macports.
      
      Fixes #23469
      
      Change-Id: I173201221554982ea0d9f2bea70a3cb85b297cec
      Reviewed-on: https://go-review.googlesource.com/88776Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      4a7334b7
    • Andrew Bonventre's avatar
      doc: document Go 1.8.6 · 6c27114c
      Andrew Bonventre authored
      Update golang/go#23515
      
      Change-Id: Id334d8663bf4cbb68f224d1bba4c9ad3855f8aae
      Reviewed-on: https://go-review.googlesource.com/89155Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
      6c27114c
    • Ian Lance Taylor's avatar
      cmd/go: apply "go vet" to test files · cebc7064
      Ian Lance Taylor authored
      In earlier versions of Go the "go vet" command would run on regular
      source files and test files. That was lost in CL74750.  Bring it back.
      
      This required moving a chunk of code from internal/test to
      internal/load. The diff looks big but the code is unchanged.
      
      Fixes #23395
      
      Change-Id: Ie9ec183337e8db81c5fc421d118a22b351b5409e
      Reviewed-on: https://go-review.googlesource.com/87636
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      cebc7064
  3. 22 Jan, 2018 5 commits
    • Austin Clements's avatar
      runtime: print hexdump on traceback failure · dbd8f3d7
      Austin Clements authored
      Currently, if anything goes wrong when printing a traceback, we simply
      cut off the traceback without any further diagnostics. Unfortunately,
      right now, we have a few issues that are difficult to debug because
      the traceback simply cuts off (#21431, #23484).
      
      This is an attempt to improve the debuggability of traceback failure
      by printing a diagnostic message plus a hex dump around the failed
      traceback frame when something goes wrong.
      
      The failures look like:
      
      goroutine 5 [running]:
      runtime: unexpected return pc for main.badLR2 called from 0xbad
      stack: frame={sp:0xc42004dfa8, fp:0xc42004dfc8} stack=[0xc42004d800,0xc42004e000)
      000000c42004dea8:  0000000000000001  0000000000000001
      000000c42004deb8:  000000c42004ded8  000000c42004ded8
      000000c42004dec8:  0000000000427eea <runtime.dopanic+74>  000000c42004ded8
      000000c42004ded8:  000000000044df70 <runtime.dopanic.func1+0>  000000c420001080
      000000c42004dee8:  0000000000427b21 <runtime.gopanic+961>  000000c42004df08
      000000c42004def8:  000000c42004df98  0000000000427b21 <runtime.gopanic+961>
      000000c42004df08:  0000000000000000  0000000000000000
      000000c42004df18:  0000000000000000  0000000000000000
      000000c42004df28:  0000000000000000  0000000000000000
      000000c42004df38:  0000000000000000  000000c420001080
      000000c42004df48:  0000000000000000  0000000000000000
      000000c42004df58:  0000000000000000  0000000000000000
      000000c42004df68:  000000c4200010a0  0000000000000000
      000000c42004df78:  00000000004c6400  00000000005031d0
      000000c42004df88:  0000000000000000  0000000000000000
      000000c42004df98:  000000c42004dfb8  00000000004ae7d9 <main.badLR2+73>
      000000c42004dfa8: <00000000004c6400  00000000005031d0
      000000c42004dfb8:  000000c42004dfd0 !0000000000000bad
      000000c42004dfc8: >0000000000000000  0000000000000000
      000000c42004dfd8:  0000000000451821 <runtime.goexit+1>  0000000000000000
      000000c42004dfe8:  0000000000000000  0000000000000000
      000000c42004dff8:  0000000000000000
      main.badLR2(0x0)
      	/go/src/runtime/testdata/testprog/badtraceback.go:42 +0x49
      
      For #21431, #23484.
      
      Change-Id: I8718fc76ced81adb0b4b0b4f2293f3219ca80786
      Reviewed-on: https://go-review.googlesource.com/89016
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      dbd8f3d7
    • Andrew Bonventre's avatar
      doc: update 1.9.3 release date · 2923b209
      Andrew Bonventre authored
      Change-Id: I689ccfb8452a170629425dc97da503b28766c6f9
      Reviewed-on: https://go-review.googlesource.com/89035Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      2923b209
    • Russ Cox's avatar
      doc/go1.10: address final TODOs · 21a460d3
      Russ Cox authored
      Change-Id: Id71c1ccb584fb308f1615c0ed1255cc8b44bf675
      Reviewed-on: https://go-review.googlesource.com/88256
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      21a460d3
    • Elias Naur's avatar
      cmd/vendor/github.com/google/pprof/internal/driver: skip read only dir error on Android · 40ea396c
      Elias Naur authored
      On an android/amd64 emulator, $HOME points to / which is not writable.
      Ignore the error in the pprof driver test.
      
      With this, androidtest.sh on android/amd64 and android/386 passes.
      
      Upstream pull request https://github.com/google/pprof/pull/295.
      
      Change-Id: If919d7f44530a977fd044631ad01bac87d32deaa
      Reviewed-on: https://go-review.googlesource.com/88817
      Run-TryBot: Elias Naur <elias.naur@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarHyang-Ah Hana Kim <hyangah@gmail.com>
      40ea396c
    • Russ Cox's avatar
      cmd/go: add go help cache · 0133b5df
      Russ Cox authored
      Change-Id: I14eeda85f279d1082ea9f2ac590b848ac13b1daa
      Reviewed-on: https://go-review.googlesource.com/87023
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      0133b5df
  4. 21 Jan, 2018 1 commit
  5. 20 Jan, 2018 3 commits
  6. 19 Jan, 2018 2 commits
  7. 18 Jan, 2018 1 commit
  8. 17 Jan, 2018 5 commits
  9. 16 Jan, 2018 4 commits
  10. 15 Jan, 2018 3 commits
  11. 14 Jan, 2018 1 commit
  12. 12 Jan, 2018 1 commit
    • Ian Lance Taylor's avatar
      cmd/go: make gccgo -buildmode=shared and -linkshared work again · 9745eed4
      Ian Lance Taylor authored
      After CL 69831, addTransitiveLinkDeps ensures that all dependencies of
      a link appear in Deps. We no longer need to traverse through all
      actions to find them. And the old scheme of looking through all the
      actions and assuming we would see shared library actions before
      libraries they depend on no longer works.
      
      Now that we have complete deps, change to a simpler scheme in which we
      find the shared libraries in the deps, and then use that to sort the
      deps into archives and shared libraries.
      
      Fixes #22224
      
      Change-Id: I14fcc773ac59b6f5c2965cc04d4ed962442cc89e
      Reviewed-on: https://go-review.googlesource.com/87497
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
      9745eed4