Eli Bendersky [Wed, 31 Jul 2019 20:42:16 +0000 (13:42 -0700)]
encoding/json: clarify Marshal behavior for string keys of maps
This is a documentation-only change.
Fixes #28827
Change-Id: Ife9ab997809048784f35872b09905bc209a05eff
Reviewed-on: https://go-review.googlesource.com/c/go/+/188417 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Robert Griesemer [Tue, 30 Jul 2019 23:16:03 +0000 (16:16 -0700)]
spec: add an example of a trivially invalid interface
In preparation for the forthcoming spec changes for #6977.
While at it, modernize existing File example that dates
back all the way to commit 18c5b488a3b.
Change-Id: Id10e4df0513e3de15bd58867222923eefa9473ea
Reviewed-on: https://go-review.googlesource.com/c/go/+/187978 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
cmd/go/internal/cache: avoid ioutil.WriteFile for writing cache entries
ioutil.WriteFile always truncates the destination file to 0 before
writing, which is inappropriate for unsynchronized, idempotent,
fixed-size files such as the cache entry files here.
Instead, truncate the file only after writing it, so that a second
write will never (even temporarily!) remove the contents of a
preceding write.
Fixes #29667
Change-Id: I16a53ce79d8a23d23580511cb6abd062f54b65ef
Reviewed-on: https://go-review.googlesource.com/c/go/+/188157
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Michael Knyszek [Fri, 19 Jul 2019 23:35:24 +0000 (19:35 -0400)]
runtime: call sysHugePage less often
Currently when we coalesce memory we make a sysHugePage call
(MADV_HUGEPAGE) to ensure freed and coalesced huge pages are treated as
such so the scavenger's assumptions about performance are more in line
with reality.
Unfortunately we do it way too often because we do it if there was any
change to the huge page count for the span we're coalescing into, not
taking into account that it could coalesce with its neighbors and not
actually create a new huge page.
This change makes it so that it only calls sysHugePage if the original
huge page counts between the span to be coalesced into and its neighbors
do not add up (i.e. a new huge page was created due to alignment). Calls
to sysHugePage will now happen much less frequently, as intended.
Michael Anthony Knyszek [Tue, 16 Jul 2019 20:36:33 +0000 (20:36 +0000)]
runtime: add physHugePageShift
This change adds physHugePageShift which is defined such that
1 << physHugePageShift == physHugePageSize. The purpose of this variable
is to avoid doing expensive divisions in key functions, such as
(*mspan).hugePages.
This change also does a sweep of any place we might do a division or mod
operation with physHugePageSize and turns it into bit shifts and other
bitwise operations.
Finally, this change adds a check to mallocinit which ensures that
physHugePageSize is always a power of two. osinit might choose to ignore
non-powers-of-two for the value and replace it with zero, but mallocinit
will fail if it's not a power of two (or zero). It also derives
physHugePageShift from physHugePageSize.
This change helps improve the performance of most applications because
of how often (*mspan).hugePages is called.
Andrew Todd [Sat, 27 Jul 2019 23:20:49 +0000 (16:20 -0700)]
strings: clarify usage of Title and ToTitle
This is intended to help clear up confusion around the usage of the
Title and ToTitle functions. It includes a link to define title case
to distinguish it from upper case. It also includes an additional
example for the ToTitle function to showcase the difference in behavior
between it and the Title function.
Fixes #33302
Change-Id: I44e62962fb04d0d22966a39eda3a2d16de7a2291
Reviewed-on: https://go-review.googlesource.com/c/go/+/187825 Reviewed-by: Rob Pike <r@golang.org>
Keith Randall [Mon, 29 Jul 2019 19:51:19 +0000 (12:51 -0700)]
runtime: use uintptr instead of int32 for counting to next heap profile sample
Overflow of the comparison caused very large (>=1<<32) allocations to
sometimes not get sampled at all. Use uintptr so the comparison will
never overflow.
Fixes #33342
Tested on the example in 33342. I don't want to check a test in that
needs that much memory, however.
Daniel Martí [Sat, 27 Jul 2019 21:53:54 +0000 (14:53 -0700)]
doc: use <code> for a few file paths that didn't
Spotted while seeing CL 187818 in master.
Change-Id: Ic3f42558f6833fc35580b2b2a15f2c5aba5713c0
Reviewed-on: https://go-review.googlesource.com/c/go/+/187822 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Giovanni Bajo [Sat, 27 Jul 2019 18:55:54 +0000 (11:55 -0700)]
doc: mention that GOPATH/bin should be in PATH
As noticed while mentoring at Gophercon, a common mistake for
beginners is that, after they install git-codereview, it's not
found by git because they haven't put GOPATH/bin in their
environment.
Document that *os.File is subject to resource limits
for concurrent operations. We aren't documenting
a specific number of concurrent operations because that
number is OS/system dependent. This limit comes from:
internal/poll/fd_mutex.go
where we use 20 bits to count locks.
Fixes #32544
Change-Id: I7d305d4aaba5b2dbc6f1ab8c447117fde5e31a66
Reviewed-on: https://go-review.googlesource.com/c/go/+/181841 Reviewed-by: Rob Pike <r@golang.org>
Revert "cmd/go: move automatic testing.Init call into generated test code"
This reverts CL 176098.
Reason for revert: added complexity, but did not completely fix the
underlying problem. A complete solution would not be worth the
complexity, and as a partial solution this is probably not worth the
complexity either.
Updates #31859
Change-Id: Ifd34c292fd1b811c60afe3c339e5edd3f37190c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/186817
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Caleb Spare <cespare@gmail.com>
runtime: align allocations harder in GODEBUG=sbrk=1 mode
Currently, GODEBUG=sbrk=1 mode aligns allocations by their type's
alignment. You would think this would be the right thing to do, but
because 64-bit fields are only 4-byte aligned right now (see #599),
this can cause a 64-bit field of an allocated object to be 4-byte
aligned, but not 8-byte aligned. If there is an atomic access to that
unaligned 64-bit field, it will crash.
This doesn't happen in normal allocation mode because the
size-segregated allocation and the current size classes will cause any
types larger than 8 bytes to be 8 byte aligned.
We fix this by making sbrk=1 mode use alignment based on the type's
size rather than its declared alignment. This matches how the tiny
allocator aligns allocations.
This was tested with
GOARCH=386 GODEBUG=sbrk=1 go test sync/atomic
This crashes with an unaligned access before this change, and passes
with this change.
Bryan C. Mills [Tue, 11 Dec 2018 22:13:50 +0000 (17:13 -0500)]
cmd/go: in module mode, populate PackagePublic.Root with the module root
'go test' uses the Root field to determine the set of files that
invalidate test results, and there is no other sensible meaning of
“root” for code within a module.
Fixes #29111
Change-Id: Icf1be90a26d22665613e42cb968087b63c36e74c
Reviewed-on: https://go-review.googlesource.com/c/go/+/154100
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Jay Conrod [Mon, 15 Jul 2019 15:33:26 +0000 (11:33 -0400)]
cmd/go: include GOEXPERIMENT flags in tool id for cache key
The go command invokes each tool with -V=full to discover its version
to compute a tool id. For release versions (that don't include the
word "devel"), the go command only used the third word in
the output (e.g., "go1.13"), ignoring any toolchain experiments that
followed. With this change, the go command will use whole version line
in the tool id for release versions.
Also, when -V=full is set and there are non-default experiments,
experiments are no longer printed twice.
Fixes #33091
Change-Id: I19b96f939c7e2fbc5d8befe3659156ee4b58daef
Reviewed-on: https://go-review.googlesource.com/c/go/+/186200
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Joe Tsai [Wed, 17 Jul 2019 00:40:20 +0000 (17:40 -0700)]
net/http/httputil: fix regression in ReverseProxy.ServeHTTP
In Go1.12 and below, the logic in ReverseProxy.ServeHTTP would always
allocate request.Header even if it were not present in the incoming request.
CL 174324 added http.Request.Clone and re-factors ReverseProxy.ServeHTTP
to use the new Clone method. However, the new Clone logic is not equivalent
to the former logic. We preserve former semantics by explicitly allocating
the Header map if nil.
Fixes #33142
Change-Id: I356f94a915dd9779584ce3fe31e56e5474b9ad37
Reviewed-on: https://go-review.googlesource.com/c/go/+/186437
Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Bonventre <andybons@golang.org>
Alberto Donizetti [Sun, 14 Jul 2019 17:08:57 +0000 (19:08 +0200)]
doc/go1.13: remove 1.12 reference from 1.13 release notes
While it's true that CL 168479 was also backported to 1.12, this is
irrelevant for the Go1.13 release notes.
Change-Id: I044be69f8f2bc005f58a0d63db05129add15f674
Reviewed-on: https://go-review.googlesource.com/c/go/+/186138 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Dmitri Shuralyov [Tue, 16 Jul 2019 20:29:49 +0000 (16:29 -0400)]
CONTRIBUTORS: first round of updates for Go 1.13
This update has been automatically generated using the updatecontrib
command:
cd gotip
go run golang.org/x/build/cmd/updatecontrib
With minor manual changes to canonicalize letter case for a few names.
Actions taken (relative to CONTRIBUTORS at origin/master):
Added Ahsun Ahmed <ahmed.ahsun@gmail.com>
Added Al Cutter <al@google.com>
Added Alex Tokarev <aleksator@gmail.com>
Added Alexander Lourier <aml@rulezz.ru>
Added Alexander Rakoczy <alex@golang.org>
Added Andrei Matei <andrei@cockroachlabs.com>
Added Andrei Vagin <avagin@google.com>
Added Andrew Z Allen <me@andrewzallen.com>
Added Aofei Sheng <aofei@aofeisheng.com>
Added Arash Bina <arash@arash.io>
Added Benjamin Peterson <benjamin@python.org>
Added Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Added Brandon Ryan <bjryan19@gmail.com>
Added Bryan Heden <b.heden@gmail.com>
Added Carlos Eduardo <me@carlosedp.com>
Added Carrie Bynon <cbynon@gmail.com>
Added Chris Marchesi <chrism@vancluevertech.com>
Added Colin Arnott <colin@urandom.co.uk>
Added Daniel Cormier <danielc@knowbe4.com>
Added Daniel Langner <s8572327@gmail.com>
Added Daniel Lublin <daniel@lublin.se>
Added Darren Grant <darren.e.grant@gmail.com>
Added Derek Phan <derekphan94@gmail.com>
Added Dmitri Goutnik <dgoutnik@gmail.com>
Added Dmitry Mottl <dmitry.mottl@gmail.com>
Added Eli Bendersky <eliben@google.com>
Added Evan Digby <evandigby@gmail.com>
Added Fedor Korotkiy <dartslon@gmail.com>
Added Felix Bünemann <Felix.Buenemann@gmail.com>
Added Francesco Renzi <rentziass@gmail.com>
Added Gabriel Guzman <gabe.guzman@gmail.com>
Added Gabriel Nelle <tehsphinx@web.de>
Added Gernot Vormayr <gvormayr@gmail.com>
Added GitHub User ZZMarquis (7624583) <zhonglingjian3821@163.com>
Added GitHub User alkesh26 (1019076) <alkesh26@gmail.com>
Added GitHub User bakape (7851952) <bakape@gmail.com>
Added GitHub User frennkie (6499251) <mail@rhab.de>
Added GitHub User hengwu0 (41297446) <41297446+hengwu0@users.noreply.github.com>
Added GitHub User kazyshr (30496953) <kazyshr0301@gmail.com>
Added GitHub User linguohua (3434367) <lghchinaidea@gmail.com>
Added GitHub User micnncim (21333876) <micnncim@gmail.com>
Added Gordon Tyler <gordon@doxxx.net>
Added Greg Thelen <gthelen@google.com>
Added Haosdent Huang <haosdent@gmail.com>
Added Hasan Ozgan <hasan@ozgan.net>
Added Henry Wong <liushuai.wang@elastic.co>
Added Horst Rutter <hhrutter@gmail.com>
Added Ivan Osadchiy <ivan.osadchii@gmail.com>
Added JT Olio <hello@jtolio.com>
Added Jacob Blain Christen <dweomer5@gmail.com>
Added Jacob Walker <jacobwalker0814@gmail.com>
Added James Nugent <james@jen20.com>
Added Jannis Andrija Schnitzer <jannis@schnitzer.im>
Added Jean-François Bustarret <jf@bustarret.com>
Added Jeremy Jay <jeremy@pbnjay.com>
Added Jeroen Simonetti <jeroen@simonetti.nl>
Added Jingnan Si <jingnan.si@gmail.com>
Added Jinkun Zhang <franksnolf@gmail.com>
Added John Moore <johnkenneth.moore@gmail.com>
Added John Weldon <johnweldon4@gmail.com>
Added Jonathon Lacher <jonathon.lacher@gmail.com>
Added Jordan Liggitt <liggitt@google.com>
Added Joshua M. Clulow <josh.clulow@joyent.com>
Added Juraj Sukop <sukop@users.noreply.github.com>
Added Justin Li <git@justinli.net>
Added Kai Dong <dokia2357@gmail.com>
Added Kenichi Tsunokawa <kenichi.tsunokawa@gmail.com>
Added Kenta Mori <zoncoen@gmail.com>
Added Ketan Parmar <ketanbparmar@gmail.com>
Added Kirill Motkov <Motkov.Kirill@gmail.com>
Added Kshitij Saraogi <kshitijsaraogi@gmail.com>
Added Leonardo Comelli <leonardo.comelli@gmail.com>
Added Lorenz Nickel <mail@lorenznickel.de>
Added Luka Zitnik <luka.zitnik@gmail.com>
Added Luke Champine <luke.champine@gmail.com>
Added Madhu Rajanna <madhupr007@gmail.com>
Added Marat Khabibullin <marat.khabibullin@jetbrains.com>
Added Mark Villacampa <m@markvillacampa.com>
Added Max Semenik <maxsem.wiki@gmail.com>
Added Maxim Eryomenko <moeryomenko@gmail.com>
Added Michael Cook <code@mdcook.net>
Added Michael Vogt <mvo@ubuntu.com>
Added Mickael KERJEAN <mickael.kerjean@gmail.com>
Added Mickey Reiss <mickeyreiss@gmail.com>
Added Mihai Moldovan <ionic@ionic.de>
Added Mirko Hansen <baaazen@gmail.com>
Added Muir Manders <muir@mnd.rs>
Added Mykhailo Lesyk <mikhail@lesyk.org>
Added Nick Anthony <Liberatys@outlook.com>
Added Nikita Kryuchkov <nkryuchkov10@gmail.com>
Added Nir Soffer <nirsof@gmail.com>
Added Norman B. Lancaster <qbradq@gmail.com>
Added Patrick Barker <barkerp@vmware.com>
Added Patrik Lundin <patrik@sigterm.se>
Added Petr Jediný <petr.jediny@gmail.com>
Added Robert Ayrapetyan <robert.ayrapetyan@gmail.com>
Added Robert van Gent <rvangent@google.com>
Added Rohan Verma <rohanverma2004@gmail.com>
Added Romain Baugue <romain.baugue@elwinar.com>
Added Sad Pencil <qh06@qq.com>
Added Segev Finer <segev208@gmail.com>
Added Sergey Dobrodey <sergey.dobrodey@synesis.ru>
Added Sergey Yanykin <syanykin@ozon.ru>
Added Shawn Elliott <selliott@microsoft.com>
Added Shengjing Zhu <zsj950618@gmail.com>
Added Shubham Sharma <shubham.sha12@gmail.com>
Added Stephan Zuercher <zuercher@gmail.com>
Added Steve Mynott <steve.mynott@gmail.com>
Added Tai Le <letientai299@gmail.com>
Added Todd Kulesza <tkulesza@google.com>
Added Tom Anthony <git@tomanthony.co.uk>
Added Tooru Takahashi <tooru.takahashi134@gmail.com>
Added Udalov Max <re.udalov@gmail.com>
Added Valentin Vidic <vvidic@valentin-vidic.from.hr>
Added Vivek Sekhar <vsekhar@google.com>
Added WEI Xikai <xykwei@gmail.com>
Added Wenlei (Frank) He <wlhe@google.com>
Added Wenzel Lowe <lowewenzel@gmail.com>
Added Yang Tian <linuxty@gmail.com>
Added Yasser Abdolmaleki <yasser@yasser.ca>
Added Zach Jones <zachj1@gmail.com>
Added adarsh ravichandran <adarshravichandran91@gmail.com>
Added berkant ipek <41230766+0xbkt@users.noreply.github.com>
Added karthik nayak <karthik.188@gmail.com>
Added marius a. eriksen <marius@grailbio.com>
Added Максадбек Ахмедов <a.maksadbek@gmail.com>
Used GitHub User ZZMarquis (7624583) form for ZZMarquis <zhonglingjian3821@163.com> https://github.com/golang/go/commit/b00ef3b865 [go]
Used GitHub User alkesh26 (1019076) form for alkesh26 <alkesh26@gmail.com> https://github.com/golang/go/commit/c7f69a2897 [go]
Used GitHub User bakape (7851952) form for bakape <bakape@gmail.com> https://github.com/golang/go/commit/27e444d5e6 [go]
Used GitHub User frennkie (6499251) form for frennkie <mail@rhab.de> https://github.com/golang/go/commit/ee46250e06 [go]
Used GitHub User hengwu0 (41297446) form for hengwu0 <41297446+hengwu0@users.noreply.github.com> https://github.com/golang/go/commit/95d4e6158b [go]
Used GitHub User kazyshr (30496953) form for kazyshr <kazyshr0301@gmail.com> https://github.com/golang/tools/commit/0fdf0c73 [tools]
Used GitHub User linguohua (3434367) form for linguohua <lghchinaidea@gmail.com> https://github.com/golang/tools/commit/97de5656 [tools]
Used GitHub User micnncim (21333876) form for micnncim <micnncim@gmail.com> https://github.com/golang/tools/commit/15d5d381 [tools]
Used GitHub name "Akhil Indurti" for smasher164 <aindurti@gmail.com> https://github.com/golang/go/commit/5ca44dc403 [build go]
Used GitHub name "Carlos Eduardo" for CarlosEDP <me@carlosedp.com> https://github.com/golang/net/commit/018c4d4 [net]
Used GitHub name "Ivan Markin" for nogoegst <nogoegst@users.noreply.github.com> https://github.com/golang/go/commit/a1addf15df [go]
Used GitHub name "Jean-François Bustarret" for jfbus <jf@bustarret.com> https://github.com/golang/go/commit/825ff1e317 [go]
Used GitHub name "Jinkun Zhang" for smileeye <franksnolf@gmail.com> https://github.com/golang/go/commit/607493bed6 [go]
Used GitHub name "John Moore" for guitarbum722 <johnkenneth.moore@gmail.com> https://github.com/golang/go/commit/44c9354c5a [go]
Used GitHub name "Keiji Yoshida" for yosssi <yoshida.keiji.84@gmail.com> https://github.com/golang/lint/commit/ac6833c [lint]
Used GitHub name "Kenta Mori" for zoncoen <zoncoen@gmail.com> https://github.com/golang/net/commit/fe579d4 [net]
Used GitHub name "Kirill Motkov" for Motkov.Kirill <Motkov.Kirill@gmail.com> https://github.com/golang/go/commit/0ff0df8be3 [go]
Used GitHub name "Luke Champine" for lukechampine <luke.champine@gmail.com> https://github.com/golang/go/commit/9d40fadb1c [crypto go]
Used GitHub name "Michalis Kargakis" for kargakis <mkargaki@redhat.com> https://github.com/golang/go/commit/e243d242d7 [go]
Used GitHub name "Nick Anthony" for Liberatys <Liberatys@outlook.com> https://github.com/golang/go/commit/62ddf7d0c5 [go]
Used GitHub name "Robert Ayrapetyan" for rayrapetyan <robert.ayrapetyan@gmail.com> https://github.com/golang/sys/commit/bf70e46 [sys]
Used GitHub name "Robin Eklind" for mewmew <rnd0x00@gmail.com> https://github.com/golang/go/commit/b8620afb8d [blog go proposal.git]
Used GitHub name "Sergey Dobrodey" for sergeydobrodey <sergey.dobrodey@synesis.ru> https://github.com/golang/net/commit/e869164 [net]
Used GitHub name "Tai Le" for Tai <letientai299@gmail.com> https://github.com/golang/build/commit/1b388d2 [build tools]
Used GitHub name "WEI Xikai" for ShiKaiWi <xykwei@gmail.com> https://github.com/golang/go/commit/518ee55d78 [go]
Used GitHub name "Yang Tian" for taoyuanyuan <linuxty@gmail.com> https://github.com/golang/go/commit/5eeb372418 [go]
Used GitHub name "Zach Jones" for zdjones <zachj1@gmail.com> https://github.com/golang/go/commit/c178389604 [go]
Updates #12042
Change-Id: Ic220d997a0dc3bf4109ab964cbb6a25ea5c0c9da
Reviewed-on: https://go-review.googlesource.com/c/go/+/186397 Reviewed-by: Alexander Rakoczy <alex@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
With gccgo, if we generate getg inlined, the backend may cache
the address of the TLS variable, which will become invalid after
a thread switch.
Currently there is no known bug for this. But if we didn't
implement this carefully, we may get subtle bugs. This CL adds a
test that will fail loudly if this is wrong. (See also
https://go.googlesource.com/gofrontend/+/refs/heads/master/libgo/runtime/proc.c#333
and an incorrect attempt CL 185337.)
Note: at least on Linux/AMD64, even with an incorrect
implementation, this only fails if the test is compiled with
-fPIC, which is not the default setting for gccgo test suite. So
some manual work is needed. Maybe we could extend the test suite
to run the runtime test with more settings (e.g. PIC and static).
Change-Id: I459a3b4c31f09b9785c0eca19b7756f80e8ef54c
Reviewed-on: https://go-review.googlesource.com/c/go/+/186357
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
cmd/go: tighten the check for pseudo-version base tags
Do not allow a pseudo-version derived from a canonical tag to refer to
the same revision as the tag itself. It's unnecessary (because
canonical tags already have a total ordering) and confusing (the
pseudo-version appears to come after the tag, but actually refers to
the exact same revision).
Updates #32879
Updates #27173
Change-Id: I02befedbe89c8819bdd93e470783ce63fc813193
Reviewed-on: https://go-review.googlesource.com/c/go/+/184720
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Jay Conrod [Fri, 12 Jul 2019 21:31:59 +0000 (17:31 -0400)]
cmd/go: clarify error text for module path mismatch
This error occurs when a module is loaded with one name (for example,
github.com/golang/lint) but declares a different path in its go.mod
(golang.org/x/lint). The current text "unexpected module path" is
confusing. It doesn't explain why the path was unexpected, and it's
not clear what was expected.
With this change, the error text includes the module and version
containing the go.mod file with the error, the declared module path,
and the loaded module path. The paths are vertically aligned so
differences are visually obvious. As with other module version errors,
the shortest chain of requirements is printed.
This change supercedes CL 158477.
Fixes #28489
Change-Id: Ieb07d00bcae182376d7be6aad111c84fbf784354
Reviewed-on: https://go-review.googlesource.com/c/go/+/185985
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Ian Lance Taylor [Sat, 13 Jul 2019 19:20:43 +0000 (12:20 -0700)]
cmd/link: put shlib ".type" functions in internal ABI
These functions are compiler generated, and as such are only available
in the internal ABI. Doing this avoids generating an alias symbol.
Doing that avoids confusion between unmangled and mangled type symbols.
Fixes #30768
Change-Id: I197a5ba6403aac11989ffa951dbe35bd0506de91
Reviewed-on: https://go-review.googlesource.com/c/go/+/186077
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
cmd/go/internal/modfetch: always check for a go.mod file when fetching from version control
If the module path declared in the go.mod file does not match the path
we are trying to resolve, a build using that module is doomed to fail.
Since we know that the module path does not match in the underlying
repo, we also know that the requested module does not exist at the
requested version.
Therefore, we should reject that version in Stat with a “not exist”
error — sooner rather than later — so that modload.Query will continue
to check other candidate paths (for example, with a major-version
suffix added or removed).
Fixes #33099
Change-Id: I43c980f78ed75fa6ace90f237cc3aad46c22d83a
Reviewed-on: https://go-review.googlesource.com/c/go/+/186237
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Session resumption is not a reliable TLS behavior: the server can decide
to reject a session ticket for a number of reasons, or no reason at all.
This makes this non-hermetic test extremely brittle.
It's currently broken on the builders for both TLS 1.2 and TLS 1.3, and
I could reproduce the issue for TLS 1.3 only. As I was debugging it, it
started passing entirely on my machine.
In practice, it doesn't get us any coverage as resumption is already
tested with the recorded exchange tests, and TestVerifyHostname still
provides a smoke test checking that we can in fact talk TLS.
cmd/go: check for source files in relative paths before attempting to determine the package path
This is a more minimial fix for the immediate symptom of 32917 and
30590, but does not improve 'list -e' behavior or error
messages resulting from other package loading issues.
Fixes #32917
Fixes #30590
Change-Id: I6088d14d864410159ebf228d9392d186322fd2a5
Reviewed-on: https://go-review.googlesource.com/c/go/+/185417
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Jay Conrod [Fri, 12 Jul 2019 15:31:29 +0000 (11:31 -0400)]
cmd/go: improve module version query documentation
Add "upgrade" and "patch" to 'go help modules' section 'Module queries'.
Also explicitly call out the fact that @v2 will select the latest
version starting with v2, not the branch named v2, since this is a
common source of confusion.
Fixes #33010
Change-Id: I2fe27543b81a160fb6f6b8e8444a7a35f3661433
Reviewed-on: https://go-review.googlesource.com/c/go/+/185979
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Ian Lance Taylor [Thu, 11 Jul 2019 18:57:31 +0000 (11:57 -0700)]
cmd/cgo: do not rewrite call if there are more args than parameters
We already skipped rewriting the call if there were fewer args than
parameters. But we can also get a cgo crash if there are more args,
if at least one of the extra args uses a name qualified with "C.".
Skip the rewrite, since the build will fail later anyhow.
Fixes #33061
Change-Id: I62ff3518b775b502ad10c2bacf9102db4c9a531c
Reviewed-on: https://go-review.googlesource.com/c/go/+/185797
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Bonventre <andybons@golang.org>
This test sometimes times out when the machine is busy.
The reason behind is still a bit blurry. But it seems to comes from
the fact that on AIX, once a listen is performed a socket, every
connection will be accepted even before an accept is made (which only
occurs when a machine is busy). On Linux, a socket is created as a
"passive socket" which seems to wait for the accept before allowing
incoming connections.
Updates #29685
Change-Id: I41b053b7d5f5b4420b72d6a217be72e41220d769
Reviewed-on: https://go-review.googlesource.com/c/go/+/185717
Run-TryBot: Clément Chigot <clement.chigot@atos.net> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Francesco Renzi [Tue, 9 Jul 2019 13:43:10 +0000 (14:43 +0100)]
strings: document that order of pairs matters in NewReplacer
Update NewReplacer documentation to specify that in the case of
multiple matches at the same position, the matching old/new
pair that appears first in NewReplacer arguments takes precedence.
Fixes #32699
Change-Id: I9d0616d28e5cd8c9bfa301be201f2b0ebf361dff
Reviewed-on: https://go-review.googlesource.com/c/go/+/185099 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Rob Pike <r@golang.org>
Than McIntosh [Wed, 10 Jul 2019 13:12:24 +0000 (09:12 -0400)]
test: new testcase for gccgo compiler bug
Updates #33013
Change-Id: I3db062b37860bb0c6c99a553408b47cf0313531e
Reviewed-on: https://go-review.googlesource.com/c/go/+/185517
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
test: add a test for gccgo bug in handling break statement in a select
Gccgo CL 184998 added optimizations for one- and two-case select
statements. But it didn't handle break statement in the select
case correctly. The fix is CL 185519. This CL adds a test.
Change-Id: Ide1b199f106172b41dd77c1f6e0d662fccdd8cc5
Reviewed-on: https://go-review.googlesource.com/c/go/+/185520
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
cmd/cgo: fix check for conversion of ptr to struct field
According to the documentation "When passing a pointer to a field in a
struct, the Go memory in question is the memory occupied by the field,
not the entire struct.". checkAddr states that this should also work
with type conversions, which is implemented in isType. However,
ast.StarExpr must be enclosed in ast.ParenExpr according to the go spec
(see example below), which is not considered in the checks.
Example:
// struct Si { int i; int *p; }; void f(struct I *x) {}
import "C"
type S {
p *int
i C.struct_Si
}
func main() {
v := &S{new(int)}
C.f((*C.struct_I)(&v.i)) // <- panic
}
This example will cause cgo to emit a cgoCheck that checks the whole
struct S instead of just S.i causing the panic "cgo argument has Go
pointer to Go pointer".
This patch fixes this situation by adding support for ast.ParenExpr to
isType and adds a test, that fails without the fix.
Fixes #32970.
Change-Id: I15ea28c98f839e9fa708859ed107a2e5f1483133
Reviewed-on: https://go-review.googlesource.com/c/go/+/185098
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Russ Cox [Fri, 28 Jun 2019 19:01:16 +0000 (15:01 -0400)]
net/http: fix Transport.MaxConnsPerHost limits & idle pool races
There were at least three races in the implementation of the pool of
idle HTTP connections before this CL.
The first race is that HTTP/2 connections can be shared for many
requests, but each requesting goroutine would take the connection out
of the pool and then immediately return it before using it; this
created unnecessary, tiny little race windows during which another
goroutine might dial a second connection instead of reusing the first.
This CL changes the idle pool to just leave the HTTP/2 connection in
the pool permanently (until there is reason to close it), instead of
doing the take-it-out-put-it-back dance race.
The second race is that “is there an idle connection?” and
“register to wait for an idle connection” were implemented as two
separate steps, in different critical sections. So a client could end
up registered to wait for an idle connection and be waiting or perhaps
dialing, not having noticed the idle connection sitting in the pool
that arrived between the two steps.
The third race is that t.getIdleConnCh assumes that the inability to
send on the channel means the client doesn't need the result, when it
could mean that the client has not yet entered the select.
That is, the main dial does:
idleConnCh := t.getIdleConnCh(cm)
select {
case v := <-dialc:
...
case pc := <-idleConnCh
...
...
}
But then tryPutIdleConn does:
waitingDialer := t.idleConnCh[key] // what getIdleConnCh(cm) returned
select {
case waitingDialer <- pconn:
// We're done ...
return nil
default:
if waitingDialer != nil {
// They had populated this, but their dial won
// first, so we can clean up this map entry.
delete(t.idleConnCh, key)
}
}
If the client has returned from getIdleConnCh but not yet reached the
select, tryPutIdleConn will be unable to do the send, incorrectly
conclude that the client does not care anymore, and put the connection
in the idle pool instead, again leaving the client dialing unnecessarily
while a connection sits in the idle pool.
(It's also odd that the success case does not clean up the map entry,
and also that the map has room for only a single waiting goroutine for
a given host.)
None of these races mattered too much before Go 1.11: at most they
meant that connections were not reused quite as promptly as possible,
or a few more than necessary would be created. But Go 1.11 added
Transport.MaxConnsPerHost, which limited the number of connections
created for a given host. The default is 0 (unlimited), but if a user
did explicitly impose a low limit (2 is common), all these misplaced
conns could easily add up to the entire limit, causing a deadlock.
This was causing intermittent timeouts in TestTransportMaxConnsPerHost.
The addition of the MaxConnsPerHost support added its own races.
For example, here t.incHostConnCount could increment the count
and return a channel ready for receiving, and then the client would
not receive from it nor ever issue the decrement, because the select
need not evaluate these two cases in order:
select {
case <-t.incHostConnCount(cmKey):
// count below conn per host limit; proceed
case pc := <-t.getIdleConnCh(cm):
if trace != nil && trace.GotConn != nil {
trace.GotConn(httptrace.GotConnInfo{Conn: pc.conn, Reused: pc.isReused()})
}
return pc, nil
...
}
Obviously, unmatched increments are another way to get to a deadlock.
TestTransportMaxConnsPerHost deadlocked approximately 100% of
the time with a small random sleep added between incHostConnCount
and the select:
ch := t.incHostConnCount(cmKey):
time.Sleep(time.Duration(rand.Intn(10))*time.Millisecond)
select {
case <-ch
// count below conn per host limit; proceed
case pc := <-t.getIdleConnCh(cm):
...
}
The limit also did not properly apply to HTTP/2, because of the
decrement being attached to the underlying net.Conn.Close
and net/http not having access to the underlying HTTP/2 conn.
The alternate decrements for HTTP/2 may also have introduced
spurious decrements (discussion in #29889). Perhaps those
spurious decrements or other races caused the other intermittent
non-deadlock failures in TestTransportMaxConnsPerHost,
in which the HTTP/2 phase created too many connections (#31982).
This CL replaces the buggy, racy code with new code that is hopefully
neither buggy nor racy.
Daniel Martí [Tue, 2 Jul 2019 21:56:41 +0000 (23:56 +0200)]
encoding/json: obey SetEscapeHTML in all MarshalJSON cases
It wasn't obeyed in the case where the MarshalJSON method uses a pointer
receiver, and the encoder grabs the address of a value to find that
method. addrMarshalerEncoder is the function that does this work, but it
ignored opts.escapeHTML.
Here's the before and after of the added test case, which was failing
before the fix. Now the two cases are correct and consistent.
Austin Clements [Thu, 27 Jun 2019 22:14:03 +0000 (18:14 -0400)]
cmd/cgo: accept weak dynamic imports
cgo produces dynamic imports for Go binaries by scanning the dynamic
imports table of a binary produced by the system C compiler and
linker. Currently, since it uses elf.File.ImportedSymbols, it only
reads global symbols. Unfortunately, recent versions of lld emit weak
symbol imports for several pthread symbols, which means the cgo tool
doesn't emit dynamic imports for them, which ultimately causes linking
of cgo binaries to fail.
Fix this by using elf.File.DynamicSymbols instead and filtering down
to both global and weak symbols.
Fixes #31912.
Change-Id: If346a7eca6733e3bfa2cccf74a9cda02a3e81d38
Reviewed-on: https://go-review.googlesource.com/c/go/+/184100
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Austin Clements [Thu, 27 Jun 2019 22:03:15 +0000 (18:03 -0400)]
debug/elf: add version information to all dynamic symbols
Currently, File.ImportedSymbols is the only API that exposes the GNU
symbol version information for dynamic symbols. Unfortunately, it also
filters to specific types of symbols, and only returns symbol names.
The cgo tool is going to need symbol version information for more
symbols. In order to support this and make the API more orthogonal,
this CL adds version information to the Symbol type and updates
File.DynamicSymbols to fill this in. This has the downside of
increasing the size of Symbol, but seems to be the most natural API
for exposing this. I also explored 1) adding a method to get the
version information for the i'th dynamic symbol, but we don't use
symbol indexes anywhere else in the API, and it's not clear if this
index would be 0-based or 1-based, and 2) adding a
DynamicSymbolVersions method that returns a slice of version
information that parallels the DynamicSymbols slice, but that's less
efficient to implement and harder to use.
For #31912.
Change-Id: I69052ac3894f7af2aa9561f7085275130e0cf717
Reviewed-on: https://go-review.googlesource.com/c/go/+/184099
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
- fix link for `Time.Format`
- fix closing tag for `go get`
- add links for `runtime.Caller`, `runtime.Callers`
- remove link for `TypedArrayOf` since it has been removed (CL 177537)
Jay Conrod [Mon, 1 Jul 2019 19:25:04 +0000 (15:25 -0400)]
cmd/go: restore @latest behavior and support @upgrade in 'go get'
'go get path@latest' may now downgrade a module required at a
pre-release or pseudo-version newer than the latest released
version. This restores the 1.12 behavior and the ability to easily
roll back from a temporary development version.
'go get path@upgrade' is like @latest but will not downgrade.
If no version suffix is specified ('go get path'), @upgrade is
implied.
Fixes #32846
Change-Id: Ibec0628292ab1c484716a5add0950d7a7ee45f47
Reviewed-on: https://go-review.googlesource.com/c/go/+/184440
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
This CL adds a test for gccgo bug #32901: not all the type
descriptors are registered and thus deduplicated with types
created by reflection. It needs a few levels of indirect imports
to trigger this bug.
Updates #32901.
Change-Id: Idbd89bedd63fea746769f2687f3f31c9767e5ec0
Reviewed-on: https://go-review.googlesource.com/c/go/+/184718 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Change-Id: I99e76c0c12050289be5b353595eb21fbabe7c01e
Reviewed-on: https://go-review.googlesource.com/c/go/+/184597 Reviewed-by: Ian Lance Taylor <iant@golang.org>
cmd/go: fix TestScript/mod_sumdb_golang to avoid assumptions about @v/list
I accidentally fetched an invalid version of rsc.io/quote from
proxy.golang.org, which the proxy then cached and now includes in
https://proxy.golang.org/rsc.io/quote/@v/list.
That causes 'go get rsc.io/quote` to resolve to a different version
depending on whether the proxy is used.
Adjust the test to fetch an explicit version instead, since the choice
of 'latest' is mostly irrelevant to the checksum database logic that
the test is intended to verify.
Updates #32805
Fixes #32900
Change-Id: I075b1f62e8c71545d0fb2dd4bd77ba525fc2a36d
Reviewed-on: https://go-review.googlesource.com/c/go/+/184719
Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Than McIntosh [Wed, 26 Jun 2019 00:24:15 +0000 (20:24 -0400)]
test: add testcase for gccgo compile failure
Test case that caused a compiler crash in gofrontend, related to
exporting inlinable function bodies.
Updates #32778
Change-Id: Iacf1753825d5359da43e5e281189876d4c3dd3c9
Reviewed-on: https://go-review.googlesource.com/c/go/+/183851 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Keith Randall [Wed, 26 Jun 2019 02:24:34 +0000 (22:24 -0400)]
cmd/compile: make duplicate anonymous interface output deterministic
Taking over CL 162240, the original CL hasn't been making progress.
I just took the parts that fix the immediate issue. I left the
signatslice changes out, I don't think they are necessary.
Fixes #30202
Change-Id: I5b347605f0841dd925d5a73150b8bf269fa82464
Reviewed-on: https://go-review.googlesource.com/c/go/+/183852
Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Russ Cox [Sat, 29 Jun 2019 13:26:19 +0000 (09:26 -0400)]
sync: document implementation of Once.Do
It's not correct to use atomic.CompareAndSwap to implement Once.Do,
and we don't, but why we don't is a question that has come up
twice on golang-dev in the past few months.
Add a comment to help others with the same question.
Ian Lance Taylor [Fri, 28 Jun 2019 18:20:15 +0000 (11:20 -0700)]
runtime: use a pipe to wake up signal_recv on Darwin
The implementation of semaphores, and therefore notes, used on Darwin
is not async-signal-safe. The runtime has one case where a note needs
to be woken up from a signal handler: the call to notewakeup in sigsend.
That notewakeup call is only called on a single note, and it doesn't
need the full functionality of notes: nothing ever does a timed wait on it.
So change that one note to use a different implementation on Darwin,
based on a pipe. This lets the wakeup code use the write call, which is
async-signal-safe.
Fixes #31264
Change-Id: If705072d7a961dd908ea9d639c8d12b222c64806
Reviewed-on: https://go-review.googlesource.com/c/go/+/184169
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
Russ Cox [Fri, 28 Jun 2019 00:54:14 +0000 (20:54 -0400)]
crypto/tls: deflake localPipe in tests
The localPipe implementation assumes that every successful net.Dial
results in exactly one successful listener.Accept. I don't believe this
is guaranteed by essentially any operating system. For this test, we're
seeing flakes on dragonfly (#29583).
But see also #19519, flakes due to the same assumption on FreeBSD
and macOS in package net's own tests.
This CL rewrites localPipe to try a few times to get a matching pair
of connections on the dial and accept side.
Russ Cox [Fri, 28 Jun 2019 00:30:28 +0000 (20:30 -0400)]
net: deflake TestVariousDeadlines
TestVariousDeadlines starts a client and server.
The client dials the server, sets a timeout on the connection,
reads from it, gets a timeout error, closes the connection.
The server writes an infinite stream of a's to each connection
it accepts.
The test was trying to run these in lockstep:
run a client dial+read+timeout+close,
wait for server to accept+write+error out on write to closed connection,
repeat.
On FreeBSD 11.2 and less frequently on macOS we see
the test timeout waiting for the server to do its half of
the lockstep dance.
I believe the problem is that the client can do its step
of the dance with such a short timeout that the read,
timeout, and close happens before the server ever returns
from the accept(2) system call. For the purposes of testing
the client-side read timeout, this is fine. But I suspect
that under some circumstances, the "TCP-accepted"
connection does not translate into a "socket-layer-accepted"
connection that triggers a return from accept(2).
That is, the Go server never sees the connection at all.
And the test sits there waiting for it to acknowledge
being done with a connection it never started with.
Fix the problem by not trying to lockstep with the server.
This definitely fixes the flake, since the specific line that
was calling t.Fatal is now deleted.
This exposes a different flake, seen on a trybot run for an
early version of this CL, in which the client's io.Copy does
not stop within the time allotted. The problem now is that
there is no guarantee that a read beyond the deadline with
available data returns an error instead of the available data,
yet the test assumes this guarantee, and in fact the opposite
is usually true - we don't bother checking the deadline unless
the read needs to block. That is, deadlines don't cut off a
flood of available data, yet this test thinks they do.
This CL therefore also changes the server not to send an
infinite flood of data - don't send any data at all - so that
the read deadline is guaranteed to be exercised.
Russ Cox [Fri, 28 Jun 2019 05:42:08 +0000 (01:42 -0400)]
runtime: fix pprof cpu profile corruption on arm/mips/mipsle
CL 42652 changed the profile handler for mips/mipsle to
avoid recording a profile when in atomic functions, for fear
of interrupting the 32-bit simulation of a 64-bit atomic with
a lock. The profile logger itself uses 64-bit atomics and might
deadlock (#20146).
The change was to accumulate a count of dropped profile events
and then send the count when the next ordinary event was sent:
CL 117057 extended this behavior to include GOARCH == "arm".
Unfortunately, the inserted cpuprof.addLostAtomic64 differs from
the original cpuprof.add in that it neglects to acquire the lock
protecting the profile buffer.
This has caused a steady stream of flakes on the arm builders
for the past 12 months, ever since CL 117057 landed.
This CL moves the lostAtomic count into the profile buffer and
then lets the existing addExtra calls take care of it, instead of
duplicating the locking logic.
Dmitri Shuralyov [Thu, 27 Jun 2019 00:07:14 +0000 (20:07 -0400)]
cmd/doc: provide working directory to build.Import calls
The current cmd/doc implementation uses go/build.Import in a few
places to check whether a package is findable and importable.
go/build has limited support for finding packages in modules,
but to do so, build.Import requires knowing the source directory
to use when performing the lookup (so it can find the go.mod file).
Otherwise, it only looks inside the GOPATH workspace.
Start passing the current working directory to build.Import calls,
so that it can correctly look for packages in modules when in cmd/doc
is executed in module mode.
Before this change, cmd/doc in module mode could mistakenly find and
use a package in the GOPATH workspace, instead of the current module.
Since the result of os.Getwd is needed in even more places, assign it
to a local variable in parseArgs now.
Fixes #28992
Updates #26504
Change-Id: I7571618e18420d2d3b3890cc69ade2d97b1962bf
Reviewed-on: https://go-review.googlesource.com/c/go/+/183991
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diogo Pinela [Thu, 27 Jun 2019 21:19:15 +0000 (22:19 +0100)]
doc: fix spec links in Go 1.13 release notes
When reading tip.golang.org/doc/go1.13.html, the spec links in
the "Changes to the language" section should point to the updated
spec, not the old one.
Robert Griesemer [Thu, 27 Jun 2019 20:26:51 +0000 (13:26 -0700)]
text/scanner: remove AllowDigitSeparator flag again
The scanner was changed to accept the new Go number literal syntax
of which separators are a part. Making them opt-in is inconsistent
with the rest of the changes. For comparison, the strconv package
also accepts the new number literals including separators with the
various conversion routines, if no explicit number base is given.
Jay Conrod [Thu, 27 Jun 2019 19:28:08 +0000 (15:28 -0400)]
go/build: don't check if srcDir in GOPATH when deciding to use modules
go/build.Context.Import loads package information using 'go list' when
in module mode. It does this when GO111MODULE is not "off", there is a
go.mod file in any parent directory, and neither the path nor the
source directory are in GOROOT. Import no longer checks whether the
source directory is in GOPATH if GO111MODULE=auto or unset.
Also fixed subdirectory checks that did not handle relative source
directory paths. mod_gobuild_import should have failed when we changed
the meaning of GO111MODULE=auto but didn't because of this.
Fixes #32799
Change-Id: Ic5210b7e00cb58f91ea9455b67b49d5aed4eec63
Reviewed-on: https://go-review.googlesource.com/c/go/+/184098
Run-TryBot: Jay Conrod <jayconrod@google.com> Reviewed-by: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Bryan C. Mills [Wed, 26 Jun 2019 19:00:01 +0000 (15:00 -0400)]
misc/cgo/errors: align code snippets in ptr_test.go
Change-Id: Ic3e2819617375df653116d21d7361a46085250d5
Reviewed-on: https://go-review.googlesource.com/c/go/+/183986 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Bryan C. Mills [Wed, 26 Jun 2019 19:57:25 +0000 (15:57 -0400)]
doc/go1.13: make cmd/go paragraphs more concise
Looking at the live release notes on tip.golang.org, the Modules
section is much more verbose than the other sections.
To some extent that's to be expected, but too much detail in the
release notes might discourage folks from consulting the actual
documentation. Ensure that topics have clear links and omit
unnecessary details.
Change-Id: I1ccbc1697fccaf7ca7094c606bd11696c46d87f0
Reviewed-on: https://go-review.googlesource.com/c/go/+/183987
Run-TryBot: Bryan C. Mills <bcmills@google.com> Reviewed-by: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Austin Clements [Wed, 26 Jun 2019 18:35:05 +0000 (14:35 -0400)]
sync: only check for successful PopHeads in long mode
In TestPoolDequeue it's surprisingly common for the queue to stay
nearly empty the whole time and for a racing PopTail to happen in the
window between the producer doing a PushHead and doing a PopHead. In
short mode, there are only 100 PopTail attempts. On linux/amd64, it's
not uncommon for this to fail 50% of the time. On linux/arm64, it's
not uncommon for this to fail 100% of the time, causing the test to
fail.
This CL fixes this by only checking for a successful PopTail in long
mode. Long mode makes 200,000 PopTail attempts, and has never been
observed to fail.
Austin Clements [Wed, 26 Jun 2019 17:20:05 +0000 (13:20 -0400)]
sync: make TestPoolDequeue termination condition more robust
TestPoolDequeue creates P-1 consumer goroutines and 1 producer
goroutine. Currently, if a consumer goroutine pops the last value from
the dequeue, it sets a flag that stops all consumers, but the producer
also periodically pops from the dequeue and doesn't set this flag.
Hence, if the producer were to pop the last element, the consumers
will continue to run and the test won't terminate. This CL fixes this
by also setting the termination flag in the producer.
I believe it's impossible for this to happen right now because the
producer only pops after pushing an element for which j%10==0 and the
last element is either 999 or 1999999, which means it should never try
to pop after pushing the last element. However, we shouldn't depend on
this reasoning.