1. 25 Feb, 2013 5 commits
    • Russ Cox's avatar
      cmd/gc: emit explicit type information for local variables · 1d5dc4fd
      Russ Cox authored
      The type information is (and for years has been) included
      as an extra field in the address chunk of an instruction.
      Unfortunately, suppose there is a string at a+24(FP) and
      we have an instruction reading its length. It will say:
      
              MOVQ x+32(FP), AX
      
      and the type of *that* argument is int (not slice), because
      it is the length being read. This confuses the picture seen
      by debuggers and now, worse, by the garbage collector.
      
      Instead of attaching the type information to all uses,
      emit an explicit list of TYPE instructions with the information.
      The TYPE instructions are no-ops whose only role is to
      provide an address to attach type information to.
      
      For example, this function:
      
              func f(x, y, z int) (a, b string) {
                      return
              }
      
      now compiles into:
      
              --- prog list "f" ---
              0000 (/Users/rsc/x.go:3) TEXT    f+0(SB),$0-56
              0001 (/Users/rsc/x.go:3) LOCALS  ,
              0002 (/Users/rsc/x.go:3) TYPE    x+0(FP){int},$8
              0003 (/Users/rsc/x.go:3) TYPE    y+8(FP){int},$8
              0004 (/Users/rsc/x.go:3) TYPE    z+16(FP){int},$8
              0005 (/Users/rsc/x.go:3) TYPE    a+24(FP){string},$16
              0006 (/Users/rsc/x.go:3) TYPE    b+40(FP){string},$16
              0007 (/Users/rsc/x.go:3) MOVQ    $0,b+40(FP)
              0008 (/Users/rsc/x.go:3) MOVQ    $0,b+48(FP)
              0009 (/Users/rsc/x.go:3) MOVQ    $0,a+24(FP)
              0010 (/Users/rsc/x.go:3) MOVQ    $0,a+32(FP)
              0011 (/Users/rsc/x.go:4) RET     ,
      
      The { } show the formerly hidden type information.
      The { } syntax is used when printing from within the gc compiler.
      It is not accepted by the assemblers.
      
      The same type information is now included on global variables:
      
      0055 (/Users/rsc/x.go:15) GLOBL   slice+0(SB){[]string},$24(AL*0)
      
      This more accurate type information fixes a bug in the
      garbage collector's precise heap collection.
      
      The linker only cares about globals right now, but having the
      local information should make things a little nicer for Carl
      in the future.
      
      Fixes #4907.
      
      R=ken2
      CC=golang-dev
      https://golang.org/cl/7395056
      1d5dc4fd
    • Robert Griesemer's avatar
      go/parser: more precise comment · a411b104
      Robert Griesemer authored
      See also CL 7383051 for details.
      
      R=adonovan, bradfitz
      CC=golang-dev
      https://golang.org/cl/7378063
      a411b104
    • Roger Peppe's avatar
      net/rpc: avoid racy use of closing flag. · 7edd1335
      Roger Peppe authored
      It's accessed without mutex protection
      in a different goroutine from the one that
      sets it.
      
      Also make sure that Client.Call after Client.Close
      will reliably return ErrShutdown, and that clients
      see ErrShutdown rather than io.EOF when appropriate.
      
      Suggestions welcome for a way to reliably test
      the mutex issue.
      
      R=r, iant
      CC=golang-dev
      https://golang.org/cl/7338045
      7edd1335
    • Mikio Hara's avatar
      net: make use of testing.B.Skip and reflect.DeepEqual in test · cd81db82
      Mikio Hara authored
      This CL addresses the comments on CL 7368046 that I've overlooked.
      
      Update #4866.
      
      R=golang-dev, dave
      CC=golang-dev
      https://golang.org/cl/7369052
      cd81db82
    • Rémy Oudompheng's avatar
      go/types: unresolved literal keys must be looked up in universe. · 670f6b60
      Rémy Oudompheng authored
      Fixes #4888.
      
      R=golang-dev, gri
      CC=golang-dev
      https://golang.org/cl/7383051
      670f6b60
  2. 24 Feb, 2013 10 commits
  3. 23 Feb, 2013 8 commits
  4. 22 Feb, 2013 17 commits