1. 18 Feb, 2014 2 commits
    • Russ Cox's avatar
      cmd/gc, runtime: enable precisestack by default · ecf700b5
      Russ Cox authored
      Precisestack makes stack collection completely precise,
      in the sense that there are no "used and not set" errors
      in the collection of stack frames, no times where the collector
      reads a pointer from a stack word that has not actually been
      initialized with a pointer (possibly a nil pointer) in that function.
      
      The most important part is interfaces: precisestack means
      that if reading an interface value, the interface value is guaranteed
      to be initialized, meaning that the type word can be relied
      upon to be either nil or a valid interface type word describing
      the data word.
      
      This requires additional zeroing of certain values on the stack
      on entry, which right now costs about 5% overall execution
      time in all.bash. That cost will come down before Go 1.3
      (issue 7345).
      
      There are at least two known garbage collector bugs right now,
      issues 7343 and 7344. The first happens even without precisestack.
      The second I have only seen with precisestack, but that does not
      mean that precisestack is what causes it. In fact it is very difficult
      to explain by what precisestack does directly. Precisestack may
      be exacerbating an existing problem. Both of those issues are
      marked for Go 1.3 as well.
      
      The reasons for enabling precisestack now are to give it more
      time to soak and because the copying stack work depends on it.
      
      LGTM=r
      R=r
      CC=golang-codereviews, iant, khr
      https://golang.org/cl/64100044
      ecf700b5
    • Russ Cox's avatar
      runtime: clear f, arg to avoid leak in timerproc · be1c71ec
      Russ Cox authored
      I have seen this cause leaks where not all objects in a sync.Pool
      would be reclaimed during the sync package tests.
      I found it while debugging the '0 of 100 finalized' failure we are
      seeing on arm, but it seems not to be the root cause for that one.
      
      LGTM=dave, dvyukov
      R=golang-codereviews, dave, dvyukov
      CC=golang-codereviews
      https://golang.org/cl/64920044
      be1c71ec
  2. 17 Feb, 2014 5 commits
  3. 16 Feb, 2014 5 commits
  4. 15 Feb, 2014 3 commits
    • Russ Cox's avatar
      cmd/gc: correct liveness for fat variables · 7a7c0ffb
      Russ Cox authored
      The VARDEF placement must be before the initialization
      but after any final use. If you have something like s = ... using s ...
      the rhs must be evaluated, then the VARDEF, then the lhs
      assigned.
      
      There is a large comment in pgen.c on gvardef explaining
      this in more detail.
      
      This CL also includes Ian's suggestions from earlier CLs,
      namely commenting the use of mode in link.h and fixing
      the precedence of the ~r check in dcl.c.
      
      This CL enables the check that if liveness analysis decides
      a variable is live on entry to the function, that variable must
      be a function parameter (not a result, and not a local variable).
      If this check fails, it indicates a bug in the liveness analysis or
      in the generated code being analyzed.
      
      The race detector generates invalid code for append(x, y...).
      The code declares a temporary t and then uses cap(t) before
      initializing t. The new liveness check catches this bug and
      stops the compiler from writing out the buggy code.
      Consequently, this CL disables the race detector tests in
      run.bash until the race detector bug can be fixed
      (golang.org/issue/7334).
      
      Except for the race detector bug, the liveness analysis check
      does not detect any problems (this CL and the previous CLs
      fixed all the detected problems).
      
      The net test still fails with GOGC=0 but the rest of the tests
      now pass or time out (because GOGC=0 is so slow).
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/64170043
      7a7c0ffb
    • Rémy Oudompheng's avatar
      cmd/gc: do not lower copy to a value node in go/defer. · 15d29499
      Rémy Oudompheng authored
      The existing tests issue4463.go and issue4654.go had failures at
      typechecking and did not test walking the AST.
      
      Fixes #7272.
      
      LGTM=khr
      R=khr, rsc, iant
      CC=golang-codereviews
      https://golang.org/cl/60550044
      15d29499
    • Rob Pike's avatar
      text/template: don't panic when function call evaluates a nil pointer · 71575a97
      Rob Pike authored
      Catch the error instead and return it to the user. Before this fix,
      the template package panicked. Now you get:
              template: bug11:1:14: executing "bug11" at <.PS>: dereference of nil pointer of type *string
      Extended example at http://play.golang.org/p/uP6pCW3qKT
      
      Fixes #7333.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/64150043
      71575a97
  5. 14 Feb, 2014 25 commits
    • Anthony Martin's avatar
      codereview: fix for Mercurial 2.9 · 881e23d3
      Anthony Martin authored
      The branchtags method was removed but we should've
      been using branchmap all along.
      
      http://selenic.com/hg/rev/4274eda143cb
      
      LGTM=franciscossouza, r
      R=golang-codereviews, franciscossouza, r
      CC=golang-codereviews
      https://golang.org/cl/57500045
      881e23d3
    • Adam Langley's avatar
      compress/bzip2: support superfluous Huffman levels. · 9f0008bb
      Adam Langley authored
      These should never be found in a bzip2 file but it does appear that
      there's a buggy encoder that is producing them. Since the official
      bzip2 handles this case, this change makes the Go code do likewise.
      
      With this change, the code produces the same output as the official
      bzip2 code on the invalid example given in the bug.
      
      Fixes #7279.
      
      LGTM=r
      R=golang-codereviews, r
      CC=golang-codereviews
      https://golang.org/cl/64010043
      9f0008bb
    • David du Colombier's avatar
      runtime: fix "invalid address in sys call" on Plan 9 · 56872f02
      David du Colombier authored
      Rfork is not splitting the stack when creating a new thread,
      so the parent and child are executing on the same stack.
      However, if the parent returns and keeps executing before
      the child can read the arguments from the parent stack,
      the child will not see the right arguments. The solution
      is to load the needed pieces from the parent stack into
      register before INT $64.
      
      Thanks to Russ Cox for the explanation.
      
      LGTM=rsc
      R=rsc
      CC=ality, golang-codereviews
      https://golang.org/cl/64140043
      56872f02
    • Michael T. Jones's avatar
      math/big: Add text marshaller interface to Int · 1dc82d25
      Michael T. Jones authored
      Fixes #7329
      
      LGTM=gri
      R=gri, bradfitz, mtj
      CC=golang-codereviews
      https://golang.org/cl/63710043
      1dc82d25
    • Elias Naur's avatar
      cmd/go: remove cross compiling restriction on cgo · 9b0736fc
      Elias Naur authored
      A previous CL added support for cross compiling with cgo, but
      missed the GOOS check in cmd/go. Remove it.
      
      Update #4714
      
      LGTM=iant
      R=iant
      CC=golang-codereviews
      https://golang.org/cl/57210046
      9b0736fc
    • Ian Lance Taylor's avatar
      runtime: if traceback sees a breakpoint, don't change the PC · 92b47417
      Ian Lance Taylor authored
      Changing the PC confuses gdb, because execution does not
      continue where gdb expects it.  Not changing the PC has the
      potential to confuse a stack dump, but when running under gdb
      it seems better to confuse a stack dump than to confuse gdb.
      
      Fixes #6776.
      
      LGTM=rsc
      R=golang-codereviews, dvyukov, rsc
      CC=golang-codereviews
      https://golang.org/cl/49580044
      92b47417
    • Mikio Hara's avatar
      net: handle IP interface stack correctly on linux · 8c0a52f2
      Mikio Hara authored
      A configuration like the following:
      
      7: tun6rd: <NOARP,UP,LOWER_UP> mtu 1280
              link/sit 10.11.12.13 brd 0.0.0.0
              inet 1.2.3.4/24 scope global tun6rd
              inet6 2014:1001:a0b:c0d::1/32 scope global
              inet6 ::10.11.12.13/128 scope global
      9: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1496
              link/ppp
              inet 192.168.101.234 peer 192.168.102.234/32 scope global ppp0
              inet 10.20.30.40/24 scope global ppp0
              inet6 2014:1002::1/64 scope global
      11: tun0@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480
              link/ipip 192.168.202.34 peer 192.168.202.69
              inet 192.168.10.1/24 scope global tunnel0
              inet6 2014:1003::1/64 scope global
      
      will be handled like below.
      
      "tun6rd": flags "up", ifindex 7, mtu 1280
              hardware address ""
              interface address "1.2.3.4/24"
              interface address "2014:1001:a0b:c0d::1/32"
              interface address "::a0b:c0d/128"
      "ppp0": flags "up|pointtopoint|multicast", ifindex 9, mtu 1496
              hardware address ""
              interface address "192.168.101.234/32"
              interface address "10.20.30.40/24"
              interface address "2014:1002::1/64"
      "tun0": flags "up|pointtopoint", ifindex 11, mtu 1480
              hardware address ""
              interface address "192.168.10.1/24"
              interface address "2014:1003::1/64"
      
      Fixes #6433.
      Update #4839
      
      LGTM=iant
      R=iant
      CC=golang-codereviews
      https://golang.org/cl/57700043
      8c0a52f2
    • Mikio Hara's avatar
      syscall: make use of include/linux when generating system constants · be9c514f
      Mikio Hara authored
      On Linux include/net directory is just to help porting applications
      from BSDs and files under net keep less information than include/linux.
      Making use of files under include/linux instead of include/net prevents
      lack of information.
      
      LGTM=iant
      R=golang-codereviews, iant
      CC=golang-codereviews
      https://golang.org/cl/63930043
      be9c514f
    • Dmitriy Vyukov's avatar
      runtime: remove misleading message during crash · 47534ddc
      Dmitriy Vyukov authored
      The following checkdead message is false positive:
      
      $ go test -race -c runtime
      $ ./runtime.test -test.cpu=2 -test.run=TestSmhasherWindowed -test.v
      === RUN TestSmhasherWindowed-2
      checkdead: find g 18 in status 1
      SIGABRT: abort
      PC=0x42bff1
      
      LGTM=rsc
      R=golang-codereviews, gobot, rsc
      CC=golang-codereviews, iant, khr
      https://golang.org/cl/59490046
      47534ddc
    • Dmitriy Vyukov's avatar
      runtime: fix mem profile when both large and small objects are allocated at the same stack · e71d1477
      Dmitriy Vyukov authored
      Currently small and large (size>rate) objects are merged into a single entry.
      But rate adjusting is required only for small objects.
      As a result pprof either incorrectly adjusts large objects
      or does not adjust small objects.
      With this change objects of different sizes are stored in different buckets.
      
      LGTM=rsc
      R=golang-codereviews, gobot, rsc
      CC=golang-codereviews
      https://golang.org/cl/59220049
      e71d1477
    • Russ Cox's avatar
      cmd/gc: fix build for 'default unsigned char' compilers · f0023cf1
      Russ Cox authored
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63680045
      f0023cf1
    • Shenghou Ma's avatar
      cmd/go: hide the "TERM" environment variable from "go env" · 6a9b9888
      Shenghou Ma authored
      It's implementation detail.
      
      LGTM=rsc
      R=rsc
      CC=golang-codereviews
      https://golang.org/cl/63690043
      6a9b9888
    • Russ Cox's avatar
      cmd/gc: correct liveness for various non-returning functions · af545660
      Russ Cox authored
      When the liveness code doesn't know a function doesn't return
      (but the generated code understands that), the liveness analysis
      invents a control flow edge that is not really there, which can cause
      variables to seem spuriously live. This is particularly bad when the
      variables are uninitialized.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63720043
      af545660
    • Dmitriy Vyukov's avatar
      runtime: fix windows cpu profiler · eca55f5a
      Dmitriy Vyukov authored
      Currently it periodically fails with the following message.
      The immediate cause is the wrong base register when obtaining g
      in sys_windows_amd64/386.s.
      But there are several secondary problems as well.
      
      runtime: unknown pc 0x0 after stack split
      panic: invalid memory address or nil pointer dereference
      fatal error: panic during malloc
      [signal 0xc0000005 code=0x0 addr=0x60 pc=0x42267a]
      
      runtime stack:
      runtime.panic(0x7914c0, 0xc862af)
              c:/src/perfer/work/windows-amd64-a15f344a9efa/go/src/pkg/runtime/panic.c:217 +0x2c
      runtime: unexpected return pc for runtime.externalthreadhandler called from 0x0
      
      R=rsc, alex.brainman
      CC=golang-codereviews
      https://golang.org/cl/63310043
      eca55f5a
    • Russ Cox's avatar
      cmd/gc: correct liveness for func ending in panic · ab9e8d06
      Russ Cox authored
      The registerization code needs the function to end in a RET,
      even if that RET is actually unreachable.
      
      The liveness code needs to avoid such unreachable RETs.
      It had a special case for final RET after JMP, but no case
      for final RET after UNDEF. Instead of expanding the special
      cases, let fixjmp - which already knows what is and is not
      reachable definitively - mark the unreachable RET so that
      the liveness code can identify it.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63680043
      ab9e8d06
    • Russ Cox's avatar
      cmd/gc: correct liveness for wrappers containing tail jumps · 02ae91f3
      Russ Cox authored
      A normal RET is treated as using the return values,
      but a tail jump RET does not - it is jumping to the
      function that is going to fill in the return values.
      If a tail jump RET is recorded as using the return values,
      since nothing initializes them they will be marked as
      live on entry to the function, which is clearly wrong.
      
      Found and tested by the new code in plive.c that looks
      for variables that are incorrectly live on entry.
      That code is disabled for now because there are other
      cases remaining to be fixed. But once it is enabled,
      test/live1.go becomes a real test of this CL.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63570045
      02ae91f3
    • Russ Cox's avatar
      cmd/gc: handle variable initialization by block move in liveness · 91b1f7cb
      Russ Cox authored
      Any initialization of a variable by a block copy or block zeroing
      or by multiple assignments (componentwise copying or zeroing
      of a multiword variable) needs to emit a VARDEF. These cases were not.
      
      Fixes #7205.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63650044
      91b1f7cb
    • Russ Cox's avatar
      cmd/5g, cmd/8g: fix build · 7addda68
      Russ Cox authored
      The test added in CL 63630043 fails on 5g and 8g because they
      were not emitting the VARDEF instruction when clearing a fat
      value by clearing the components. 6g had the call in the right place.
      
      Hooray tests.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63660043
      7addda68
    • Mikio Hara's avatar
      syscall: fix system calls with misaligned arguments on freebsd/arm · b0db7e87
      Mikio Hara authored
      This CL enables the current tree to work with FreeBSD 10-STABLE
      on ARM EABI platforms, though there are still a few test fails.
      
      Also updates documentation.
      
      LGTM=iant
      R=iant, dave
      CC=golang-codereviews
      https://golang.org/cl/61060044
      b0db7e87
    • Mikio Hara's avatar
      net: disable TestDNSThreadLimit even in non-short mode by default · 2277e8d3
      Mikio Hara authored
      TestDNSThreadLimit creates tons of DNS queries and it occasionally
      causes an unintentional traffic jam and/or crash of some virtual
      machine software, especially its builtin networking stuff.
      
      We can run TestDNSThreadLimit with -dnsflood flag instead.
      
      LGTM=dave, rsc
      R=rsc, dave
      CC=golang-codereviews
      https://golang.org/cl/63600043
      2277e8d3
    • Russ Cox's avatar
      cmd/gc: rename AFATVARDEF to AVARDEF · 801e40a0
      Russ Cox authored
      The "fat" referred to being used for multiword values only.
      We're going to use it for non-fat values sometimes too.
      
      No change other than the renaming.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63650043
      801e40a0
    • Russ Cox's avatar
      cmd/gc: fix liveness for addressed results · 824e918c
      Russ Cox authored
      Was spuriously marking results live on entry to function.
      
      TBR=iant
      CC=golang-codereviews
      https://golang.org/cl/63640043
      824e918c
    • Shenghou Ma's avatar
      cmd/gc: rephrase the invalid indexing operation error message · 656a4025
      Shenghou Ma authored
      Old:
      prog.go:9: invalid operation: this[i] (index of type int)
      New:
      prog.go:9: invalid operation: this[i] (type int does not support indexing)
      
      LGTM=r
      R=golang-codereviews, r
      CC=golang-codereviews
      https://golang.org/cl/52540043
      656a4025
    • Russ Cox's avatar
      cmd/gc: distinguish unnamed vs blank-named return variables better · a069cf04
      Russ Cox authored
      Before, an unnamed return value turned into an ONAME node n with n->sym
      named ~anon%d, and n->orig == n.
      
      A blank-named return value turned into an ONAME node n with n->sym
      named ~anon%d but n->orig == the original blank n. Code generation and
      printing uses n->orig, so that this node formatted as _.
      
      But some code does not use n->orig. In particular the liveness code does
      not know about the n->orig convention and so mishandles blank identifiers.
      It is possible to fix but seemed better to avoid the confusion entirely.
      
      Now the first kind of node is named ~r%d and the second ~b%d; both have
      n->orig == n, so that it doesn't matter whether code uses n or n->orig.
      
      After this change the ->orig field is only used for other kinds of expressions,
      not for ONAME nodes.
      
      This requires distinguishing ~b from ~r names in a few places that care.
      It fixes a liveness analysis bug without actually changing the liveness code.
      
      TBR=ken2
      CC=golang-codereviews
      https://golang.org/cl/63630043
      a069cf04
    • Russ Cox's avatar
      cmd/gc: relax address-of escape analysis · e5d742fc
      Russ Cox authored
      Make the loop nesting depth of &x depend on where x is declared,
      not on where the &x appears. The latter is only a conservative
      estimate of the former. Being more careful can avoid some
      variables escaping, and it is easier to reason about.
      
      It would have avoided issue 7313, although that was still a bug
      worth fixing.
      
      Not much effect in the tree: one variable in the whole tree
      is saved from a heap allocation (something in x509 parsing).
      
      LGTM=daniel.morsing
      R=daniel.morsing
      CC=golang-codereviews
      https://golang.org/cl/62380043
      e5d742fc