]> Cypherpunks repositories - gostls13.git/log
gostls13.git
3 years agoruntime: use RDTSCP for instruction stream serialized read of TSC
Martin Möhrmann [Mon, 23 Aug 2021 11:53:22 +0000 (13:53 +0200)]
runtime: use RDTSCP for instruction stream serialized read of TSC

To measure all instructions having been completed before reading
the time stamp counter with RDTSC an instruction sequence that
has instruction stream serializing properties which guarantee
waiting until all previous instructions have been executed is
needed. This does not necessary mean to wait for all stores to
be globally visible.

This CL aims to remove vendor specific logic for determining the
instruction sequence with CPU feature flag checks that are
CPU vendor independent.

For intel LFENCE has the wanted properties at least
since it was introduced together with SSE2 support.

On AMD instruction stream serializing LFENCE is supported by setting
an MSR C001_1029[1]=1 on AMD family 10h/12h/14h/15h/16h/17h processors.
AMD family 0Fh/11h processors support LFENCE as serializing always.
AMD plans support for this MSR and access to this bit for all future processors.
Source: https://developer.amd.com/wp-content/resources/Managing-Speculation-on-AMD-Processors.pdf

Reading the MSR to determine LFENCE properties is not always possible
or reliable (hypervisors). The Linux kernel is relying on serializing
LFENCE on AMD CPUs since a commit in July 2019: https://lkml.org/lkml/2019/7/22/295
and the MSR C001_1029 to enable serialization has been set by default
with the Spectre v1 mitigations.

Using an MFENCE on AMD is waiting on previous instructions having been executed
but in addition also flushes store buffers.

To align the serialization properties without runtime detection
of CPU manufacturers we can use the newer RDTSCP instruction which
waits until all previous instructions have been executed.

RDTSCP is available on Intel since around 2008 and on AMD CPUs since
around 2006. Support for RDTSCP can be checked independently
of manufacturer by checking CPUID bits.

Using RDTSCP is the default in Linux to read TSC in program order
when the instruction is available.
https://github.com/torvalds/linux/blob/e22ce8eb631bdc47a4a4ea7ecf4e4ba499db4f93/arch/x86/include/asm/msr.h#L231

Change-Id: Ifa841843b9abb2816f8f0754a163ebf01385306d
Reviewed-on: https://go-review.googlesource.com/c/go/+/344429
Reviewed-by: Keith Randall <khr@golang.org>
Trust: Martin Möhrmann <martin@golang.org>
Run-TryBot: Martin Möhrmann <martin@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agointernal/buildcfg: change GOEXPERIMENT to always return non-empty string
Matthew Dempsky [Mon, 23 Aug 2021 18:40:56 +0000 (11:40 -0700)]
internal/buildcfg: change GOEXPERIMENT to always return non-empty string

Rather than returning "", we now return "," (which is a no-op). This
ensures that the returned string always overrides DefaultGOEXPERIMENT.

