summaryrefslogtreecommitdiff
path: root/src/cmd
Commit message (Collapse)AuthorAgeFilesLines
* [dev.debug] cmd/compile: better DWARF with optimizations ondev.debugHeschi Kreinick2017-07-2727-158/+1391
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Debuggers use DWARF information to find local variables on the stack and in registers. Prior to this CL, the DWARF information for functions claimed that all variables were on the stack at all times. That's incorrect when optimizations are enabled, and results in debuggers showing data that is out of date or complete gibberish. After this CL, the compiler is capable of representing variable locations more accurately, and attempts to do so. Due to limitations of the SSA backend, it's not possible to be completely correct. There are a number of problems in the current design. One of the easier to understand is that variable names currently must be attached to an SSA value, but not all assignments in the source code actually result in machine code. For example: type myint int var a int b := myint(int) and b := (*uint64)(unsafe.Pointer(a)) don't generate machine code because the underlying representation is the same, so the correct value of b will not be set when the user would expect. Generating the more precise debug information is behind a flag, dwarflocationlists. Because of the issues described above, setting the flag may not make the debugging experience much better, and may actually make it worse in cases where the variable actually is on the stack and the more complicated analysis doesn't realize it. A number of changes are included: - Add a new pseudo-instruction, RegKill, which indicates that the value in the register has been clobbered. - Adjust regalloc to emit RegKills in the right places. Significantly, this means that phis are mixed with StoreReg and RegKills after regalloc. - Track variable decomposition in ssa.LocalSlots. - After the SSA backend is done, analyze the result and build location lists for each LocalSlot. - After assembly is done, update the location lists with the assembled PC offsets, recompose variables, and build DWARF location lists. Emit the list as a new linker symbol, one per function. - In the linker, aggregate the location lists into a .debug_loc section. TODO: - currently disabled for non-X86/AMD64 because there are no data tables. go build -toolexec 'toolstash -cmp' -a std succeeds. With -dwarflocationlists false: before: f02812195637909ff675782c0b46836a8ff01976 after: 06f61e8112a42ac34fb80e0c818b3cdb84a5e7ec benchstat -geomean /tmp/220352263 /tmp/621364410 completed 15 of 15, estimated time remaining 0s (eta 3:52PM) name old time/op new time/op delta Template 199ms ± 3% 198ms ± 2% ~ (p=0.400 n=15+14) Unicode 96.6ms ± 5% 96.4ms ± 5% ~ (p=0.838 n=15+15) GoTypes 653ms ± 2% 647ms ± 2% ~ (p=0.102 n=15+14) Flate 133ms ± 6% 129ms ± 3% -2.62% (p=0.041 n=15+15) GoParser 164ms ± 5% 159ms ± 3% -3.05% (p=0.000 n=15+15) Reflect 428ms ± 4% 422ms ± 3% ~ (p=0.156 n=15+13) Tar 123ms ±10% 124ms ± 8% ~ (p=0.461 n=15+15) XML 228ms ± 3% 224ms ± 3% -1.57% (p=0.045 n=15+15) [Geo mean] 206ms 377ms +82.86% name old user-time/op new user-time/op delta Template 292ms ±10% 301ms ±12% ~ (p=0.189 n=15+15) Unicode 166ms ±37% 158ms ±14% ~ (p=0.418 n=15+14) GoTypes 962ms ± 6% 963ms ± 7% ~ (p=0.976 n=15+15) Flate 207ms ±19% 200ms ±14% ~ (p=0.345 n=14+15) GoParser 246ms ±22% 240ms ±15% ~ (p=0.587 n=15+15) Reflect 611ms ±13% 587ms ±14% ~ (p=0.085 n=15+13) Tar 211ms ±12% 217ms ±14% ~ (p=0.355 n=14+15) XML 335ms ±15% 320ms ±18% ~ (p=0.169 n=15+15) [Geo mean] 317ms 583ms +83.72% name old alloc/op new alloc/op delta Template 40.2MB ± 0% 40.2MB ± 0% -0.15% (p=0.000 n=14+15) Unicode 29.2MB ± 0% 29.3MB ± 0% ~ (p=0.624 n=15+15) GoTypes 114MB ± 0% 114MB ± 0% -0.15% (p=0.000 n=15+14) Flate 25.7MB ± 0% 25.6MB ± 0% -0.18% (p=0.000 n=13+15) GoParser 32.2MB ± 0% 32.2MB ± 0% -0.14% (p=0.003 n=15+15) Reflect 77.8MB ± 0% 77.9MB ± 0% ~ (p=0.061 n=15+15) Tar 27.1MB ± 0% 27.0MB ± 0% -0.11% (p=0.029 n=15+15) XML 42.7MB ± 0% 42.5MB ± 0% -0.29% (p=0.000 n=15+15) [Geo mean] 42.1MB 75.0MB +78.05% name old allocs/op new allocs/op delta Template 402k ± 1% 398k ± 0% -0.91% (p=0.000 n=15+15) Unicode 344k ± 1% 344k ± 0% ~ (p=0.715 n=15+14) GoTypes 1.18M ± 0% 1.17M ± 0% -0.91% (p=0.000 n=15+14) Flate 243k ± 0% 240k ± 1% -1.05% (p=0.000 n=13+15) GoParser 327k ± 1% 324k ± 1% -0.96% (p=0.000 n=15+15) Reflect 984k ± 1% 982k ± 0% ~ (p=0.050 n=15+15) Tar 261k ± 1% 259k ± 1% -0.77% (p=0.000 n=15+15) XML 411k ± 0% 404k ± 1% -1.55% (p=0.000 n=15+15) [Geo mean] 439k 755k +72.01% name old text-bytes new text-bytes delta HelloSize 694kB ± 0% 694kB ± 0% -0.00% (p=0.000 n=15+15) name old data-bytes new data-bytes delta HelloSize 5.55kB ± 0% 5.55kB ± 0% ~ (all equal) name old bss-bytes new bss-bytes delta HelloSize 133kB ± 0% 133kB ± 0% ~ (all equal) name old exe-bytes new exe-bytes delta HelloSize 1.04MB ± 0% 1.04MB ± 0% ~ (all equal) Change-Id: I991fc553ef175db46bb23b2128317bbd48de70d8 Reviewed-on: https://go-review.googlesource.com/41770 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* [dev.debug] cmd/internal/dwarf: add DWARF abbrevs with location listsHeschi Kreinick2017-07-261-0/+25
| | | | | | | | | Location lists require new DWARF abbrev entries. Add them before CL 41770 to enable binary comparison. Change-Id: If99461f6896db902f2774e0718065eb3d3522026 Reviewed-on: https://go-review.googlesource.com/50881 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* [dev.debug] cmd/link: let the linker combine .debug_ranges, remove globalsHeschi Kreinick2017-07-262-72/+52
| | | | | | | | | | | | The linker is pretty good at combining a bunch of symbols into a section, so let it do .debug_ranges the normal way. Along the way, remove a bunch of globals that were only used by one function that would only be called once per invocation. Change-Id: I1a528a438b193c41e7c444e8830516b07f11affc Reviewed-on: https://go-review.googlesource.com/43890 Reviewed-by: Alessandro Arzilli <alessandro.arzilli@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* [dev.debug] cmd/compile: track variable decomposition in LocalSlotHeschi Kreinick2017-07-266-44/+66
| | | | | | | | | When the compiler decomposes a user variable, track its origin so that it can be recomposed during DWARF generation. Change-Id: Ia71c7f8e7f4d65f0652f1c97b0dda5d9cad41936 Reviewed-on: https://go-review.googlesource.com/50878 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* [dev.debug] cmd/compile: keep float names in the Names listHeschi Kreinick2017-07-251-0/+1
| | | | | | | | | Fix an oversight in decompose that caused floats to be missing from the Names list. Change-Id: I5db9c9498e9a4421742389eb929752fdac873b38 Reviewed-on: https://go-review.googlesource.com/50877 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* [dev.debug] cmd/compile: rename some locals in genssaHeschi Kreinick2017-07-251-11/+11
| | | | | | | | | When we start tracking the mapping from Value to Prog, valueProgs will be confusing. Disambiguate. Change-Id: Ib3b302fedb7eb0ff1bde789d70a11656d82f0897 Reviewed-on: https://go-review.googlesource.com/50876 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* [dev.debug] cmd/compile: rename dwarf.Var.Offset to StackOffsetHeschi Kreinick2017-07-253-14/+14
| | | | | | | | | After we track decomposition, offset could mean stack offset or offset in recomposed variable. Disambiguate. Change-Id: I4d810b8c0dcac7a4ec25ac1e52898f55477025df Reviewed-on: https://go-review.googlesource.com/50875 Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
* cmd/compile: consider exported flag in namedataIan Lance Taylor2017-07-241-1/+5
| | | | | | | | | | | | | | | It is possible to have an unexported name with a nil package, for an embedded field whose type is a pointer to an unexported type. We must encode that fact in the type..namedata symbol name, to avoid incorrectly merging an unexported name with an exported name. Fixes #21120 Change-Id: I2e3879d77fa15c05ad92e0bf8e55f74082db5111 Reviewed-on: https://go-review.googlesource.com/50710 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
* cmd/link: use full link, not compile, to test for -no-?pieIan Lance Taylor2017-07-241-4/+4
| | | | | | | | | | | | This avoids an error from clang when using -nopie during compilation, and permits us to check that the entire build succeeds. Updates #21042 Change-Id: I2e6c7d5c97a85c223ed3288622bbb58ce33b8774 Reviewed-on: https://go-review.googlesource.com/50874 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/go, cmd/link: if -no-pie doesn't work, try -nopieIan Lance Taylor2017-07-202-16/+30
| | | | | | | | | | | | GCC says -no-pie, clang says -nopie. Fixes #21042 Change-Id: Iadc83ea7a48ea0debc5064c1ee8da4ebff752044 Reviewed-on: https://go-review.googlesource.com/49710 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/go: fix test when go source tree has POSIX ACLJess Frazelle2017-07-201-3/+7
| | | | | | | | | | | | Fixes TestGoBuildUmask when the user has a POSIX ACL on the Go source tree. Fixes #17909. Change-Id: I5bc19099af8353afd41071258f4f317612b4c8c1 Reviewed-on: https://go-review.googlesource.com/50370 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/compile: fix unaligned loads/stores to global variables on s390xMichael Munday2017-07-192-36/+46
| | | | | | | | | | | | | | | | Load/store-merging and move optimizations can result in unaligned memory accesses. This is fine so long as the load/store instruction used does not take a relative offset. In the SSA rules this means we must not merge (MOVDaddr (SB)) ops into loads/stores unless we can guarantee the alignment of the target. Fixes #21048. Change-Id: I70f13a62a148d5f0a56e704e8f76e36b4a4226d9 Reviewed-on: https://go-review.googlesource.com/49250 Run-TryBot: Michael Munday <mike.munday@ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* runtime: always use 2MB stacks on 64-bit WindowsAustin Clements2017-07-181-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | Currently, Windows stacks are either 128kB or 2MB depending on whether the binary uses cgo. This is because we assume that Go system stacks and the small amount of C code invoked by the standard library can operate within smaller stacks, but general Windows C code assumes larger stacks. However, it's easy to call into arbitrary C code using the syscall package on Windows without ever importing cgo into a binary. Such binaries need larger system stacks even though they don't use cgo. Fix this on 64-bit by increasing the system stack size to 2MB always. This only costs address space, which is free enough on 64-bit to not worry about. We keep (for now) the existing heuristic on 32-bit, where address space comes at more of a premium. Updates #20975. Change-Id: Iaaaa9a2fcbadc825cddc797aaaea8d34ef8debf2 Reviewed-on: https://go-review.googlesource.com/49331 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
* cmd/compile: omit X:framepointer in compile versionRuss Cox2017-07-172-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Framepointer is the default now. Only print an X: list if the settings are _not_ the default. Before: $ go tool compile -V compile version devel +a5f30d9508 Sun Jul 16 14:43:48 2017 -0400 X:framepointer $ go1.8 tool compile -V compile version go1.8 X:framepointer $ After: $ go tool compile -V compile version devel +a5f30d9508 Sun Jul 16 14:43:48 2017 -0400 $ go1.9 tool compile -V # imagined compile version go1.9 $ Perpetuates #18317. Change-Id: I981ba5c62be32e650a166fc9740703122595639b Reviewed-on: https://go-review.googlesource.com/49252 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/compile: fix comment typoJamie Kerr2017-07-151-2/+2
| | | | | | Change-Id: If581bd4e9d9b4421e2ae20582c596fccb73d9aed Reviewed-on: https://go-review.googlesource.com/48866 Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/dist: don't run moved_goroot test on android, iOS, Plan 9Ian Lance Taylor2017-07-151-1/+5
| | | | | | | | | | | | | | | | | | | | Fails on iOS because CC_FOR_TARGET points to clangwrap.sh in the original GOROOT. We could fix that but it doesn't seem worth it. Fails on Android with "exec format error". I'm not sure why but I doubt it is interesting. Fails on Plan 9 because the original GOROOT is being preserved in some unknown way. This is issue #21016. Updates #21016 Change-Id: I4e7115d734fc7bf21e5a2ba18fb6ad0bfa31c735 Reviewed-on: https://go-review.googlesource.com/48650 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: David du Colombier <0intro@gmail.com> Reviewed-by: Elias Naur <elias.naur@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/go: update BuildContext.GOROOT and build.Tooldir with computed GOROOTIan Lance Taylor2017-07-143-13/+51
| | | | | | | | | | | | This is necessary to make a relocated GOROOT work correctly. Fixes #20997 Change-Id: I18624bd2e109721066cd9e4a887a12583ab79f5d Reviewed-on: https://go-review.googlesource.com/48550 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/compile: fix phi-function updates for preemptible loopsDavid Chase2017-07-142-21/+69
| | | | | | | | | | | | | | | | | | Previous code failed to account for particular control flow involving nested loops when updating phi function inputs. Fix involves: 1) remove incorrect shortcut 2) generate a "better" order for children in dominator tree 3) note inner-loop updates and check before applying outer-loop updates. Fixes #20675. Change-Id: I2fe21470604b5c259e777ad8b15de95f7706894d Reviewed-on: https://go-review.googlesource.com/45791 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* testing: roll back CL 44352 (show in-progress tests upon SIGINT)Ian Lance Taylor2017-07-132-51/+0
| | | | | | | | | | | | | | | | CL 44352 changed the behavior of SIGINT, which can break tests that themselves use SIGINT. I think we can only implement this if the testing package has a way to know whether the code under test is using SIGINT, but os/signal does not provide an API for that. Roll back for 1.9 and think about this again for 1.10. Updates #19397 Change-Id: I021c314db2b9d0a80d0088b120a6ade685459990 Reviewed-on: https://go-review.googlesource.com/48370 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/compile: fix lexical scope of escaped variablesAlessandro Arzilli2017-07-102-0/+12
| | | | | | | | | | | | | | | | When a local variable is moved to the heap the declaration position should be preserved so that later on we can assign it to the correct DW_TAG_lexical_block. Fixes #20959 Change-Id: I3700ef53c68ccd506d0633f11374ad88a52b2898 Reviewed-on: https://go-review.googlesource.com/47852 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
* cmd/link: skip R_ADDR relocs in .rela.plt for internal PIEMichael Pratt2017-07-091-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ld.addpltsym adds an R_X86_64_JMP_SLOT dynamic relocation to .rela.plt and uses Addaddrplus to reference the GOT in Elf64_Rela.r_offset. Addaddrplus results in an R_ADDR relocation, which here we transform into an R_X86_64_64 dynamic relocation. This is wrong for several reasons: 1. .rela.plt is not a writable, relro section. It is mapped read-only, causing the dynamic linker to segfault when it tried to handle the relocation. This was the immediate cause of internal PIE cgo crashes. 2. Relocations targetting other reloc sections are, as far as I can tell, undefined behavior in the ELF spec and are unlikely to be a good idea. 3. Even if the relocation did work, it isn't what we want. The relocation, if successfully handled, would have put an absolute address as the JMP_SLOT offset, but it should be the offset from the beginning of the binary, just like any other relocation. What we want is a statically resolved R_ADDR relocation, just as is used below for the R_X86_64_64 relocation. Skipping the .rela.plt allows reloc() to handle these R_ADDR relocations. With this CL, internal PIE cgo binaries work. Updates #18968 Change-Id: Ie74e6fe249e88150baa0e340b1cb128cf7f28673 Reviewed-on: https://go-review.googlesource.com/47837 Reviewed-by: Ian Lance Taylor <iant@golang.org>
* Revert "cmd/dist: disable plugin test on linux-arm with GOARM=5"Austin Clements2017-07-071-8/+0
| | | | | | | | | | | | This reverts commit 168eb9cf3395583541224af0227c19ddb13e35be. CL 47831 fixes the issue with plugins on ARMv5, so we can re-enable the test. Updates #19674. Change-Id: Idcb29f93ffb0460413f1fab5bb82fa2605795038 Reviewed-on: https://go-review.googlesource.com/47834 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/doc: print Go syntax when printing struct.field docsBrad Fitzpatrick2017-07-063-17/+37
| | | | | | | | | | Fixes #20928 Change-Id: I7f7aafb8ff4b5deb50c286a9ae81c34ee85e56a9 Reviewed-on: https://go-review.googlesource.com/47730 Reviewed-by: Rob Pike <r@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/go: fix docs for -timeoutRuss Cox2017-07-062-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | The text before CL 45816 was: -timeout t If a test runs longer than t, panic. The default is 10 minutes (10m). CL 45816 was supposed to be about clarifying test vs test binary, and it did add the clarification of referring to "duration d", but it also introduced incorrect text about timeout 0. The new text in this CL preserves the good change and eliminates the incorrect one: -timeout d If a test binary runs longer than duration d, panic. The default is 10 minutes (10m). For #14780. Change-Id: I4f79d6e48ed9295bc9f34a36aa90d3b03b40d7f5 Reviewed-on: https://go-review.googlesource.com/47571 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/internal/obj/arm: check illegal base registers in ARM instructionsBen Shi2017-06-302-0/+47
| | | | | | | | | | | | | | | Wrong instructions "MOVW 8(F0), R1" and "MOVW R0<<0(F1), R1" are silently accepted, and all Fx are treated as Rx. The patch checks all those illegal base registers. fixes #20724 Change-Id: I05d41bb43fe774b023205163b7daf4a846e9dc88 Reviewed-on: https://go-review.googlesource.com/46132 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* cmd/internal/obj/arm64: fix assemble LDXP bugfanzha022017-06-303-3/+510
| | | | | | | | | | | | | | | | | The current code calculates register number incorrectly. The fix corrects the register number calculation. Add cases created by decoder to test assembler. Fixes #20697 Fixes #20723 Change-Id: I73ac153df9ea9f51c43a5104828d7a5389551c92 Reviewed-on: https://go-review.googlesource.com/45850 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* cmd/vet/all: in case of vet panic, don't filter stacktraceRobert Griesemer2017-06-291-0/+10
| | | | | | | | | | Fixes #20839. Change-Id: I125460c5da09b7fa0cf470ff5be436f8d650cde7 Reviewed-on: https://go-review.googlesource.com/47253 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/vet/all: fix print statement, add platform informationRobert Griesemer2017-06-281-2/+2
| | | | | | | | Change-Id: Ibbb89c01f3e812a0602961f959672fcb6523449b Reviewed-on: https://go-review.googlesource.com/47031 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/compile: fix slice-in-bound check on amd64p32Cherry Zhang2017-06-282-4/+52
| | | | | | | | | | | | Should use CMPL instead of CMPQ. Fixes #20811. Change-Id: I610d487949c2c8a08b3743656149069d931a51bb Reviewed-on: https://go-review.googlesource.com/46870 Reviewed-by: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/cgo: unwrap typedef-chains before type checkingHiroshi Ioka2017-06-271-1/+1
| | | | | | | | | | | | | clang can emit some dwarf.VoidType which are wrapped by multiple dwarf.TypedefType. We need to unwrap those before further processing. Fixes #20129 Change-Id: I671ce6aef2dc7b55f1a02aec5f9789ac1b369643 Reviewed-on: https://go-review.googlesource.com/44772 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/compile: suppress errors after "cannot assign to X"Matthew Dempsky2017-06-271-3/+3
| | | | | | | | | | | | | | | | | If the LHS is unassignable, there's no point in trying to make sure the RHS can be assigned to it or making sure they're realizable types. This is consistent with go/types. In particular, this prevents "1 = 2" from causing a panic when "1" still ends up with the type "untyped int", which is not realizable. Fixes #20813. Change-Id: I4710bdaac2e375ef12ec29b888b8ac84fb640e56 Reviewed-on: https://go-review.googlesource.com/46835 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* cmd/go: skip broken TestExecutableGOROOT/RelocatedExeBrad Fitzpatrick2017-06-271-0/+2
| | | | | | | | | | | | Test just doesn't work. Updates #20284 Change-Id: I31c3f771e68dcdc471767594a1467e19fbf5fe88 Reviewed-on: https://go-review.googlesource.com/46830 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Bonventre <andybons@google.com>
* cmd/go: update helpdoc.go about '-buildmode'Dong-hee Na2017-06-272-6/+6
| | | | | | | | | | | | After https://golang.org/cl/46421 is landed. helpdoc.go should be updated that -buildmode=c-shared requires only one main package. Fixes #15082 Change-Id: I30a0ee956e6c4655c975ecdaa905887bd474952c Reviewed-on: https://go-review.googlesource.com/46810 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* cmd/go: add more info in t.Fatal messagego1.9beta2Brad Fitzpatrick2017-06-261-1/+1
| | | | | | | | Updates #20284 Change-Id: I4d55d6adec4e8efb54285ca27bb4fa39c76582c3 Reviewed-on: https://go-review.googlesource.com/46719 Reviewed-by: Chris Broadfoot <cbro@golang.org>
* cmd/compile: use correct variable when setting up dummy CallStmt in errorRobert Griesemer2017-06-261-1/+1
| | | | | | | | | | | | | Fixes crash when printing a related error message later on. Fixes #20789. Change-Id: I6d2c35aafcaeda26a211fc6c8b7dfe4a095a3efe Reviewed-on: https://go-review.googlesource.com/46713 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/internal/obj/arm: fix wrong encoding of MULBBBen Shi2017-06-232-2/+2
| | | | | | | | | | | | | | | "MULBB R1, R2, R3" is encoded to 0xe163f182, which should be 0xe1630182. This patch fix it. fix #20764 Change-Id: I9d3c3ffa40ecde86638e5e083eacc67578caebf4 Reviewed-on: https://go-review.googlesource.com/46491 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* cmd/go: fix TestExecutableGOROOT when GOROOT_FINAL is setRuss Cox2017-06-231-60/+62
| | | | | | | | | | | | | | | | If GOROOT_FINAL was set during the build, the default GOROOT will not be testGOROOT. Determine the default GOROOT by reading the right source file instead of guessing. (GOROOT_FINAL may no longer be set when the test is actually run.) Also refactor a bit. Fixes #20284. Change-Id: I2274595a235bee10c3f3a5ffecf4bb976f4d9982 Reviewed-on: https://go-review.googlesource.com/46428 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/go: be more precise when a directory cannot be builtRuss Cox2017-06-237-16/+74
| | | | | | | | | | | | | | | Maybe there are no Go files at all. Maybe they are all excluded by build constraints. Maybe there are only test Go files. Be specific. Fixes #17008. Fixes parts of #20760. Change-Id: If6ac82ba0ed437772e76e06763263747d3bc4f65 Reviewed-on: https://go-review.googlesource.com/46427 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/go: report possibly-relevant ignored symlinks during pattern matchRuss Cox2017-06-232-3/+42
| | | | | | | | | | | | | | We can't follow symlinks for fear of directory cycles and other problems, but we can at least notice potentially-relevant symlinks that are being ignored and report them. Fixes #17662. Change-Id: I1fce00bd5b80ea8df45dac8b61bfa08076ec5f4b Reviewed-on: https://go-review.googlesource.com/46425 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/go: detect case-insensitive import path collisionRuss Cox2017-06-233-16/+26
| | | | | | | | | | | | | | We already detect this collision when both imports are used anywhere in a single program. Also detect it when they are in different targets being processed together. Fixes #20264. Change-Id: I5d3c822aae136053fbcb5ed167e1d67f9b847a0f Reviewed-on: https://go-review.googlesource.com/46424 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/internal/obj/arm: fix setting U bit in shifted register offset of MOVBSBen Shi2017-06-234-7/+398
| | | | | | | | | | | | | | | "MOVBS.U R0<<0(R1), R2" is assembled to 0xe19120d0 (ldrsb r2, [r1, r0]), but it is expected to be 0xe11120d0 (ldrsb r2, [r1, -r0]). This patch fixes it and adds more encoding tests. fixes #20701 Change-Id: Ic1fb46438d71a978dbef06d97494a70c95fcbf3a Reviewed-on: https://go-review.googlesource.com/45996 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
* cmd/go: detect Go assembly before assembling with gccRuss Cox2017-06-234-0/+33
| | | | | | | | | | | | | Avoids confusing errors from the GNU assembler processing Go assembly source code. Fixes #19448. Change-Id: Ic2c68b2521847cca5a3d078a092e5c60ec340840 Reviewed-on: https://go-review.googlesource.com/46423 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/go: require -buildmode=c-shared to take one main packageRuss Cox2017-06-231-1/+1
| | | | | | | | | | | | | | | | | | | The current behavior is to filter out the non-main packages silently, which is confusing if there are only non-main packages. Instead, report an error unless it's used with a single main package. To be clear, I don't really know what I'm doing. It might be that multiple main packages are allowed, or even that we do want the filtering, but all.bash passes with this change, so I am taking that as a sign that we don't need that extra flexibility. Fixes #15082. Change-Id: I984d0f444a01c0ee0c3cd6646a75527ea99a9ebe Reviewed-on: https://go-review.googlesource.com/46421 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/compile: fix array slice expression bounds checkRobert Griesemer2017-06-221-1/+1
| | | | | | | | | | Fixes #20749. Change-Id: Ic6a7edc858575c4cb8b2e2ca97ee0c4b69f22c27 Reviewed-on: https://go-review.googlesource.com/46466 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/go: read URL not Repository Root from svn infoRuss Cox2017-06-221-6/+11
| | | | | | | | | | | | | | | | This makes custom import path checks work even when the custom import metadata directs checking out a subtree of the subversion repository. (Git and Mercurial allow no such thing, so they are unaffected.) Fixes #20731. Change-Id: I635f3a2037d69a87c6dac7b08b0a0d8266abd250 Reviewed-on: https://go-review.googlesource.com/46417 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* cmd/compile: make loop guard+rotate conditional on GOEXPERIMENTDavid Chase2017-06-211-3/+8
| | | | | | | | | | | | | | | | | Loops of the form "for i,e := range" needed to have their condition rotated to the "bottom" for the preemptible loops GOEXPERIMENT, but this caused a performance regression because it degraded bounds check removal. For now, make the loop rotation/guarding conditional on the experiment. Fixes #20711. Updates #10958. Change-Id: Icfba14cb3b13a910c349df8f84838cf4d9d20cf6 Reviewed-on: https://go-review.googlesource.com/46410 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
* all: gofmtMikio Hara2017-06-211-2/+2
| | | | | | | | Change-Id: I2d0439a9f068e726173afafe2ef1f5d62b7feb4d Reviewed-on: https://go-review.googlesource.com/46190 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* Revert "cmd/vendor/github.com/google/pprof: refresh from upstream"Alberto Donizetti2017-06-2051-872/+331
| | | | | | | | | | | | This reverts commit 3d13b5e00c9bc065d83e27d787a64adc683cea02. Reason for revert: the new TestHttpsInsecure test breaks two darwin builders, the android builders, and one plan9 builder. Change-Id: I09158e7d1bd2b3ffda57e7f2350f34eb9b62e784 Reviewed-on: https://go-review.googlesource.com/46158 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* cmd/vendor/github.com/google/pprof: refresh from upstreamAlberto Donizetti2017-06-2051-331/+872
| | | | | | | | | | | | | Updating to commit fffc5831a499a958516664a34cb7ba2b9e228793 from github.com/google/pprof Fixes #19380 Change-Id: I7a0c64101f42b494c4a469c41628374272eccf95 Reviewed-on: https://go-review.googlesource.com/46155 Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* testing: harmonize handling of prefix-matched benchmarksRuss Cox2017-06-203-0/+94
| | | | | | | | | | | | | | | | | | | | | | | | If you have BenchmarkX1 with sub-benchmark Y and you have BenchmarkX2 with no sub-benchmarks, then go test -bench=X/Y runs BenchmarkX1 once with b.N=1 (to find out about Y) and then not again, because it has sub-benchmarks, but arguably also because we're interested in Y. In contrast, it runs BenchmarkX2 in full, even though clearly that is not relevant to the match X/Y. We do have to run X2 once with b.N=1 to probe for having X2/Y, but we should not run it with larger b.N. Fixes #20589. Change-Id: Ib86907e844f34dcaac6cd05757f57db1019201d0 Reviewed-on: https://go-review.googlesource.com/46031 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>