- 19 Oct, 2017 8 commits
-
-
Artyom Pervukhin authored
Change-Id: I094af156e7b8c31af3162d943a8c61268803ab89 Reviewed-on: https://go-review.googlesource.com/71830Reviewed-by:
Gabriel Aszalos <gabriel.aszalos@gmail.com> Reviewed-by:
Ian Lance Taylor <iant@golang.org> Run-TryBot: Gabriel Aszalos <gabriel.aszalos@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Russ Cox authored
On modern Unix systems it is basically impossible for a multithreaded program to open a binary for write, close it, and then fork+exec that same binary. So don't write the binary if we're going to fork+exec it. This fixes the ETXTBSY flakes. Fixes #22220. See also #22315. Change-Id: I6be4802fa174726ef2a93d5b2f09f708da897cdb Reviewed-on: https://go-review.googlesource.com/71570 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
griesemer authored
Issue #15550 is clearly an esoteric case but the spec was silent about it and we had diverging implementations. By making `iota` and index that is relative to the respective constant declaration, nested const declarations won't affect outer values of `iota`. cmd/compile and go/types already follow this semantics. Fixes #15550. Change-Id: If138189e3ea4373f8ba50ac6fb1d219b481f8698 Reviewed-on: https://go-review.googlesource.com/71750Reviewed-by:
Rob Pike <r@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Jed Denlea authored
golang.org/cl/37258 was committed to fix issue #16146. This patch seemed intent to allow at most one dangling byte. But, as implemented, many more bytes may actually slip through. This is because the LZW layer creates a bufio.Reader which will itself consume data beyond the end of the LZW stream, and this isn't accounted for anywhere. This change means to avoid the allocation of the bufio.Reader by making blockReader implement io.ByteReader. Further, it adds a close() method which detects extra data in the block sequence. To avoid any regressions with poorly encoded GIFs which may have worked accidentally, there are no restrictions on how many extra bytes may exist in the final full sub-block that contained LZW data. If the end of the LZW stream happened to align with the end of a sub-block, at most one more sub-block with a length of 1 byte may exist before the block terminator. This change aims to be at least as performant as the prior implementation. But the primary gain is avoiding the allocation of a bufio.Reader per frame: name old time/op new time/op delta Decode-8 276µs ± 0% 275µs ± 2% ~ (p=0.690 n=5+5) name old speed new speed delta Decode-8 55.9MB/s ± 0% 56.3MB/s ± 2% ~ (p=0.690 n=5+5) name old alloc/op new alloc/op delta Decode-8 49.2kB ± 0% 44.8kB ± 0% -9.10% (p=0.008 n=5+5) name old allocs/op new allocs/op delta Decode-8 269 ± 0% 267 ± 0% -0.74% (p=0.008 n=5+5) Change-Id: Iec4f9b895561ad52266313fbc73ec82c070c3349 Reviewed-on: https://go-review.googlesource.com/68350 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by:
Nigel Tao <nigeltao@golang.org>
-
Austin Clements authored
When building test binaries, we build one archive with all of the test sources and a second archive with the generated test package main and link them together. If the test sources are themselves in package main and the test was compiled with non-default compiler flags, then both archives will contain a go.cuinfo.producer.main symbol, leading to a duplicate symbol failure. This has been causing test build failures on darwin-arm-a1428ios, darwin-arm64-a1549ios, linux-amd64-noopt, android-arm-wiko-fever, and android-arm64-wiko-fever since CL 71430 added this symbol. This CL should fix the build. Change-Id: I69051c846e7c0d97395a865a361cae07f411f9ad Reviewed-on: https://go-review.googlesource.com/71771 Run-TryBot: Austin Clements <austin@google.com> Reviewed-by:
Than McIntosh <thanm@google.com> Reviewed-by:
Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Alex Brainman authored
CL 70310 dropped TODO while moving code. Add TODO back, so we do not forget. Change-Id: I3599ac02743bd35fb9556fdc238e9c72cf7f718f Reviewed-on: https://go-review.googlesource.com/71590Reviewed-by:
David Crawshaw <crawshaw@golang.org>
-
griesemer authored
Fixes #22258. Change-Id: I43e68f1cf3163e1a041ebff2734ff2cb7943f695 Reviewed-on: https://go-review.googlesource.com/71431Reviewed-by:
Rob Pike <r@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Ian Lance Taylor authored
No test because at present it is never called in a way that fails. When #22114 is implemented, failure will be possible. Not including this change in that work because this change is separable and clearly correct. Updates #22114 Change-Id: I81eb9eec8800e8082d918c0e5fb71282f538267e Reviewed-on: https://go-review.googlesource.com/71751 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by:
Joe Tsai <joetsai@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
- 18 Oct, 2017 10 commits
-
-
Heschi Kreinick authored
StructField.ByteSize is almost always unset; document that Type.Size() is the place to look. The dwarf package doesn't spend much effort teaching you DWARF, so I don't know what level of handholding is appropriate. Still, no harm in a little comment. Closes #21093 Change-Id: I0ed8cad2fa18e10a47d264ff16c176d603d6033c Reviewed-on: https://go-review.googlesource.com/71671 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Keith Randall <khr@golang.org>
-
Wei Congrui authored
Fixes #21800 Change-Id: I6c61d3543f28e9951b2a219b3c7298077b38f29e Reviewed-on: https://go-review.googlesource.com/66210 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Robert Griesemer <gri@golang.org>
-
Austin Clements authored
This adds a whitelisted subset of compiler flags to the DW_AT_producer DWARF attribute of each package compilation unit DIE. This is common practice in DWARF and can help debuggers determine the quality of the produced debugging information. Fixes #22168. Change-Id: I1b994ef2262aa9b88b68eb6e883695d1103acc58 Reviewed-on: https://go-review.googlesource.com/71430Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Austin Clements authored
Currently mmap returns an unsafe.Pointer that encodes OS errors as values less than 4096. In practice this is okay, but it borders on being really unsafe: for example, the value has to be checked immediately after return and if stack copying were ever to observe such a value, it would panic. It's also not remotely idiomatic. Fix this by making mmap return a separate pointer value and error, like a normal Go function. Updates #22218. Change-Id: Iefd965095ffc82cc91118872753a5d39d785c3a6 Reviewed-on: https://go-review.googlesource.com/71270 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Heschi Kreinick authored
Set DW_AT_variable_parameter on DW_TAG_formal_parameters that are actually return values. variable_parameter is supposed to indicate inout parameters, but Go doesn't really have those, and DWARF doesn't have explicit support for multiple return values. This seems to be the best compromise, especially since the implementation of the two is very similar -- both are stack slots. Fixes #21100 Change-Id: Icebabc92b7b397e0aa00a7237478cce84ad1a670 Reviewed-on: https://go-review.googlesource.com/71670 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
David Chase <drchase@google.com>
-
Tom Bergan authored
Updates http2 to x/net/http2 git rev 1087133bc4a for: http2: reject DATA frame before HEADERS frame https://golang.org/cl/56770 http2: respect peer's SETTINGS_MAX_HEADER_LIST_SIZE in ClientConn https://golang.org/cl/29243 http2: reset client stream after processing response headers https://golang.org/cl/70510 Also updated TestRequestLimit_h2 as the behavior changed slightly due to https://golang.org/cl/29243. Fixes #13959 Fixes #20521 Fixes #21466 Change-Id: Iac659694f3a48b8bd485546a4f96a932e3056026 Reviewed-on: https://go-review.googlesource.com/71611 Run-TryBot: Tom Bergan <tombergan@google.com> Reviewed-by:
Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
Fixes Darwin 386 build. It turns out that the Darwin pthread_create function saves the SSE registers, and therefore requires an aligned stack. This worked before https://golang.org/cl/70530 because the stack sizes were chosen to leave the stack aligned. Change-Id: I911a9e8dcde4e41e595d5ef9b9a1ca733e154de6 Reviewed-on: https://go-review.googlesource.com/71432Reviewed-by:
Robert Griesemer <gri@golang.org> Reviewed-by:
Austin Clements <austin@google.com>
-
Dhananjay Nakrani authored
Fixes #13265. Change-Id: I792eb4ee26bef8a56e279e23f9802cb39019e0d0 Reviewed-on: https://go-review.googlesource.com/34929Reviewed-by:
Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Tim Cooper authored
Fixes #22292 Change-Id: I016e5f2b8624a6ebaf11a693a0f6d94d7b0d3f92 Reviewed-on: https://go-review.googlesource.com/71550Reviewed-by:
Daniel Theophanes <kardianos@gmail.com>
-
Russ Cox authored
More generally I'm concerned about these tests using $GOROOT/src/cmd/go as scratch space, especially combined wtih tg.parallel() - it's easy to believe some other test might inadvertently also try to write x.exe about the same time. This CL only solves the "didn't clean up x.exe" problem and leaves for another day the "probably shouldn't write to cmd/go at all" problem. Fixes #22266. Change-Id: I651534d70e2d360138e0373fb4a316081872550b Reviewed-on: https://go-review.googlesource.com/71410 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
- 17 Oct, 2017 16 commits
-
-
griesemer authored
Nowhere in the spec did we mention the import path for package unsafe. Now we do. Fixes #22308. Change-Id: Ifd42c873188e898c597cdee4284e7a9d234a9282 Reviewed-on: https://go-review.googlesource.com/71373Reviewed-by:
Ian Lance Taylor <iant@golang.org> Reviewed-by:
Rob Pike <r@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
Tim Cooper authored
Change-Id: I9d723e49bf2cabf97a09e29e46fd2c426845fd1d Reviewed-on: https://go-review.googlesource.com/71470Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Daniel Theophanes authored
This reverts commit 897080d5. Reason for revert: Fails to fix all the locking issues. Updates #21117 Change-Id: I6fc9cb7897244d6e1af78c089a2bf383258ec049 Reviewed-on: https://go-review.googlesource.com/71450Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Jay Conrod authored
Fixed an error that occurred in atomic mode. cover adds a global variable declaration that forces sync/atomic to be used. fixDirectives was confused by this declaration since it has an invalid position. These declarations are now skipped. Fixes #22309 Change-Id: I84f5fec13ef847fca35ad49f7704fb93b60503e0 Reviewed-on: https://go-review.googlesource.com/71351 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Robert Griesemer <gri@golang.org>
-
Gabriel Aszalos authored
Simplifies the switch statement in the isZeroValue function by merging the case branches. Change-Id: I5b27939b62808dadac0cef632567b17e0e2b9a1d Reviewed-on: https://go-review.googlesource.com/71390 Run-TryBot: Gabriel Aszalos <gabriel.aszalos@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
griesemer authored
When an opening "{" of a block is missing and after advancing we find a closing "}", it's likely better to assume the end of the block. Fixed and removed TODO. Change-Id: I20c9b4ecca798933a7cd4cbf21185bd4ca04f5f7 Reviewed-on: https://go-review.googlesource.com/71291Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
griesemer authored
Change-Id: I2c2571b33603f0fd0ba5a79400da7b845d246b8c Reviewed-on: https://go-review.googlesource.com/71290Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
Ben Shi authored
Current suffix check is based on instruction, which is not very accurate. For example, "MOVW.S R1, R2" is valid, but "MOVW.S $0xaaaaaaaa, R1" and "MOVW.P CPSR, R9" are not. This patch fixes the above kinds of issues by checking suffix based on []optab. And also more test cases are added. fixes #20509 Change-Id: Ibad91be72c78eefa719412a83b4d44370d2202a8 Reviewed-on: https://go-review.googlesource.com/70910 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Cherry Zhang <cherryyz@google.com>
-
David du Colombier authored
CL 46037 and CL 46038 implemented termination of locked OS threads when the goroutine exits. However, this behavior leads to crashes of Go programs using runtime.LockOSThread on Plan 9. This is notably the case of the os/exec and net packages. This change disables termination of locked OS threads on Plan 9. Updates #22227. Change-Id: If9fa241bff1c0b68e7e9e321e06e5203b3923212 Reviewed-on: https://go-review.googlesource.com/71230Reviewed-by:
Austin Clements <austin@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
David du Colombier authored
CL 46033 added a "template thread" mechanism to allow creation of thread with a known-good state from a thread of unknown state. However, we are experiencing issues on Plan 9 with programs using the os/exec and net package. These package are relying on runtime.LockOSThread. Updates #22227. Change-Id: I85b71580a41df9fe8b24bd8623c064b6773288b0 Reviewed-on: https://go-review.googlesource.com/70231 Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Austin Clements <austin@google.com>
-
Wei Xiao authored
Optimize arm64 CALLFN wrapper with LDP/STP instructions. This provides a significant speedup for big argument copy. Benchmark results for reflect: name old time/op new time/op delta Call-8 79.0ns ± 4% 73.6ns ± 4% -6.78% (p=0.000 n=10+10) CallArgCopy/size=128-8 80.5ns ± 0% 60.3ns ± 0% -25.06% (p=0.000 n=10+9) CallArgCopy/size=256-8 119ns ± 2% 67ns ± 1% -43.59% (p=0.000 n=8+10) CallArgCopy/size=1024-8 524ns ± 1% 99ns ± 1% -81.03% (p=0.000 n=10+10) CallArgCopy/size=4096-8 837ns ± 0% 231ns ± 1% -72.42% (p=0.000 n=9+9) CallArgCopy/size=65536-8 13.6µs ± 6% 3.1µs ± 1% -77.38% (p=0.000 n=10+10) PtrTo-8 12.9ns ± 0% 13.1ns ± 3% +1.86% (p=0.000 n=10+10) FieldByName1-8 28.7ns ± 2% 28.6ns ± 2% ~ (p=0.408 n=9+10) FieldByName2-8 928ns ± 4% 946ns ± 8% ~ (p=0.326 n=9+10) FieldByName3-8 5.35µs ± 5% 5.32µs ± 5% ~ (p=0.755 n=10+10) InterfaceBig-8 2.57ns ± 0% 2.57ns ± 0% ~ (all equal) InterfaceSmall-8 2.57ns ± 0% 2.57ns ± 0% ~ (all equal) New-8 9.09ns ± 1% 8.83ns ± 1% -2.81% (p=0.000 n=10+9) name old alloc/op new alloc/op delta Call-8 0.00B 0.00B ~ (all equal) name old allocs/op new allocs/op delta Call-8 0.00 0.00 ~ (all equal) name old speed new speed delta CallArgCopy/size=128-8 1.59GB/s ± 0% 2.12GB/s ± 1% +33.46% (p=0.000 n=10+9) CallArgCopy/size=256-8 2.14GB/s ± 2% 3.81GB/s ± 1% +78.02% (p=0.000 n=8+10) CallArgCopy/size=1024-8 1.95GB/s ± 1% 10.30GB/s ± 0% +427.99% (p=0.000 n=10+9) CallArgCopy/size=4096-8 4.89GB/s ± 0% 17.69GB/s ± 1% +261.87% (p=0.000 n=9+9) CallArgCopy/size=65536-8 4.84GB/s ± 6% 21.36GB/s ± 1% +341.67% (p=0.000 n=10+10) Change-Id: I775d88b30c43cb2eda1d0612ac15e6d283e70beb Reviewed-on: https://go-review.googlesource.com/70570Reviewed-by:
Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
-
Ian Lance Taylor authored
Unify the 386 entry point code as much as possible. The main function could not be unified because on Windows 386 it is called _main. Putting main in asm_386.s caused multiple definition errors when using the external linker. Add the _lib entry point to various operating systems. A future CL will enable c-archive/c-shared mode for those targets. Fix _rt0_386_windows_lib_go--it was passing arguments as though it were amd64. Change-Id: Ic73f1c95cdbcbea87f633f4a29bbc218a5db4f58 Reviewed-on: https://go-review.googlesource.com/70530 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Austin Clements <austin@google.com>
-
Ian Lance Taylor authored
Also fix 64-bit DWARF to read a 64-bit abbrev offset in the compilation unit. Change-Id: Idc22e59ffb354d58e9973b62fdbd342acf695859 Reviewed-on: https://go-review.googlesource.com/71171Reviewed-by:
Austin Clements <austin@google.com>
-
griesemer authored
- checking for the correct closing token leads to slightly better behavior for some randomly bogus programs - removed `switch` in favor of an `if` statement Follow-up on https://go-review.googlesource.com/c/go/+/71250. Change-Id: I47f6c47b43baf790907f55ed97a947661687a9db Reviewed-on: https://go-review.googlesource.com/71252Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
Tim Cooper authored
Adds the two range control actions "break" and "continue". They act the same as the Go keywords break and continue, but are simplified in that only the innermost range statement can be broken out of or continued. Fixes #20531 Change-Id: I4412b3bbfd4dadb0ab74ae718e308c1ac7a0a1e9 Reviewed-on: https://go-review.googlesource.com/66410Reviewed-by:
Rob Pike <r@golang.org>
-
griesemer authored
Fine-tune skipping of tokens after missing closing parentheses in lists. Fixes #22164. Change-Id: I575d86e21048cd40340a2c08399e8b0deec337cf Reviewed-on: https://go-review.googlesource.com/71250 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
- 16 Oct, 2017 6 commits
-
-
Jay Conrod authored
Previously, cover printed directives (//go: comments) near the top of the file unless they were in doc comments. However, directives frequently apply to specific definitions, and they are not written in doc comments to prevent godoc from printing them. Moving all directives to the top of the file affected semantics of tests. With this change, directives are kept together with the following top-level declarations. Only directives that occur after all top-level declarations are moved. Fixes #22022 Change-Id: Ic5c61c4d3969996e4ed5abccba0989163789254c Reviewed-on: https://go-review.googlesource.com/69630 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Robert Griesemer <gri@golang.org> Reviewed-by:
Alan Donovan <adonovan@google.com>
-
Filippo Valsorda authored
name old time/op new time/op delta ModSqrt224_3Mod4-4 153µs ± 2% 154µs ± 1% ~ (p=0.548 n=5+5) ModSqrt5430_3Mod4-4 776ms ± 2% 791ms ± 2% ~ (p=0.222 n=5+5) Fixes #22265 Change-Id: If233542716e04341990a45a1c2b7118da6d233f7 Reviewed-on: https://go-review.googlesource.com/70832 Run-TryBot: Filippo Valsorda <hi@filippo.io> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Robert Griesemer <gri@golang.org>
-
Alessandro Arzilli authored
Use TEXT pseudo-instruction to adjust SP instead of a SUB instruction so that the assembler knows how to fill in the pcsp table and the frame description entry correctly. Updates #21569 Change-Id: I436c840b2af99bbb3042ecd38a7d7c1ab4d7372a Reviewed-on: https://go-review.googlesource.com/70937 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Ian Lance Taylor <iant@golang.org>
-
Ian Lance Taylor authored
The code was commented out by https://golang.org/cl/13234050 in 2013. Let's just remove it. Change-Id: I46ae1f07386719e991458e782d236214c40bdce1 Reviewed-on: https://go-review.googlesource.com/70770 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Austin Clements <austin@google.com>
-
Daniel Martí authored
Use them to replace if/else chains with at least three comparisons, where the code becomes clearly simpler. Passes toolstash -cmp on std cmd. Change-Id: Ic98aa3905944ddcab5aef5f9d9ba376853263d94 Reviewed-on: https://go-review.googlesource.com/70934 Run-TryBot: Daniel Martí <mvdan@mvdan.cc> Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Emmanuel Odeke <emm.odeke@gmail.com> Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-
Cherry Zhang authored
The write barrier insertion has moved to the SSA backend's writebarrier pass. There is still needwritebarrier function left in the frontend. This function is used in two places: - fncall, which is called in ascompatet, which is called in walking OAS2FUNC. For OAS2FUNC, in order pass we've already created temporaries, and there is no write barrier for the assignments of these temporaries. - updateHasCall, which updates the HasCall flag of a node. the HasCall flag is then used in - fncall, mentioned above. - ascompatet. As mentioned above, this is an assignment to a temporary, no write barrier. - reorder1, which is always called with a list produced by ascompatte, which is a list of assignments to stack, which have no write barrier. - vmatch1, which is called in oaslit with r.Op as OSTRUCTLIT, OARRAYLIT, OSLICELIT, or OMAPLIT. There is no write barrier in those literals. Therefore, the needwritebarrier function is unnecessary. This CL removes it. Passes "toolstash -cmp" on std cmd. Updates #17583. Change-Id: I4b87ba8363d6583e4282a9e607a9ec8ce3ab124a Reviewed-on: https://go-review.googlesource.com/43640 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by:
Matthew Dempsky <mdempsky@google.com>
-