This fixes a bootstrapping issue where GOROOT_BOOTSTRAP was built with
"GOEXPERIMENT=fieldtrack ./make.bash". cmd/dist sets GOEXPERIMENT=none
during bootstrapping, which was causing cmd/go to set GOEXPERIMENT=""
when executing cmd/compile; but then cmd/compile ignores the
environment variable (because it's empty) and instead uses
DefaultGOEXPERIMENT.

Fixes #47921.

Change-Id: I657ff6cdfb294a94f6a2f58c306ceed7f104416b
Reviewed-on: https://go-review.googlesource.com/c/go/+/344511
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>
3 years agocmd/compile: do not mark arrays used for map initialization noalg
Martin Möhrmann [Tue, 6 Jul 2021 19:45:02 +0000 (21:45 +0200)]
cmd/compile: do not mark arrays used for map initialization noalg

Arrays marked noalg are created by the compiler to hold keys and values
to initialize map literals. The ssa backend creates a pointer type for
the array type when creating an OpAddr while processing the loop that
initializes the map from the arrays. The pointer type does not inherit
the noalg property but points to the noalg array type.

This causes values created through reflect of types that should be
equal to compare unequal because the noalg and alg type might be
compared and these are not the same.

A similar problem occurred in #32595 for argument arrays of defer structs.

Created #47904 to track improve noalg handling to be able to
reintroduce this optimization again.

Fixes #47068

Change-Id: I87549342bd404b98d71a3c0f33e3c169e9d4efc8
Reviewed-on: https://go-review.googlesource.com/c/go/+/344349
Trust: Martin Möhrmann <martin@golang.org>
Run-TryBot: Martin Möhrmann <martin@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
3 years agocmd/compile: don't emit write barriers for offsets of global addresses
zikaeroh [Fri, 30 Jul 2021 04:15:52 +0000 (21:15 -0700)]
cmd/compile: don't emit write barriers for offsets of global addresses

Currently, write barriers aren't emitted for global addresses, but they
are emitted for addresses offset of global addresses.

This CL changes IsGlobalAddr to recognize offsets of global addresses
as globals too, removing write barriers for staticuint64s based
addresses. The logic added is the same as used in IsStackAddr.

Updates #37612

Change-Id: I537579f85b9ad02987d94f3ee0b4508b90097959
Reviewed-on: https://go-review.googlesource.com/c/go/+/342129
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/compile: always remove receiver type from instantiated method values
Keith Randall [Fri, 20 Aug 2021 23:15:53 +0000 (16:15 -0700)]
cmd/compile: always remove receiver type from instantiated method values

If a type T has a method foo, then

var t T
var i interface{} = t.foo

The type of foo is a method type, but the type of t.foo should be a
standard function type. Make sure we always do that conversion.

Fixes #47775

Change-Id: I464ec792196b050aba1914e070a4ede34bfd0bfa
Reviewed-on: https://go-review.googlesource.com/c/go/+/343881
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agocmd/compile: copy captured dictionary var to local var
Keith Randall [Fri, 20 Aug 2021 17:19:28 +0000 (10:19 -0700)]
cmd/compile: copy captured dictionary var to local var

When starting a closure that needs a dictionary, copy the closure
variable to a local variable. This lets child closures capture that
dictionary variable correctly.

This is a better fix for #47684, which does not cause problems
like #47723.

Fixes #47723
Update #47684

Change-Id: Ib5d9ffc68a5142e28daa7d0d75683e7a35508540
Reviewed-on: https://go-review.googlesource.com/c/go/+/343871
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agospec: add example for method value in case of embedded method
Cuong Manh Le [Sun, 22 Aug 2021 05:07:14 +0000 (12:07 +0700)]
spec: add example for method value in case of embedded method

So it's clear to the reader that if "M" is a promoted method from
embedded field "T", then "x.M" will be expanded to "x.T.M" during the
evaluation of the method value.

Fixes #47863

Change-Id: Id3b82127a2054584b6842c487f6e15c3102dc9fe
Reviewed-on: https://go-review.googlesource.com/c/go/+/344209
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
3 years agocmd/compile: fixing 15.go for -G=3
Dan Scales [Sun, 22 Aug 2021 20:34:22 +0000 (13:34 -0700)]
cmd/compile: fixing 15.go for -G=3

Required two changes:

 - avoid creating a closure in the case where the actual receiver of an
   embedded method is not generic even though the base operand of the
   selector is generic. This is similar to the test suggested by wayne
   zuo - I thought it was clear in buildClosure, and easier to comment.

 - Propagate //go:nointerface to base generic methods and then to
   instantiations.

Change-Id: If30c834e4223c2639b7f7e74d44e6087aa9ccd76
Reviewed-on: https://go-review.googlesource.com/c/go/+/344251
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Wayne Zuo <wdvxdr1123@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Dan Scales <danscales@google.com>

3 years agoreflect: fix memmove for big endian cases with new ABI
Lynn Boger [Fri, 20 Aug 2021 12:01:50 +0000 (07:01 -0500)]
reflect: fix memmove for big endian cases with new ABI

Some memmoves in reflect/value.go for copying arguments
related to the new ABI were using the address of the target
or source instead of using IntArgRegAddr or FloatArgRegAddr
to adjust the address for big endian.

This was found when testing patches for ppc64 and fixes the
failures that were found.

Change-Id: I119aa090a2a8eb859020ff1a1736107a6d0b76f1
Reviewed-on: https://go-review.googlesource.com/c/go/+/343869
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
Trust: Lynn Boger <laboger@linux.vnet.ibm.com>

3 years agogo/types: use TypeList in the Inferred struct
Robert Findley [Fri, 20 Aug 2021 14:19:12 +0000 (10:19 -0400)]
go/types: use TypeList in the Inferred struct

This is for consistency with how we report TArgs elsewhere, and in case
we ever want to share an internal slice with inference reporting.

Change-Id: Ia8b705a155f4f82bd8da8dc2457289810f875f5e
Reviewed-on: https://go-review.googlesource.com/c/go/+/343934
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: use a TypeList type to hold type arguments
Robert Findley [Thu, 19 Aug 2021 18:06:08 +0000 (14:06 -0400)]
go/types: use a TypeList type to hold type arguments

This resolves an asymmetry between the TParams and TArgs APIs, and
reduces the size of the Named struct at the cost of some additional nil
checks.

While at it, move TParamList and TypeList to a new file:typelists.go,
and change TParamList to access the tparams slice directly in At. There
is no reason to guard against a nil receiver, as accessing an index on
the empty slice will panic anyway.

Change-Id: I9b65247e06c697a57a4efe40c3390e0faff91441
Reviewed-on: https://go-review.googlesource.com/c/go/+/343933
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: use []*TypeParam rather than []*TypeName type param lists
Robert Findley [Thu, 19 Aug 2021 17:31:36 +0000 (13:31 -0400)]
go/types: use []*TypeParam rather than []*TypeName type param lists

Making this change improves type safety slightly, and avoids many
internal type assertions.

Change-Id: I26519b0e57068e944e8243983ae90553d79e59c2
Reviewed-on: https://go-review.googlesource.com/c/go/+/343932
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: add the TypeParam.Obj method
Robert Findley [Wed, 18 Aug 2021 17:22:58 +0000 (13:22 -0400)]
go/types: add the TypeParam.Obj method

Users should be able to access the type name associated with a type
parameter.

Change-Id: I495c3b4377f9d4807b1e78ad341e573d4d3c7bff
Reviewed-on: https://go-review.googlesource.com/c/go/+/343931
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: move to an opaque environment for Instantiate
Robert Findley [Wed, 18 Aug 2021 17:22:38 +0000 (13:22 -0400)]
go/types: move to an opaque environment for Instantiate

To match the API proposal, switch the first argument to Instantiate to
an opaque Environment handle, though for now this handle is
unimplemented.

Change-Id: I6207f0beafdf8497587abdad37db92f927db29b6
Reviewed-on: https://go-review.googlesource.com/c/go/+/343930
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: return an error from Instantiate
Robert Findley [Mon, 16 Aug 2021 20:40:57 +0000 (16:40 -0400)]
go/types: return an error from Instantiate

This is a port of CL 342152 to go/types. Additionally, a panic was
removed from interface substitution, which is a fix from CL 333155 that
was previously missed.

A check for a nil Checker was also removed from types2.instantiate,
since check must not be nil in that method.

Change-Id: I4ea6bdccbd50ea2008ee6d870f702bee5cdd5a8e
Reviewed-on: https://go-review.googlesource.com/c/go/+/342671
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agoruntime: remove unused cpu architecture feature variables from binaries
Martin Möhrmann [Sat, 24 Oct 2020 03:54:46 +0000 (05:54 +0200)]
runtime: remove unused cpu architecture feature variables from binaries

On amd64 this reduces go binary sizes by 176 bytes due to not referencing
internal/cpu.ARM64 and internal/cpu.ARM.

Change-Id: I8e4f31e2b1939b05eec2148b44d7cff7e0aeb30e
Reviewed-on: https://go-review.googlesource.com/c/go/+/344329
Trust: Martin Möhrmann <martin@golang.org>
Run-TryBot: Martin Möhrmann <martin@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/go: fix long test builders
Cuong Manh Le [Mon, 23 Aug 2021 02:31:54 +0000 (09:31 +0700)]
cmd/go: fix long test builders

CL 343732 enabled -G=3 by default. The types2 typechecker uses slighly
different error message format for language feature constraint.

The old typechecker format:

vendor/example.net/need117/need117.go:5:16: cannot convert s (type []byte) to type *[4]byte:
conversion of slices to array pointers only supported as of -lang=go1.17

The new format:

vendor/example.net/need117/need117.go:5:17: conversion of slices to array pointers only supported as of -lang=go1.17

caused the long test builders failed.

This CL fixes the test by relaxing the regext pattern a bit, so it can
match both the format.

Change-Id: I1c4acaa9e34b6c08dccbbc3ce7a99d4cd79f748a
Reviewed-on: https://go-review.googlesource.com/c/go/+/344212
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agostrings: smarter growth of temporal buffer and avoid copying on return
Ignacio Hagopian [Tue, 17 Aug 2021 23:52:00 +0000 (23:52 +0000)]
strings: smarter growth of temporal buffer and avoid copying on return

The implementation for single strings had two optimization opportunities:
1. Grow the temporary buffer by known size before appending.
2. Avoid a full copy of the result since the underlying buffer won't be mutated afterward.
Both things were leveraged by using a Builder instead of a byte slice.

Relevant benchmark results:

        name           old time/op    new time/op    delta
        SingleMatch-8    32.0µs ± 3%    26.1µs ± 3%  -18.41%  (p=0.000 n=9+10)

        name           old speed      new speed      delta
        SingleMatch-8   469MB/s ± 3%   574MB/s ± 3%  +22.56%  (p=0.000 n=9+10)

        name           old alloc/op   new alloc/op   delta
        SingleMatch-8    81.3kB ± 0%    49.0kB ± 0%  -39.67%  (p=0.000 n=10+10)

        name           old allocs/op  new allocs/op  delta
        SingleMatch-8      19.0 ± 0%      11.0 ± 0%  -42.11%  (p=0.000 n=10+10)

Change-Id: I23af56a15875206c0ff4ce29a51bec95fd48bb11
GitHub-Last-Rev: 403cfc3c2794b5da27792c51999417a2a052b365
GitHub-Pull-Request: golang/go#47766
Reviewed-on: https://go-review.googlesource.com/c/go/+/343089
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Robert Griesemer <gri@golang.org>

3 years agogo/types: report argument type for unsafe.OffsetOf
Robert Griesemer [Sun, 22 Aug 2021 22:21:29 +0000 (15:21 -0700)]
go/types: report argument type for unsafe.OffsetOf

This is a clean port of CL 344252 to go/types.

For #47895.

Change-Id: I48cbb97ec28fcfb4fdf483594be9d29426c117ac
Reviewed-on: https://go-review.googlesource.com/c/go/+/344254
Trust: Robert Griesemer <gri@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agocmd/compile/internal/types2: enable TestSelection API test
Robert Griesemer [Sun, 22 Aug 2021 21:55:12 +0000 (14:55 -0700)]
cmd/compile/internal/types2: enable TestSelection API test

This test was never fully ported from go/types. Implement
a conversion function from syntax.Pos to string index so
that the test can be enabled again.

Also renamed the local variable syntax to segment to avoid
confusion with the syntax package.

Change-Id: I1b34e50ec138403798efb14c828545780f565507
Reviewed-on: https://go-review.googlesource.com/c/go/+/344253
Trust: Robert Griesemer <gri@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agoos/user: simplify test skip for plan9
Kir Kolyshkin [Wed, 23 Jun 2021 03:19:57 +0000 (20:19 -0700)]
os/user: simplify test skip for plan9

There's no need to specifically check for runtime.GOOS as there's
already a generic mechanism for that.

Change-Id: I7125443ead456548bd503c5e71cd56e9eb30b446
Reviewed-on: https://go-review.googlesource.com/c/go/+/330750
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
3 years agocmd/compile/internal/types2: report argument type for unsafe.OffsetOf
Robert Griesemer [Sun, 22 Aug 2021 21:09:46 +0000 (14:09 -0700)]
cmd/compile/internal/types2: report argument type for unsafe.OffsetOf

Before parameterized types, unsafe.OffsetOf was always evaluating to
a constant. With parameterized types, the result may be a run-time
value, and unsafe.OffsetOf(x.f) is a call that is recorded. Also
record the argument x.f.

Fixes #47895.

Change-Id: Ia3da25028d4865d7295ce7990c7216bffe9e7c72
Reviewed-on: https://go-review.googlesource.com/c/go/+/344252
Trust: Robert Griesemer <gri@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agomath/big: clarified doc string for SetMantExp
Robert Griesemer [Sun, 22 Aug 2021 19:11:02 +0000 (12:11 -0700)]
math/big: clarified doc string for SetMantExp

Fixes #47879.

Change-Id: I35efb5fc65c4f1eb1b45918f95bbe1ff4039950e
Reviewed-on: https://go-review.googlesource.com/c/go/+/344249
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
3 years agoruntime: use asmcgocall_no_g when calling sigprocmask on openbsd
Joel Sing [Sun, 30 May 2021 14:18:54 +0000 (00:18 +1000)]
runtime: use asmcgocall_no_g when calling sigprocmask on openbsd

sigprocmask is called from sigsave, which is called from needm. As such,
sigprocmask has to be able to run with no g. For some reason we do not
currently trip this on current libc platforms, but we do hit it on
openbsd/mips64 with external linking.

Updates #36435

Change-Id: I4dfae924245c5f68cc012755d6485939014898a3
Reviewed-on: https://go-review.googlesource.com/c/go/+/334879
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
3 years agoreflect: add example for FieldByIndex
Mostafa Solati [Mon, 8 Jun 2020 17:34:09 +0000 (22:04 +0430)]
reflect: add example for FieldByIndex

Change-Id: I539453e50ab85ec1b023bc9e329e6451c674e0c9
Reviewed-on: https://go-review.googlesource.com/c/go/+/236937
Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agoruntime: fix buckHashSize duplication
Dmitry Vyukov [Sat, 12 Dec 2020 15:46:01 +0000 (16:46 +0100)]
runtime: fix buckHashSize duplication

We have a constant for 179999, don't duplicate it.

Change-Id: Iefb9c4746f6dda2e08b42e3c978963198469ee8c
Reviewed-on: https://go-review.googlesource.com/c/go/+/277375
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
Run-TryBot: Michael Pratt <mpratt@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Pratt <mpratt@google.com>

3 years agostrconv: reject surrogate halves in Unquote
Joe Tsai [Fri, 20 Aug 2021 19:50:02 +0000 (12:50 -0700)]
strconv: reject surrogate halves in Unquote

Unquote implements unescaping a "single-quoted, doubled-quoted, or
backquoted Go string literal". Therefore, it should reject anything
that the Go specification explicitly forbids.

The section on "Rune literals" explicitly rejects rune values
"above 0x10FFFF and surrogate halves". We properly checked for
the previous condition, but were failing to check for the latter.

In general, "r > utf8.MaxRune" is probably the wrong check,
while !utf8.ValidRune(r) is the more correct check.
We make changes to both UnquoteChar and appendEscapedRune
to use the correct check. The change to appendEscapedRune
is technically a noop since callers of that function already
guarantee that the provided rune is valid.

Fixes #47853

Change-Id: Ib8977e56b91943ec8ada821b8d217b5e9a66f950
Reviewed-on: https://go-review.googlesource.com/c/go/+/343877
Trust: Joe Tsai <joetsai@digital-static.net>
Run-TryBot: Joe Tsai <joetsai@digital-static.net>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
3 years agocmd/compile: absorb NEG into branch when possible on riscv64
Joel Sing [Tue, 17 Aug 2021 09:09:33 +0000 (19:09 +1000)]
cmd/compile: absorb NEG into branch when possible on riscv64

We can end up with this situation due to our equality tests being based on
'SEQZ (SUB x y)' - if x is a zero valued constant, 'SUB x y' can be converted
to 'NEG x'. When used with a branch the SEQZ can be absorbed, leading to
'BNEZ (NEG x)' where the NEG is redundant.

Removes around 1700 instructions from the go binary on riscv64.

Change-Id: I947a080d8bf7d2d6378ab114172e2342ce2c51db
Reviewed-on: https://go-review.googlesource.com/c/go/+/342850
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/compile: convert branch with zero to more optimal branch zero on riscv64
Joel Sing [Tue, 17 Aug 2021 09:01:52 +0000 (19:01 +1000)]
cmd/compile: convert branch with zero to more optimal branch zero on riscv64

Convert BLT and BGE with a zero valued constant to BGTZ/BLTZ/BLEZ/BGEZ as
appropriate.

Removes over 4,500 instructions from the go binary on riscv64.

Change-Id: Icc266e968b126ba04863ec88529630a9dd44498b
Reviewed-on: https://go-review.googlesource.com/c/go/+/342849
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/compile: sort regalloc switch by architecture
Joel Sing [Thu, 15 Jul 2021 16:36:52 +0000 (02:36 +1000)]
cmd/compile: sort regalloc switch by architecture

Also tweak comment for the arm64 case.

Change-Id: I073405bd2acf901dcaaf33a034a84b6a09dd4a83
Reviewed-on: https://go-review.googlesource.com/c/go/+/334869
Trust: Joel Sing <joel@sing.id.au>
Reviewed-by: Meng Zhuo <mzh@golangcn.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
3 years agogo/types: don't override x.mode before using it
Robert Griesemer [Fri, 20 Aug 2021 04:35:57 +0000 (21:35 -0700)]
go/types: don't override x.mode before using it

Changing the mode of x before using the old value is clearly wrong.
And x is not needed anymore afterward so besides being misplaced,
the assignment is not needed in the first place.

Tested manually as it's a bit complicated to set up a test.

Needs to be back-ported to 1.17.

Fixes #47777.

Change-Id: I06f1fa9443eb98009b4276f566d557fd52f1d6d3
Reviewed-on: https://go-review.googlesource.com/c/go/+/343809
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
3 years agocmd/compile: enable -G=3 by default
Matthew Dempsky [Thu, 19 Aug 2021 22:53:13 +0000 (15:53 -0700)]
cmd/compile: enable -G=3 by default

This CL changes cmd/compile's -G flag's default from 0 to 3, which
enables use of the new types2 type checker and support for type
parameters. The old type checker is still available with
-gcflags=all=-G=0.

The CL also updates the regress test harness to account for the change
in default behavior (e.g., to expect known types2 changes/failures).
However, the -G=0 mode is still being tested for now.

Copy of CL 340914 by danscales@, minus the cmd/internal/objabi.AbsFile
change (handled instead by CL 343731) and rebased to master branch.

Updates #43651.

Change-Id: I1f62d6c0a3ff245e15c5c0e8f3d922129fdd4f29
Reviewed-on: https://go-review.googlesource.com/c/go/+/343732
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
3 years agotest/typeparam: add a test case for issue46591
korzhao [Fri, 20 Aug 2021 18:51:51 +0000 (02:51 +0800)]
test/typeparam: add a test case for issue46591

Fixes #46591

Change-Id: I4875092ecd7760b0cd487e793576ef7a9a569a0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/343970
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/internal/buildid: reject empty id
Russ Cox [Fri, 20 Aug 2021 19:20:10 +0000 (15:20 -0400)]
cmd/internal/buildid: reject empty id

The loop that makes progress assumes that after matching an id
you should advance len(id) bytes in the file. If id is the empty string,
then it will match and advance 0 bytes repeatedly.

0-byte ids are not really build IDs, so just reject it outright.

Fixes #47852.

Change-Id: Ie44a3a51dec22e2f68fb72d54ead91be98000cfe
Reviewed-on: https://go-review.googlesource.com/c/go/+/344049
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agotest: enable regabi test on arm64
Cuong Manh Le [Thu, 19 Aug 2021 14:02:49 +0000 (21:02 +0700)]
test: enable regabi test on arm64

CL 324890 turned on register ABI by default on ARM64, causing neither
live.go nor live_regabi.go is run on ARM64.

This CL enables live_regabi.go test for ARM64.

Change-Id: I0c483a38b761c5a6f1fa9a5b3324b5da64907e61
Reviewed-on: https://go-review.googlesource.com/c/go/+/343531
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
3 years agocmd/compile/internal/syntax: add PosBase.Trimmed
Matthew Dempsky [Thu, 19 Aug 2021 22:52:53 +0000 (15:52 -0700)]
cmd/compile/internal/syntax: add PosBase.Trimmed

With types2, some syntax.PosBases need to be constructed from export
data, which must only contain "trimmed" filenames (i.e., that they've
already been made absolute and undergone -trimpath processing).
However, it's not safe to apply trimming to a filename multiple times,
and in general we can't distinguish trimmed from untrimmed filenames.

This CL resolves this by adding a PosBase.Trimmed boolean so we can
distinguish whether the associated filename has been trimmed yet. This
is a bit hacky, but is the least bad solution I've come up with so
far.

This unblocks enabling -G=3 by default.

Change-Id: I7383becfb704680a36f7603e3246af38b21f100b
Reviewed-on: https://go-review.googlesource.com/c/go/+/343731
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agonet/http: fix typo in header.go
HuanCheng [Fri, 20 Aug 2021 16:26:26 +0000 (00:26 +0800)]
net/http: fix typo in header.go

Change-Id: Ia6df881badf9a704c7f56967404d37e230b88a09
Reviewed-on: https://go-review.googlesource.com/c/go/+/343969
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Damien Neil <dneil@google.com>

3 years agogo/types: change Checker.verify to return an error
Robert Findley [Mon, 16 Aug 2021 20:15:09 +0000 (16:15 -0400)]
go/types: change Checker.verify to return an error

This is a port of CL 342151 to go/types, adjusted for errors and
positions. Checker.sprintf was refactored to facilitate formatting
error messages with a nil Checker.

Change-Id: Ib2e5c942e55edaff7b5e77cf68a72bad70fea0b9
Reviewed-on: https://go-review.googlesource.com/c/go/+/342670
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: no need to validate substituted instances
Robert Findley [Mon, 16 Aug 2021 20:03:59 +0000 (16:03 -0400)]
go/types: no need to validate substituted instances

This is a straightforward port of CL 342150 to go/types.

Change-Id: I7363e4642ade7ab30ca822a2be71f4d2804cc4a9
Reviewed-on: https://go-review.googlesource.com/c/go/+/342669
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: consolidate verification logic
Robert Findley [Mon, 16 Aug 2021 20:01:42 +0000 (16:01 -0400)]
go/types: consolidate verification logic

This is a straightforward port of CL 342149 to go/types.

Change-Id: I468c5154b7545b7816bb3f240b8db91e7a1fd3f6
Reviewed-on: https://go-review.googlesource.com/c/go/+/342488
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agogo/types: clean up panics in instantiation
Robert Findley [Mon, 16 Aug 2021 19:59:08 +0000 (15:59 -0400)]
go/types: clean up panics in instantiation

This is a straightforward port of CL 341862 to go/types.

Change-Id: I4214c08d2889e2daf40254385656c6beed79571d
Reviewed-on: https://go-review.googlesource.com/c/go/+/342487
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agoarchive/zip: prevent preallocation check from overflowing
Roland Shoemaker [Wed, 18 Aug 2021 18:49:29 +0000 (11:49 -0700)]
archive/zip: prevent preallocation check from overflowing

If the indicated directory size in the archive header is so large that
subtracting it from the archive size overflows a uint64, the check that
the indicated number of files in the archive can be effectively
bypassed. Prevent this from happening by checking that the indicated
directory size is less than the size of the archive.

Thanks to the OSS-Fuzz project for discovering this issue and to
Emmanuel Odeke for reporting it.

Fixes #47801
Fixes CVE-2021-39293

Change-Id: Ifade26b98a40f3b37398ca86bd5252d12394dd24
Reviewed-on: https://go-review.googlesource.com/c/go/+/343434
Trust: Roland Shoemaker <roland@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
3 years agocrypto/rand, internal/syscall/unix: don't use getentropy on iOS
Tobias Klauser [Thu, 19 Aug 2021 14:36:38 +0000 (16:36 +0200)]
crypto/rand, internal/syscall/unix: don't use getentropy on iOS

CL 302489 switched crypto/rand to use getentropy on darwin, however this
function is not available on iOS. Enable getentropy only on macOS and
disable it on iOS.

Fixes #47812

Change-Id: Ib7ba5d77346aee87904bb93d60cacc845f5c0089
Reviewed-on: https://go-review.googlesource.com/c/go/+/343609
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/compile: use typeAndStr directly in signatslice
Cuong Manh Le [Thu, 19 Aug 2021 10:01:26 +0000 (17:01 +0700)]
cmd/compile: use typeAndStr directly in signatslice

Currently, we store *types.Type in signatslice, then convert it to
typeAndStr during write runtime type process.

Instead, we can just store typeAndStr directly in signatslice when
adding type to signatset. Not a big win, but simplify the code a bit.

Change-Id: Ie1c8cfa5141da32b6ec3ce5844ba150d2765fe90
Reviewed-on: https://go-review.googlesource.com/c/go/+/343529
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
3 years agocmd/asm/internal/arch: adds the missing type check for arm64 SXTB extension
eric fang [Mon, 16 Aug 2021 06:41:15 +0000 (06:41 +0000)]
cmd/asm/internal/arch: adds the missing type check for arm64 SXTB extension

Operands of memory type do not support SXTB extension. This CL adds this
missing check.

Change-Id: I1fa438dd314fc8aeb889637079cc67b538e83a89
Reviewed-on: https://go-review.googlesource.com/c/go/+/342769
Reviewed-by: eric fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: eric fang <eric.fang@arm.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Michael Knyszek <mknyszek@google.com>

3 years agocmd/internal/obj/arm64: disable the pre and post index formats for pseudo registers
eric fang [Mon, 16 Aug 2021 07:25:29 +0000 (07:25 +0000)]
cmd/internal/obj/arm64: disable the pre and post index formats for pseudo registers

When using the FP or SP pseudo-register to load or store, pre-index and post-index formats
are not supported because the RSP and pseudo registers are not allowed to be modified in this
way. This CL deletes the related entries in optab and adds a few test cases.

Change-Id: Ie30d27d0e7b959242f0e6298b950489669d07989
Reviewed-on: https://go-review.googlesource.com/c/go/+/342770
Reviewed-by: eric fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Run-TryBot: eric fang <eric.fang@arm.com>
Trust: Michael Knyszek <mknyszek@google.com>

3 years agocmd/dist: remove unused variables
Manlio Perillo [Fri, 21 May 2021 20:21:09 +0000 (22:21 +0200)]
cmd/dist: remove unused variables

Remove the unused defaultcflags and defaultldflags variables.

Reported by staticcheck.

Change-Id: Icc42f2e670496dbe2ffb26abe25128d8e53e2a6d
Reviewed-on: https://go-review.googlesource.com/c/go/+/321931
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
3 years agosyscall: add SyscallN
Changkun Ou [Thu, 22 Jul 2021 15:50:42 +0000 (17:50 +0200)]
syscall: add SyscallN

This CL adds a new syscall.SyscallN API.

The proposal discussion also suggests the API should not only for
Windows but other platforms. However, the existing API set already
contain differences between platforms, hence the CL only implements
the Windows platform.

Moreover, although the API offers variadic parameters, the permitted
parameters remains up to a limit, which is selected as 42, and arguably
large enough.

Fixes #46552

Change-Id: I66b49988a304d9fc178c7cd5de46d0b75e167a4f
Reviewed-on: https://go-review.googlesource.com/c/go/+/336550
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Jason A. Donenfeld <Jason@zx2c4.com>

3 years agocmd/compile: prevent duplicated works in WriteRuntimeTypes
Cuong Manh Le [Tue, 8 Jun 2021 12:28:45 +0000 (19:28 +0700)]
cmd/compile: prevent duplicated works in WriteRuntimeTypes

While processing signatset, the entry is deleted immediately after being
pushed to signatslice. Then calling writeType may add the same type
to signatset again. That would add more works, though not a big impact
to the performace, since when writeType is guarded by s.Siggen() check.

Instead, we should keep the entry in signatset, so written type will
never be added again.

This change does not affect compiler performace, but help debugging
issue like one in #46386 easier.

Change-Id: Iddafe773885fa21cb7003ba27ddf9554fc3f297d
Reviewed-on: https://go-review.googlesource.com/c/go/+/326029
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
3 years agoreflect: add test for invalid conversion
Keith Randall [Wed, 18 Aug 2021 16:38:19 +0000 (09:38 -0700)]
reflect: add test for invalid conversion

Conversion between slices with different element types is not allowed.
Previously (1.8 <= goversion <= 1.16), this conversion was allowed
if the base types were from different packages and had identical names.

Update #47785

Change-Id: I359de5b6fe3ff35bdbf9ab5a13902a0f820cac66
Reviewed-on: https://go-review.googlesource.com/c/go/+/343329
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
3 years agocmd/compile/internal/types2: return an error from Instantiate
Robert Findley [Fri, 13 Aug 2021 19:52:12 +0000 (15:52 -0400)]
cmd/compile/internal/types2: return an error from Instantiate

Change Instantiate to be a function (not a method) and return an error.
Introduce an ArgumentError type to report information about which type
argument led to an error during verification.

This resolves a few concerns with the current API:
 - The Checker method set was previously just Files. It is somewhat odd
   to add an additional method for instantiation. Passing the checker as
   an argument seems cleaner.
 - pos, posList, and verify were bound together. In cases where no
   verification is required, the call site was somewhat cluttered.
 - Callers will likely want to access structured information about why
   type information is invalid, and also may not have access to position
   information. Returning an argument index solves both these problems;
   if callers want to associate errors with an argument position, they
   can do this via the resulting index.

We may want to make the first argument an opaque environment rather than
a Checker.

Change-Id: I3bc56d205c13d832b538401a4c91d3917c041225
Reviewed-on: https://go-review.googlesource.com/c/go/+/342152
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agoio: unexport internal methods
Roger Peppe [Wed, 11 Aug 2021 11:14:41 +0000 (12:14 +0100)]
io: unexport internal methods

The methods on the pipe type don't need to be exported. Doing so sets
a bad precedent that it's OK to export methods to indicate an internal
public API.  That's not a good idea in general, because exported methods
increase cognitive load when reading code: the reader needs to consider
whether the exported method might be used via some external interface
or reflection.

Change-Id: Ib13f1b3f9fe0ff251628f31b776182a0953268ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/341409
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
Reviewed-by: Joe Tsai <joetsai@digital-static.net>
Trust: Daniel Martí <mvdan@mvdan.cc>

3 years agoarchive/tar: unexport internal methods
Roger Peppe [Wed, 11 Aug 2021 11:50:34 +0000 (12:50 +0100)]
archive/tar: unexport internal methods

Many of the methods inside the archive/tar package don't need to be
exported. Doing so sets a bad precedent that it's OK to export methods
to indicate an internal public API.  That's not a good idea in general,
because exported methods increase cognitive load when reading code:
the reader needs to consider whether the exported method might be used
via some external interface or reflection.

This CL should have no externally visible behaviour changes at all.

Change-Id: I94a63de5e6a28e9ac8a283325217349ebce4f308
Reviewed-on: https://go-review.googlesource.com/c/go/+/341410
Reviewed-by: Joe Tsai <joetsai@digital-static.net>
Trust: Joe Tsai <joetsai@digital-static.net>
Trust: Michael Knyszek <mknyszek@google.com>

3 years agocmd/compile: add support for //go:nointerface for -G=3
Matthew Dempsky [Wed, 18 Aug 2021 21:36:45 +0000 (14:36 -0700)]
cmd/compile: add support for //go:nointerface for -G=3

This is used within Google's internal code repo, so getting it working
is a pre-req for enabling -G=3 by default.

Change-Id: Icbc570948c852ca09cdb2a59f778140f620244b2
Reviewed-on: https://go-review.googlesource.com/c/go/+/343429
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
3 years agocmd/compile/internal/dwarfgen: use src.Pos.Rel{Filename,Line,Col} consistently
Matthew Dempsky [Wed, 18 Aug 2021 21:42:12 +0000 (14:42 -0700)]
cmd/compile/internal/dwarfgen: use src.Pos.Rel{Filename,Line,Col} consistently

It appears that this code predates golang.org/cl/96535, which added
RelCol to support /*line*/ directives.

Change-Id: Ib79cebc1be53af706e84e8799eeea81ef8c81c8b
Reviewed-on: https://go-review.googlesource.com/c/go/+/343430
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
3 years agocmd/compile: only use dictionaries for conversions to type parameters
Keith Randall [Tue, 17 Aug 2021 17:40:44 +0000 (10:40 -0700)]
cmd/compile: only use dictionaries for conversions to type parameters

Conversions to regular concrete types should not be rewritten during
stenciling.

Fixes #47740

Change-Id: I2b45e22f962dcd2e18bd6cc876ebc0f850860822
Reviewed-on: https://go-review.googlesource.com/c/go/+/342989
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
3 years agocmd/compile/internal/types2: change Checker.verify to return an error
Robert Findley [Fri, 13 Aug 2021 17:15:15 +0000 (13:15 -0400)]
cmd/compile/internal/types2: change Checker.verify to return an error

In preparation for upcoming API changes, change the internal API for
verification of type arguments to return an error and argument index,
and use this to lift up error reporting into Instantiate.

Change-Id: I88b1e64dd9055c4c20c0db49c96c79c5da894450
Reviewed-on: https://go-review.googlesource.com/c/go/+/342151
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agocmd/compile/internal/types2: no need to validate substituted instances
Robert Findley [Fri, 13 Aug 2021 19:03:14 +0000 (15:03 -0400)]
cmd/compile/internal/types2: no need to validate substituted instances

When substituting a type instance, we rely on the instance being
expanded and do not call validType, so there is need to depend on
subster.pos for error reporting or to use subst.check for creating the
new Named type. Errors will be reported for the unsubstituted instance.

This is a superficial change, but justifies some later simplification
where we don't have access to pos or check.

Change-Id: I1f3f12aa245d821512c6242ad829c940f20afae4
Reviewed-on: https://go-review.googlesource.com/c/go/+/342150
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/compile: only sort methods/interfaces during export for -d=unifiedquirks
Matthew Dempsky [Wed, 18 Aug 2021 20:10:04 +0000 (13:10 -0700)]
cmd/compile: only sort methods/interfaces during export for -d=unifiedquirks

These sorts are only important for 'toolstash -cmp' testing of unified
IR against -G=0 mode, but they were added before I added
-d=unifiedquirks to allow altering small "don't care" output details
like this.

This CL should help mitigate issues with #44195 until package
objectpath is updated and deployed.

Change-Id: Ia3dcf359481ff7abad5ddfca8e673fd2bb30ae01
Reviewed-on: https://go-review.googlesource.com/c/go/+/343390
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agocmd/compile/internal/types2: consolidate verification logic
Robert Findley [Fri, 13 Aug 2021 17:52:55 +0000 (13:52 -0400)]
cmd/compile/internal/types2: consolidate verification logic

Change an internal call of instantiateLazy to call Instantiate, so that
we can consolidate the logic for invoking verification.

This made verification of signatures lazy, which is not necessary but
should be harmless.

Change-Id: I2e59b04ac859e08c2e2910ded3c183093d1e34a7
Reviewed-on: https://go-review.googlesource.com/c/go/+/342149
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agocmd/compile/internal/types2: clean up panics in instantiation
Robert Findley [Fri, 13 Aug 2021 16:03:29 +0000 (12:03 -0400)]
cmd/compile/internal/types2: clean up panics in instantiation

Clean up a few issues related to panicking during invalid instantiation.
 - Panic early in instantiateLazy when check == nil and verify == true.
   Otherwise, we would panic at check.later.
 - Always panic when check == nil and verify == true, even if targs is
   of incorrect length. This is more consistent behavior.
 - Lift the check for len(posList) <= len(targs) out of
   Checker.instantiate. This is the only reason why posList is passed to
   that function, and doing this allows us to eliminate posList from
   instance. At this point instance is close to being unnecessary, so
   update a TODO to this effect.

Change-Id: Id5f44cbb1a5897aef10ce2a573aa78acd7ae4026
Reviewed-on: https://go-review.googlesource.com/c/go/+/341862
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agocmd/go/internal/work/exec: throw an error when buildP is negative
Yuki Osaki [Wed, 18 Aug 2021 05:05:55 +0000 (05:05 +0000)]
cmd/go/internal/work/exec: throw an error when buildP is negative

Fixed a problem where an error would not occur
when a negative value was specified for the p flag.

`go build -p=0`
now should throw an error.

this is my first pr to this project.
If there's anything I'm missing, please let me know 🙏
Fixes #46686

Change-Id: I3b19773ef095fad0e0419100d317727c2268699a
GitHub-Last-Rev: e5c57804d9995f5c858aa42d9de21b25de246eb5
GitHub-Pull-Request: golang/go#47360
Reviewed-on: https://go-review.googlesource.com/c/go/+/336751
Reviewed-by: Jay Conrod <jayconrod@google.com>
Trust: Jay Conrod <jayconrod@google.com>
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/go/testdata/script: fix test script added by CL 334873
Tobias Klauser [Wed, 18 Aug 2021 07:03:44 +0000 (09:03 +0200)]
cmd/go/testdata/script: fix test script added by CL 334873

CL 334873 added the net/http import to the wrong section in
test_vet.txt. Correct this to fix the longtest builders.

Change-Id: If28409ad1c2ed3bd3a2922fc20d5e534c30fa249
Reviewed-on: https://go-review.googlesource.com/c/go/+/343169
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
3 years agopath/filepath: change IsAbs to treat \\host\share as an absolute path
Yasuhiro Matsumoto [Thu, 15 Jul 2021 14:53:47 +0000 (23:53 +0900)]
path/filepath: change IsAbs to treat \\host\share as an absolute path

Fixes #47123

Change-Id: I2226b8a9ea24cd88171acfbaffea2566309416de
Reviewed-on: https://go-review.googlesource.com/c/go/+/334809
Trust: Alex Brainman <alex.brainman@gmail.com>
Trust: Hajime Hoshi <hajimehoshi@gmail.com>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
3 years agoruntime: use RDCYCLE for cputicks on riscv64
Meng Zhuo [Tue, 6 Jul 2021 07:17:07 +0000 (07:17 +0000)]
runtime: use RDCYCLE for cputicks on riscv64

Use RDCYCLE instruction instead of RDTIME emulation

Change-Id: Id7b3de42a36d2d1b163c39cc79870eee7c840ad5
Reviewed-on: https://go-review.googlesource.com/c/go/+/332954
Trust: Meng Zhuo <mzh@golangcn.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
3 years agocmd/internal/obj/arm64: don't use REGTMP when moving C_AACON2 to a register
eric fang [Mon, 21 Jun 2021 08:17:35 +0000 (08:17 +0000)]
cmd/internal/obj/arm64: don't use REGTMP when moving C_AACON2 to a register

MOVD $C_AACON2(Rf), Rt is encoded as ADD $C_AACON2_high_12_bits, Rf, REGTMP +
ADD $C_AACON2_low_12_bits, REGTMP, Rt. Actually REGTMP is not necessary here,
we can use Rt directly, so it becomes ADD $C_AACON2_high_12_bits, Rf, Rt +
ADD $C_AACON2_low_12_bits, Rt, Rt.

Change-Id: I90b7718b5fb0ab9f3ea28511f42946a6bdccfef3
Reviewed-on: https://go-review.googlesource.com/c/go/+/329751
Reviewed-by: eric fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Trust: eric fang <eric.fang@arm.com>
Run-TryBot: eric fang <eric.fang@arm.com>

3 years agocmd/internal/obj/arm64: fix the encoding error when operating with ZR
eric fang [Mon, 21 Jun 2021 03:04:42 +0000 (03:04 +0000)]
cmd/internal/obj/arm64: fix the encoding error when operating with ZR

Some arm64 instructions accept ZR as its destination register, such as MOVD,
AND, ADD etc. although it doesn't seem to make much sense, but we should
make sure the encoding is correct. However there exists some encoding mistakes
in the current assembler, they are:
1, 'MOVD $1, ZR' is incorrectly encoded as 'MOVD $1, ZR' + '0x00000000'.
2, 'AND $1, R2, ZR' is incorrectly encoded as 'MOVD $1, R27' + 'AND R27, R2, ZR' +
   '0x00000000'.
3, 'AND $1, ZR' is incorrectly encoded as 'AND $1, ZR, RSP'.

Obviously the first two encoding errors can cause SIGILL, and the third one will
rewrite RSP.

At the same time, I found some weird encodings but they don't cause errors.
4, 'MOVD $0x0001000100010001, ZR' is encoded as 'MOVW $1, ZR' + 'MOVKW $(1<<16), ZR'.
5, 'AND $0x0001000100010001, R2, ZR' is encoded as 'MOVD $1, R27' + 'MOVK $(1<<16), R27' +
   'MOVK $(1<<32), R27'.

Some of these issues also apply to 32-bit versions of these instructions.

These problems are not very complicated, and are basically caused by the improper
adaptation of the class of the constant to the entry in the optab. But the relationship
between these constant classes is a bit complicated, so I don't know how to deal with
issue 4 and 5, because they won't cause errors, so this CL didn't deal with them.

This CL fixed the first three issues.
Issue 1:
  before: 'MOVD $1, ZR' => 'MOVD $1, ZR' + '0x00000000'.
  after:  'MOVD $1, ZR' => 'MOVD $1, ZR'.
Issue 2:
  before: 'AND $1, R2, ZR' => 'MOVD $1, R27' + 'AND R27, R2, ZR' + '0x00000000'.
  after:  'AND $1, R2, ZR' => 'ORR $1, ZR, R27' + 'AND R27, R2, ZR'.
Issue 3:
  before: 'AND $1, ZR' => 'AND $1, ZR, RSP'.
  after:  'AND $1, ZR' => 'ORR $1, ZR, R27' + 'AND R27, ZR, ZR'.

Change-Id: I3c889079229f847b863ad56c88966be12d947202
Reviewed-on: https://go-review.googlesource.com/c/go/+/329750
Reviewed-by: eric fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Trust: eric fang <eric.fang@arm.com>
Run-TryBot: eric fang <eric.fang@arm.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/link: do not use GO_LDSO when cross compile
Cherry Mui [Tue, 17 Aug 2021 21:21:03 +0000 (17:21 -0400)]
cmd/link: do not use GO_LDSO when cross compile

GO_LDSO is a setting that is set when the toolchain is build. It
only makes sense to use it on the host platform. Do not use it
when targetting a different platform.

In the past it was not a problem as GO_LDSO was almost always
unset. Now, with CL 301989 it is almost always set (maybe we want
to revisit it).

Fixes #47760.

Change-Id: I2704b9968781f46e2d2f8624090db19689b1a32f
Reviewed-on: https://go-review.googlesource.com/c/go/+/343010
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
3 years agocmd/go: make mod init disallow invalid major version suffixes
Paschalis Tsilias [Tue, 2 Feb 2021 13:25:21 +0000 (15:25 +0200)]
cmd/go: make mod init disallow invalid major version suffixes

This CL reuses the SplitPathVersion function from the module package to
detect invalid major version suffixes and return a relevant error
message along with a suggested fix.

Fixes #44052
Fixes #46085

Change-Id: I6c06f31a134e864a1d9b6e00c048ca1c59b4365e
Reviewed-on: https://go-review.googlesource.com/c/go/+/288712
Reviewed-by: Jay Conrod <jayconrod@google.com>
Trust: Jay Conrod <jayconrod@google.com>
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/go/internal/test: add an all sentinel to -vet
Colin Arnott [Sun, 18 Jul 2021 08:12:23 +0000 (08:12 +0000)]
cmd/go/internal/test: add an all sentinel to -vet

The vet flag either accepts a list of vets to run, or a distinguished
value, off, to disable vet during test. By default only 100% reliable
checks are run, thus there is no way to run all vets. This change adds
another distinguished value, all, that runs every vet, by passing no
flags.

During development it was discovered that parsing of the -vet flag value
is problematic, in that it accepts deprecated flags like -all. The root
cause is detailed in #47309, but for now passing distinguished values
(all, off) and anything else returns an error.

Fixes #45963

Change-Id: I39fafb7d717dad51b507d560b3f6e604510a2881
Reviewed-on: https://go-review.googlesource.com/c/go/+/334873
Trust: Than McIntosh <thanm@google.com>
Trust: Jay Conrod <jayconrod@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
3 years agocmd/go: go test flag -failfast should be cacheable
kezhao [Wed, 28 Jul 2021 02:06:10 +0000 (02:06 +0000)]
cmd/go: go test flag -failfast should be cacheable

Add failfast to cacheable list and update docs

Fixes #47355

Change-Id: I75b371c45b80a3b179ff070b7b9d092a504380c0
GitHub-Last-Rev: abe61fd48c01fab4ef5ea5db013dcce4ead09c6f
GitHub-Pull-Request: golang/go#47371
Reviewed-on: https://go-review.googlesource.com/c/go/+/337229
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agogo/types: fix method lookup for type-parameter based types
Robert Griesemer [Tue, 17 Aug 2021 18:55:39 +0000 (11:55 -0700)]
go/types: fix method lookup for type-parameter based types

This is a clean port of CL 342990.

Fixes #47747.

Change-Id: I2e86fb8b70d42a220ac1ba25798d9e58227ba5f6
Reviewed-on: https://go-review.googlesource.com/c/go/+/342991
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
3 years agocmd/compile/internal/types2: fix method lookup for type-parameter based types
Robert Griesemer [Tue, 17 Aug 2021 18:45:05 +0000 (11:45 -0700)]
cmd/compile/internal/types2: fix method lookup for type-parameter based types

Pointers to type parameters don't have methods, but pointers to
defined types whose underlying types are type parameters may have
methods. Fix the respective test.

For #47747.

Change-Id: I1de47be094ed9297f0e7782538011657c37c5adc
Reviewed-on: https://go-review.googlesource.com/c/go/+/342990
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
3 years agocmd/trace: use newTaskDesc to create taskDesc
Leonard Wang [Mon, 19 Jul 2021 16:05:16 +0000 (00:05 +0800)]
cmd/trace: use newTaskDesc to create taskDesc

Change-Id: I9bec8e2c4a9e1b9aa2baf883504200b5674844f8
Reviewed-on: https://go-review.googlesource.com/c/go/+/335609
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
Trust: Michael Pratt <mpratt@google.com>

3 years agocmd/link: remove elfwritedynentsym
Cherry Mui [Tue, 15 Jun 2021 17:47:03 +0000 (13:47 -0400)]
cmd/link: remove elfwritedynentsym

elfwritedynentsym and elfWriteDynEntSym are identical.

Change-Id: I893a9a65fdc496f98ba6e66c2bf1ed8dd52f52fd
Reviewed-on: https://go-review.googlesource.com/c/go/+/342709
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
3 years agoall: fix typos
Yasuhiro Matsumoto [Fri, 23 Jul 2021 13:28:26 +0000 (22:28 +0900)]
all: fix typos

Change-Id: I83180c472db8795803c1b9be3a33f35959e4dcc2
Reviewed-on: https://go-review.googlesource.com/c/go/+/336889
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
3 years agocmd/compile: fix CONVIFACE case converting interface to empty interface
Dan Scales [Fri, 13 Aug 2021 00:08:49 +0000 (17:08 -0700)]
cmd/compile: fix CONVIFACE case converting interface to empty interface

We need an extra case in convertToDictionary. In the case of an operand
which is an interface and converting to an empty interface, we don't
want to get the run-time type from the dictionary (which would be the
run-time type of the interface). We want to do a type-assert to the
empty interface.

Change-Id: I414247210168153151272fab198bfe82ad7b1567
Reviewed-on: https://go-review.googlesource.com/c/go/+/342009
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>

3 years agocmd/compile/internal/types2: allow composite literals of type parameter type
Robert Griesemer [Tue, 17 Aug 2021 01:06:18 +0000 (18:06 -0700)]
cmd/compile/internal/types2: allow composite literals of type parameter type

Change-Id: Iaaa2a3b462da6b121f13a10595950a8502b5f271
Reviewed-on: https://go-review.googlesource.com/c/go/+/342690
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
3 years agocmd/compile: fix typos
wangyuntao [Tue, 17 Aug 2021 03:24:15 +0000 (03:24 +0000)]
cmd/compile: fix typos

Change-Id: I88a3e69e232bf94296fe97621c5d395fc1296bbb
GitHub-Last-Rev: f1cc29dc287eb02881fead0b815e1b45e23adfa4
GitHub-Pull-Request: golang/go#47482
Reviewed-on: https://go-review.googlesource.com/c/go/+/338751
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Josh Bleecher Snyder <josharian@gmail.com>

3 years agogo/types: check if the interface is already complete in Complete
Robert Findley [Tue, 17 Aug 2021 00:13:25 +0000 (20:13 -0400)]
go/types: check if the interface is already complete in Complete

Once Interfaces have been completed they must never be written again,
as they may be used concurrently.

Avoid writing Interface.complete unnecessarily in Complete. Also, update
documentation to reflect that Complete must be called before the
Interface may be considered safe for concurrent use.

For #47726

Change-Id: Ic9fd1395ab0dd6d3499f7a698dadf315abcddab8
Reviewed-on: https://go-review.googlesource.com/c/go/+/342749
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agoRevert "go/types: make Interface.Complete a no-op"
Robert Findley [Mon, 16 Aug 2021 23:50:47 +0000 (23:50 +0000)]
Revert "go/types: make Interface.Complete a no-op"

This reverts commit fda8ee8b077dd8a5819cac7c52c3af1499a0674e.

Reason for revert: Interface.Complete is still necessary for safe concurrency.

For #47726

Change-Id: I8b924ca5f4af8c7d7e2b5a27bb03a5a5ed9b1d22
Reviewed-on: https://go-review.googlesource.com/c/go/+/342710
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
3 years agosrc: simplify race.bash checking condition
Cuong Manh Le [Sat, 15 May 2021 17:08:42 +0000 (00:08 +0700)]
src: simplify race.bash checking condition

By using "uname -s -m" to get the OS name and hardware name,
then using it to match supported platform in case command.

Change-Id: I5161a29c6f3fe34dcda9e7bd477fa3b772b9e041
Reviewed-on: https://go-review.googlesource.com/c/go/+/320250
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
3 years agocmd/compile: lowered MulUintptr on riscv64
Meng Zhuo [Sat, 31 Jul 2021 10:20:10 +0000 (10:20 +0000)]
cmd/compile: lowered MulUintptr on riscv64

According to RISCV instruction set manual v2.2 Sec 6.1
MULHU followed by MUL will be fused into one multiply by microarchitecture

name              old time/op  new time/op  delta
MulUintptr/small  11.2ns ±24%   9.2ns ± 0%  -17.54%  (p=0.000 n=10+9)
MulUintptr/large  15.9ns ± 0%  10.9ns ± 0%  -31.55%  (p=0.000 n=8+8)

Change-Id: I3d152218f83948cbc5c576bda29dc86e9b4206ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/338753
Trust: Meng Zhuo <mzh@golangcn.org>
Reviewed-by: Joel Sing <joel@sing.id.au>
3 years agonet: reduce allocations for UDP send/recv on Windows
Josh Bleecher Snyder [Mon, 28 Jun 2021 22:41:20 +0000 (15:41 -0700)]
net: reduce allocations for UDP send/recv on Windows

This brings the optimizations added in CLs 331489 and 331490 to Windows.

Updates #43451

Change-Id: I75cf520050325d9eb5c2785d6d8677cc864fcac8
Reviewed-on: https://go-review.googlesource.com/c/go/+/331511
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
3 years agonet: reduce allocation size in ReadFromUDP
Josh Bleecher Snyder [Fri, 12 Feb 2021 03:34:22 +0000 (19:34 -0800)]
net: reduce allocation size in ReadFromUDP

Switch to concrete types. Bring your own object to fill in.

Allocate just enough for the IP byte slice.
The allocation is now just 4 bytes for IPv4,
which puts it in the tiny allocator, which is much faster.

name                  old time/op    new time/op    delta
WriteToReadFromUDP-8    13.7µs ± 1%    13.4µs ± 2%   -2.49%  (p=0.000 n=10+10)

name                  old alloc/op   new alloc/op   delta
WriteToReadFromUDP-8     32.0B ± 0%      4.0B ± 0%  -87.50%  (p=0.000 n=10+10)

name                  old allocs/op  new allocs/op  delta
WriteToReadFromUDP-8      1.00 ± 0%      1.00 ± 0%     ~     (all equal)

Windows is temporarily stubbed out.

Updates #43451

Change-Id: Ief506f891b401d28715d22dce6ebda037941924e
Reviewed-on: https://go-review.googlesource.com/c/go/+/331490
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
3 years agonet: remove allocation from UDPConn.WriteTo
Josh Bleecher Snyder [Wed, 26 May 2021 19:55:16 +0000 (12:55 -0700)]
net: remove allocation from UDPConn.WriteTo

Duplicate some code to avoid an interface.

name                  old time/op    new time/op    delta
WriteToReadFromUDP-8    6.38µs ±20%    5.59µs ±10%  -12.38%  (p=0.001 n=10+9)

name                  old alloc/op   new alloc/op   delta
WriteToReadFromUDP-8     64.0B ± 0%     32.0B ± 0%  -50.00%  (p=0.000 n=10+10)

name                  old allocs/op  new allocs/op  delta
WriteToReadFromUDP-8      2.00 ± 0%      1.00 ± 0%  -50.00%  (p=0.000 n=10+10)

Windows is temporarily stubbed out.

Updates #43451

Change-Id: Ied15ff92268c652cf445836e0446025eaeb60cc9
Reviewed-on: https://go-review.googlesource.com/c/go/+/331489
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
3 years agoruntime: accept restartable sequence pcdata values in isAsyncSafePoint
Cherry Mui [Wed, 4 Aug 2021 23:41:19 +0000 (19:41 -0400)]
runtime: accept restartable sequence pcdata values in isAsyncSafePoint

If the pcdata value indicates a restartable sequence, it is okay
to asynchronously preempt (and resume at the restart PC). Accept
it in isAsyncSafePoint.

Fixes #47530.

Change-Id: I419225717c8eee5812f3235338262da5895aad0d
Reviewed-on: https://go-review.googlesource.com/c/go/+/340011
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Austin Clements <austin@google.com>
3 years agocmd/cgo: fix unused parameter warnings in generated _cgo_main.c
Hans [Fri, 30 Jul 2021 02:36:02 +0000 (02:36 +0000)]
cmd/cgo: fix unused parameter warnings in generated _cgo_main.c

Applying -Werror compiler option to request warnings is an usual
way to discover potential errors. Go user may put a cgo directive
in preamble: `// #cgo CFLAGS: -Werror=unused-parameter`.

However, the directive also takes effect on the cgo generated files.
I cleaned _cgo_main.c to help Go user only concentrate on warnings
of their own file.

Fixes #43639

Change-Id: I9112f02ae5226f2fc87a8650d19faee59cddd588
GitHub-Last-Rev: f09d172f979acfba855be8108e7d79ec2778c406
GitHub-Pull-Request: golang/go#46358
Reviewed-on: https://go-review.googlesource.com/c/go/+/322232
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Bryan C. Mills <bcmills@google.com>

3 years agotesting/fstest: allow specifying file for "." in MapFS
Josh Bleecher Snyder [Tue, 15 Jun 2021 23:01:25 +0000 (16:01 -0700)]
testing/fstest: allow specifying file for "." in MapFS

Prior to this commit, specifying a file for "." in MapFS
created an invalid fs.FS and caused infinite recursion in fs.WalkDir.

Fixes #46776

Change-Id: Ia9e4ae1125355a74dba9ee6b36451b7fda75a862
Reviewed-on: https://go-review.googlesource.com/c/go/+/328409
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
3 years agonet: avoid memory copy calling absDomainName
Andy Pan [Thu, 24 Jun 2021 04:50:14 +0000 (12:50 +0800)]
net: avoid memory copy calling absDomainName

Change-Id: I8ea9bec8bc33e29b8c265fbca40871bc23667144
Reviewed-on: https://go-review.googlesource.com/c/go/+/330470
Reviewed-by: Damien Neil <dneil@google.com>
Trust: Damien Neil <dneil@google.com>
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agoruntime: skip sysmon workaround on NetBSD >= 9.2
Tobias Klauser [Thu, 3 Jun 2021 14:57:54 +0000 (16:57 +0200)]
runtime: skip sysmon workaround on NetBSD >= 9.2

Detect the NetBSD version in osinit and only enable the workaround for
the kernel bug identified in #42515 for NetBSD versions older than 9.2.

For #42515
For #46495

Change-Id: I808846c7f8e47e5f7cc0a2f869246f4bd90d8e22
Reviewed-on: https://go-review.googlesource.com/c/go/+/324472
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Trust: Benny Siegert <bsiegert@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agocmd/go: address code review comments in test cgo_path_space_quote
Jay Conrod [Tue, 3 Aug 2021 21:51:46 +0000 (14:51 -0700)]
cmd/go: address code review comments in test cgo_path_space_quote

For CL 334732.

Change-Id: I5cb88cd7d5e4edf6006bbaeb17723dac2cdf0fd5
Reviewed-on: https://go-review.googlesource.com/c/go/+/339590
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/341938

3 years agocmd: update x/tools and remove copy of txtar
Jay Conrod [Mon, 26 Jul 2021 17:39:38 +0000 (10:39 -0700)]
cmd: update x/tools and remove copy of txtar

golang.org/x/tools/txtar is the main location for this package. We
don't need our own copy.

For golang/go#47193

Change-Id: I480eb591f57a0d05b433a657653e2021e39354eb
Reviewed-on: https://go-review.googlesource.com/c/go/+/337352
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/341937

3 years agocmd: support space and quotes in CC and CXX
Jay Conrod [Wed, 14 Jul 2021 23:57:24 +0000 (16:57 -0700)]
cmd: support space and quotes in CC and CXX

The CC and CXX environment variables now support spaces and quotes
(both double and single). This fixes two issues: first, if CC is a
single path that contains spaces (like 'c:\Program
Files\gcc\bin\gcc.exe'), that should now work if the space is quoted
or escaped (#41400). Second, if CC or CXX has multiple arguments (like
'gcc -O2'), they are now split correctly, and the arguments are passed
before other arguments when invoking the C compiler. Previously,
strings.Fields was used to split arguments, and the arguments were
placed later in the command line. (#43078).

Fixes golang/go#41400
Fixes golang/go#43078

NOTE: This change also includes a fix (CL 341929) for a test that was
broken by the original CL. Commit message for the fix is below.

[dev.cmdgo] cmd/link: fix TestBuildForTvOS

This test was broken in CL 334732 on darwin.

The test invokes 'go build' with a CC containing the arguments
-framework CoreFoundation. Previously, the go command split CC on
whitespace, and inserted the arguments after the command line when
running CC directly. Those arguments weren't passed to cgo though,
so cgo ran CC without -framework CoreFoundation (or any of the other
flags).

In CL 334732, we pass CC through to cgo, and cgo splits arguments
using str.SplitQuotedFields. So -framework CoreFoundation actually
gets passed to the C compiler. It appears that -framework flags are
only meant to be used in linking operations, so when cgo invokes clang
with -E (run preprocessor only), clang emits an error that -framework
is unused.

This change fixes the test by moving -framework CoreFoundation out of
CC and into CGO_LDFLAGS.

Change-Id: I2d5d89ddb19c94adef65982a8137b01f037d5c11
Reviewed-on: https://go-review.googlesource.com/c/go/+/334732
Trust: Jay Conrod <jayconrod@google.com>
Trust: Michael Matloob <matloob@golang.org>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/341936
Reviewed-by: Bryan C. Mills <bcmills@google.com>
3 years agocmd/internal/str: add utilities for quoting and splitting args
Jay Conrod [Wed, 14 Jul 2021 22:37:06 +0000 (15:37 -0700)]
cmd/internal/str: add utilities for quoting and splitting args

JoinAndQuoteFields does the inverse of SplitQuotedFields: it joins a
list of arguments with spaces into one string, quoting arguments that
contain spaces or quotes.

QuotedStringListFlag uses SplitQuotedFields and JoinAndQuoteFields
together to define new flags that accept lists of arguments.

For golang/go#41400

Change-Id: I4986b753cb5e6fabb5b489bf26aedab889f853f5
Reviewed-on: https://go-review.googlesource.com/c/go/+/334731
Trust: Jay Conrod <jayconrod@google.com>
Trust: Michael Matloob <matloob@golang.org>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/341935

3 years agocmd/go: add document -json in testflag
180909 [Mon, 16 Aug 2021 06:07:39 +0000 (06:07 +0000)]
cmd/go: add document -json in testflag

Fixes #47628

Change-Id: I2776fbc22d8a73ca7adc2cf7ad85669d57cc7eae
GitHub-Last-Rev: 826907b0797cdc25f921117e2ee44fc0dc2d21c3
GitHub-Pull-Request: golang/go#47683
Reviewed-on: https://go-review.googlesource.com/c/go/+/341991
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
3 years agocmd/go/internal/modfetch/codehost: refactor gitRepo.loadRefs to be harder to misuse
Jay Conrod [Wed, 28 Jul 2021 21:16:47 +0000 (14:16 -0700)]
cmd/go/internal/modfetch/codehost: refactor gitRepo.loadRefs to be harder to misuse

Previously, callers of loadRefs were expected to always
call via gitRepo.refsOnce.Do and check r.refsErr. This hasn't always
been the case.

This change makes loadRefs cache its own result with r.refsOnce and
return refs and refsErr. Callers can use it more like a normal
function.

CL 297950 is related. Previously, a commit like 0123456789ab could be
resolved to a v0.0.0 pseudo-version when tags couldn't be fetched, but
a shorter commit like 0123456 or a branch name like "master" couldn't
be resolved the same way. With this change, tags must be fetched
successfully ('git ls-remote' must succeed).

For #42751

Change-Id: I49c9346e6c72609ee4f8b10cfe1f69781e78457e
Reviewed-on: https://go-review.googlesource.com/c/go/+/338191
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
3 years agonet/http: drop headers with invalid keys in Header.Write
Damien Neil [Mon, 16 Aug 2021 17:46:06 +0000 (10:46 -0700)]
net/http: drop headers with invalid keys in Header.Write

Don't let handlers inject unexpected headers by setting keys like:
w.Header().Set("Evil: x\r\nSmuggle", y)

Fixes #47711.

Change-Id: I459ce1c79bc273a84230a0f5b665f81c46dbc672
Reviewed-on: https://go-review.googlesource.com/c/go/+/342530
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agogo/types: use the orig object for Named.Obj
Robert Findley [Mon, 16 Aug 2021 18:00:14 +0000 (14:00 -0400)]
go/types: use the orig object for Named.Obj

This is a port of CL 341858 to go/types.

Change-Id: I9fba8941069aaacd641a19e3068de3a769e14e50
Reviewed-on: https://go-review.googlesource.com/c/go/+/342482
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

3 years agogo/types: rename TypeParams to TParamList
Robert Findley [Mon, 16 Aug 2021 17:37:45 +0000 (13:37 -0400)]
go/types: rename TypeParams to TParamList

This is a straightforward port of CL 341861 to go/types.

Change-Id: I4f21170eb2ea1e5395a6eba5132f34aa1d53bb20
Reviewed-on: https://go-review.googlesource.com/c/go/+/342481
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>