1. 16 Feb, 2014 3 commits
  2. 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
  3. 14 Feb, 2014 28 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
    • Markus Zimmermann's avatar
      container/list: mark must be an element of the list · e0bb5ba5
      Markus Zimmermann authored
      The methods MoveAfter and MoveBefore of the container/list package did silently corrupt the interal structure of the list if a mark element is used which is not an element of the list.
      
      LGTM=gri
      R=golang-codereviews, gobot, gri
      CC=golang-codereviews
      https://golang.org/cl/60980043
      e0bb5ba5
    • Robert Griesemer's avatar
      A+C: Markus Zimmermann (individual CLA) · a9495638
      Robert Griesemer authored
      Generated by addca.
      
      R=gobot
      CC=golang-codereviews
      https://golang.org/cl/63620043
      a9495638
    • Nick Craig-Wood's avatar
      math/big: Optimise ARM assembler · eae09a59
      Nick Craig-Wood authored
      Tweak the ARM assembler to improve its performance.
      
        * Use TEQ instead of CMP which preserves the carry flag.  This means
          we can avoid saving and restoring CPSR which is very slow.
      
        * Use conditional instructions to read the value of the carry flag.
      
        * Use 3 argument ARM instructions to save instructions
      
        * Improve scheduling for MOVW instructions (LDR)
      
        * Use RSB constant to save an instruction in bitLen
      
      Results of -test.bench 'VV|VW|VU|WW|Bit' -test.benchtime 3s on Samsung
      Exynos5 Chromebook.
      
      There are a few small regressions in the benchmarks which I believe to
      be noise, perhaps due to different cacheline alignment.
      
      The changes to bitLen are apparently no faster, however less
      instructions means less I-cache usage which is a win. I suspect it
      will be a win on older ARM processors.
      
      benchmark                 old ns/op    new ns/op    delta
      BenchmarkAddVV_1                 48           14  -70.84%
      BenchmarkAddVV_2                 87           17  -80.25%
      BenchmarkAddVV_3                126           20  -83.97%
      BenchmarkAddVV_4                165           23  -86.00%
      BenchmarkAddVV_5                204           26  -87.21%
      BenchmarkAddVV_1e1              399           41  -89.72%
      BenchmarkAddVV_1e2             3921          315  -91.97%
      BenchmarkAddVV_1e3            39085         2972  -92.40%
      BenchmarkAddVV_1e4           390330        29623  -92.41%
      BenchmarkAddVV_1e5          3935366       343431  -91.27%
      BenchmarkAddVW_1                 20           10  -49.04%
      BenchmarkAddVW_2                 60           14  -76.53%
      BenchmarkAddVW_3                 99           16  -83.38%
      BenchmarkAddVW_4                140           18  -86.50%
      BenchmarkAddVW_5                179           21  -88.04%
      BenchmarkAddVW_1e1              376           33  -91.20%
      BenchmarkAddVW_1e2             3933          256  -93.49%
      BenchmarkAddVW_1e3            39630         2378  -94.00%
      BenchmarkAddVW_1e4           396218        23623  -94.04%
      BenchmarkAddVW_1e5          3972901       238403  -94.00%
      BenchmarkAddMulVVW_1             11           11   -4.27%
      BenchmarkAddMulVVW_2             15           15   +0.00%
      BenchmarkAddMulVVW_3             18           19   +4.37%
      BenchmarkAddMulVVW_4             21           21   +4.29%
      BenchmarkAddMulVVW_5             24           24   -0.82%
      BenchmarkAddMulVVW_1e1           40           39   -2.70%
      BenchmarkAddMulVVW_1e2          329          326   -0.91%
      BenchmarkAddMulVVW_1e3         3200         3098   -3.19%
      BenchmarkAddMulVVW_1e4        38457        40013   +4.05%
      BenchmarkAddMulVVW_1e5       461880       428580   -7.21%
      BenchmarkBitLen0                  5            5   -0.19%
      BenchmarkBitLen1                  5            5   +0.00%
      BenchmarkBitLen2                  5            5   -0.56%
      BenchmarkBitLen3                  5            5   +0.38%
      BenchmarkBitLen4                  5            5   +0.19%
      BenchmarkBitLen5                  5            5   +0.56%
      BenchmarkBitLen8                  5            5   -0.19%
      BenchmarkBitLen9                  5            5   -0.56%
      BenchmarkBitLen16                 5            5   -0.19%
      BenchmarkBitLen17                 5            5   -0.37%
      BenchmarkBitLen31                 5            5   -1.30%
      BenchmarkBitset                  72           70   -2.49%
      BenchmarkBitsetNeg             1584          396  -75.00%
      BenchmarkBitsetOrig            1990         1980   -0.50%
      BenchmarkBitsetNegOrig         4031         2877  -28.63%
      
      benchmark                  old MB/s     new MB/s  speedup
      BenchmarkAddVV_1             657.71      2251.28    3.42x
      BenchmarkAddVV_2             730.65      3700.37    5.06x
      BenchmarkAddVV_3             757.29      4754.30    6.28x
      BenchmarkAddVV_4             772.95      5541.58    7.17x
      BenchmarkAddVV_5             781.30      6125.59    7.84x
      BenchmarkAddVV_1e1           800.33      7814.14    9.76x
      BenchmarkAddVV_1e2           815.98     10129.62   12.41x
      BenchmarkAddVV_1e3           818.73     10767.07   13.15x
      BenchmarkAddVV_1e4           819.82     10802.12   13.18x
      BenchmarkAddVV_1e5           813.14      9317.73   11.46x
      BenchmarkAddVW_1            1539.56      3006.13    1.95x
      BenchmarkAddVW_2            1057.66      4502.20    4.26x
      BenchmarkAddVW_3             960.67      5797.65    6.04x
      BenchmarkAddVW_4             913.19      6776.86    7.42x
      BenchmarkAddVW_5             891.72      7467.82    8.37x
      BenchmarkAddVW_1e1           850.12      9681.85   11.39x
      BenchmarkAddVW_1e2           813.48     12494.27   15.36x
      BenchmarkAddVW_1e3           807.45     13451.80   16.66x
      BenchmarkAddVW_1e4           807.64     13545.64   16.77x
      BenchmarkAddVW_1e5           805.46     13422.64   16.66x
      BenchmarkAddMulVVW_1        2727.29      2847.66    1.04x
      BenchmarkAddMulVVW_2        4162.30      4158.69    1.00x
      BenchmarkAddMulVVW_3        5236.91      5015.98    0.96x
      BenchmarkAddMulVVW_4        6090.27      5837.52    0.96x
      BenchmarkAddMulVVW_5        6549.86      6598.60    1.01x
      BenchmarkAddMulVVW_1e1      7850.72      8068.00    1.03x
      BenchmarkAddMulVVW_1e2      9724.38      9794.40    1.01x
      BenchmarkAddMulVVW_1e3      9997.18     10328.58    1.03x
      BenchmarkAddMulVVW_1e4      8320.88      7997.39    0.96x
      BenchmarkAddMulVVW_1e5      6928.20      7466.50    1.08x
      
      LGTM=gri
      R=golang-codereviews, dave, gri
      CC=golang-codereviews
      https://golang.org/cl/61290043
      eae09a59
  4. 13 Feb, 2014 6 commits