* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2015-11-02 19:38 Fabian Groffen
0 siblings, 0 replies; 6+ messages in thread
From: Fabian Groffen @ 2015-11-02 19:38 UTC (permalink / raw
To: gentoo-commits
commit: ce9faeb87f6b0d117848b382fd8d7d1cfd70c568
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Mon Nov 2 19:26:28 2015 +0000
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Mon Nov 2 19:37:00 2015 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ce9faeb8
dev-lang/go: add patch for darwin by yegle in bug #558368
Package-Manager: portage-2.2.20-prefix
dev-lang/go/files/go-1.5.1-darwin-sysctl.patch | 11 +++++++++++
dev-lang/go/go-1.5.1.ebuild | 2 ++
2 files changed, 13 insertions(+)
diff --git a/dev-lang/go/files/go-1.5.1-darwin-sysctl.patch b/dev-lang/go/files/go-1.5.1-darwin-sysctl.patch
new file mode 100644
index 0000000..5cec4b6
--- /dev/null
+++ b/dev-lang/go/files/go-1.5.1-darwin-sysctl.patch
@@ -0,0 +1,11 @@
+--- src/cmd/dist/util.go.
++++ src/cmd/dist/util.go
+@@ -404,7 +404,7 @@
+ switch gohostos {
+ case "darwin":
+ // Even on 64-bit platform, darwin uname -m prints i386.
+- if strings.Contains(run("", CheckExit, "sysctl", "machdep.cpu.extfeatures"), "EM64T") {
++ if strings.Contains(run("", CheckExit, "/usr/sbin/sysctl", "machdep.cpu.extfeatures"), "EM64T") {
+ gohostarch = "amd64"
+ }
+ case "solaris":
diff --git a/dev-lang/go/go-1.5.1.ebuild b/dev-lang/go/go-1.5.1.ebuild
index 8d4c715..139b350 100644
--- a/dev-lang/go/go-1.5.1.ebuild
+++ b/dev-lang/go/go-1.5.1.ebuild
@@ -54,6 +54,7 @@ go_arch()
local portage_arch=$(tc-arch $@)
case "${portage_arch}" in
x86) echo 386;;
+ x64-*) echo amd64;;
*) echo "${portage_arch}";;
esac
}
@@ -112,6 +113,7 @@ src_prepare()
sed -i -e 's/"-Werror",//g' src/cmd/dist/build.go ||
die 'sed failed'
fi
+ epatch "${FILESDIR}"/${P}-darwin-sysctl.patch
epatch_user
}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2016-07-20 13:58 William Hubbs
0 siblings, 0 replies; 6+ messages in thread
From: William Hubbs @ 2016-07-20 13:58 UTC (permalink / raw
To: gentoo-commits
commit: 39c2cef80c2e3c2d6d12ac0c2488db21f01430a5
Author: William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 20 13:58:05 2016 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Wed Jul 20 13:58:39 2016 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=39c2cef8
dev-lang/go: 1.6.3 version bump for #589230
Package-Manager: portage-2.2.28
dev-lang/go/Manifest | 1 +
dev-lang/go/files/go-1.6.3-gdb-no-shell.patch | 12 ++
dev-lang/go/go-1.6.3.ebuild | 260 ++++++++++++++++++++++++++
3 files changed, 273 insertions(+)
diff --git a/dev-lang/go/Manifest b/dev-lang/go/Manifest
index 426210b..a1e0299 100644
--- a/dev-lang/go/Manifest
+++ b/dev-lang/go/Manifest
@@ -10,4 +10,5 @@ DIST go-linux-ppc64le-bootstrap.tbz 50134685 SHA256 ca816a3e3cbd7721200522fa3984
DIST go-solaris-amd64-bootstrap.tbz 48367195 SHA256 92ebdbf001f243a78a6c2d8ee30e929ba2cecbedf8e0fc07e129b04b107453ad SHA512 cf8725db0d001d61badee71624799a3c9e75f61f77ab090c1f6c490d694c4be367019b28d88306045d877ab5a324a1f9b0674293caf3acb19c193fc3746a48f2 WHIRLPOOL 672c6642e340b6d4f38b633f67fdc3202e3725022a8a61e2129276fccd6c42ddc24ed06c1d57eb31a25ea8056b79686619cbb36431b9c23b6d4be5bcb715bd89
DIST go1.6.1.src.tar.gz 12615799 SHA256 1d4b53cdee51b2298afcf50926a7fa44b286f0bf24ff8323ce690a66daa7193f SHA512 31ea2504f8ab0fd709005275d0c2129b6cdb4e5d34d6e2b435b23480674b135d1bff8de863b1e01201e757523f4dc28b6ebefeb87d7e855f2509a6837e436fab WHIRLPOOL 6589f311fc3893775352a3c5d6409933397215389f2b25d3b61370acde35ead374403dfdd1dd58962b5066acd61c4acd85cf9c556d05b099e7fec6d23d6daca0
DIST go1.6.2.src.tar.gz 12617724 SHA256 787b0b750d037016a30c6ed05a8a70a91b2e9db4bd9b1a2453aa502a63f1bccc SHA512 e148022f9e18b5d5b05744f1aa9fa3ef82e255752179545711ade077e271216aa5b450859a764fdfb028ae4faa26adad8d0a0a5268b31396ab9d14de3cb2f20a WHIRLPOOL bbd04cc0b18768b9dcf3b1d3614d2a263d2314ca811e03b390bafeafc7ea4d2aa650a34901da75e55ca58bf9c00601d9924152228ed0d57bbc4b5dbdc081e8a9
+DIST go1.6.3.src.tar.gz 12617426 SHA256 6326aeed5f86cf18f16d6dc831405614f855e2d416a91fd3fdc334f772345b00 SHA512 43e9b01220788112a185500bd53f091e7a0023a790092f428e2f40fc1a334dd148558b99d2a1c871b8cc79ad7d2d87a092b93eee7b5a27c2ee675c494de35306 WHIRLPOOL 0a22dc08b89ddfaccf1e871037e7ad6cdbf36f914de527011813d57a2d857478278202314b185e26aa905cb135d13cbea490d03337b42148c6fc2ef93a8cd9fe
DIST go1.6.src.tar.gz 12613308 SHA256 a96cce8ce43a9bf9b2a4c7d470bc7ee0cb00410da815980681c8353218dcf146 SHA512 59e9d72a80558fd5e3f176e068897a45333b36e35f6c00393647941a70e741168e65941b6059397378020c3b78ec3471a48809682f7efd97cf33eec6325fc3e8 WHIRLPOOL c6debe1a5039f0ca34c29b4a53f958503a724cae13715ea14f0237b5faacd26e09eb6405462e22abd6806540dd8fb9eb2fa08ff6e8676b0f6dffa267210f5eac
diff --git a/dev-lang/go/files/go-1.6.3-gdb-no-shell.patch b/dev-lang/go/files/go-1.6.3-gdb-no-shell.patch
new file mode 100644
index 0000000..ccce6f0
--- /dev/null
+++ b/dev-lang/go/files/go-1.6.3-gdb-no-shell.patch
@@ -0,0 +1,12 @@
+diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go
+index 6ebc69a..648092a 100644
+--- a/src/runtime/runtime-gdb_test.go
++++ b/src/runtime/runtime-gdb_test.go
+@@ -87,6 +87,7 @@ func TestGdbPython(t *testing.T) {
+
+ args := []string{"-nx", "-q", "--batch", "-iex",
+ fmt.Sprintf("add-auto-load-safe-path %s/src/runtime", runtime.GOROOT()),
++ "-ex", "set startup-with-shell off",
+ "-ex", "info auto-load python-scripts",
+ "-ex", "br main.go:10",
+ "-ex", "run",
diff --git a/dev-lang/go/go-1.6.3.ebuild b/dev-lang/go/go-1.6.3.ebuild
new file mode 100644
index 0000000..ddf85db
--- /dev/null
+++ b/dev-lang/go/go-1.6.3.ebuild
@@ -0,0 +1,260 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+export CBUILD=${CBUILD:-${CHOST}}
+export CTARGET=${CTARGET:-${CHOST}}
+
+MY_PV=${PV/_/}
+
+inherit toolchain-funcs
+
+BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist"
+SRC_URI="!gccgo? (
+kernel_Darwin? (
+ x64-macos? ( ${BOOTSTRAP_DIST}/go-darwin-amd64-bootstrap.tbz )
+)
+kernel_FreeBSD? (
+amd64-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-amd64-bootstrap.tbz )
+x86-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-386-bootstrap-1.tbz )
+)
+kernel_linux? (
+ amd64? ( ${BOOTSTRAP_DIST}/go-linux-amd64-bootstrap.tbz )
+ arm? ( ${BOOTSTRAP_DIST}/go-linux-arm-bootstrap.tbz )
+ arm64? ( ${BOOTSTRAP_DIST}/go-linux-arm64-bootstrap.tbz )
+ ppc64? (
+ ${BOOTSTRAP_DIST}/go-linux-ppc64-bootstrap.tbz
+ ${BOOTSTRAP_DIST}/go-linux-ppc64le-bootstrap.tbz
+ )
+ x86? ( ${BOOTSTRAP_DIST}/go-linux-386-bootstrap-1.tbz )
+)
+kernel_SunOS? (
+ x64-solaris? ( ${BOOTSTRAP_DIST}/go-solaris-amd64-bootstrap.tbz )
+)
+)
+"
+
+if [[ ${PV} = 9999 ]]; then
+ EGIT_REPO_URI="git://github.com/golang/go.git"
+ inherit git-r3
+else
+ SRC_URI+="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz"
+ case ${PV} in
+ *9999*|*_rc*) ;;
+ *)
+ KEYWORDS="-* ~amd64 ~arm ~arm64 ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-macos ~x64-solaris"
+ ;;
+ esac
+fi
+
+DESCRIPTION="A concurrent garbage collected and typesafe programming language"
+HOMEPAGE="http://www.golang.org"
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+IUSE="gccgo"
+
+DEPEND="gccgo? ( >=sys-devel/gcc-5[go] )"
+RDEPEND="!<dev-go/go-tools-0_pre20150902"
+
+# These test data objects have writable/executable stacks.
+QA_EXECSTACK="usr/lib/go/src/debug/elf/testdata/*.obj"
+
+# Do not complain about CFLAGS, etc, since Go doesn't use them.
+QA_FLAGS_IGNORED='.*'
+
+REQUIRES_EXCLUDE="/usr/lib/go/src/debug/elf/testdata/*"
+
+# The tools in /usr/lib/go should not cause the multilib-strict check to fail.
+QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
+
+# The go language uses *.a files which are _NOT_ libraries and should not be
+# stripped. The test data objects should also be left alone and unstripped.
+STRIP_MASK="/usr/lib/go/pkg/*.a
+ /usr/lib/go/src/debug/elf/testdata/*
+ /usr/lib/go/src/debug/dwarf/testdata/*
+ /usr/lib/go/src/runtime/race/*.syso"
+
+if [[ ${PV} != 9999 ]]; then
+ S="${WORKDIR}"/go
+fi
+
+PATCHES=(
+# patch for #581072
+ "${FILESDIR}"/${P}-gdb-no-shell.patch
+)
+
+go_arch()
+{
+ # By chance most portage arch names match Go
+ local portage_arch=$(tc-arch $@)
+ case "${portage_arch}" in
+ x86) echo 386;;
+ x64-*) echo amd64;;
+ ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
+ *) echo "${portage_arch}";;
+ esac
+}
+
+go_arm()
+{
+ case "${1:-${CHOST}}" in
+ armv5*) echo 5;;
+ armv6*) echo 6;;
+ armv7*) echo 7;;
+ *)
+ die "unknown GOARM for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_os()
+{
+ case "${1:-${CHOST}}" in
+ *-linux*) echo linux;;
+ *-darwin*) echo darwin;;
+ *-freebsd*) echo freebsd;;
+ *-netbsd*) echo netbsd;;
+ *-openbsd*) echo openbsd;;
+ *-solaris*) echo solaris;;
+ *-cygwin*|*-interix*|*-winnt*)
+ echo windows
+ ;;
+ *)
+ die "unknown GOOS for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_tuple()
+{
+ echo "$(go_os $@)_$(go_arch $@)"
+}
+
+go_cross_compile()
+{
+ [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
+}
+
+pkg_pretend()
+{
+ # make.bash does not understand cross-compiling a cross-compiler
+ if [[ $(go_tuple) != $(go_tuple ${CTARGET}) ]]; then
+ die "CHOST CTARGET pair unsupported: CHOST=${CHOST} CTARGET=${CTARGET}"
+ fi
+}
+
+src_unpack()
+{
+ if [[ ${PV} = 9999 ]]; then
+ git-r3_src_unpack
+ fi
+ default
+}
+
+src_compile()
+{
+ export GOROOT_BOOTSTRAP="${WORKDIR}"/go-$(go_os)-$(go_arch)-bootstrap
+ if use gccgo; then
+ mkdir -p "${GOROOT_BOOTSTRAP}/bin" || die
+ local go_binary=$(gcc-config --get-bin-path)/go-5
+ [[ -x ${go_binary} ]] || go_binary=$(
+ find "${EPREFIX}"/usr/${CHOST}/gcc-bin/*/go-5 | sort -V | tail -n1)
+ [[ -x ${go_binary} ]] || die "go-5: command not found"
+ ln -s "${go_binary}" "${GOROOT_BOOTSTRAP}/bin/go" || die
+ fi
+ export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
+ export GOROOT="$(pwd)"
+ export GOBIN="${GOROOT}/bin"
+
+ # Go's build script does not use BUILD/HOST/TARGET consistently. :(
+ export GOHOSTARCH=$(go_arch ${CBUILD})
+ export GOHOSTOS=$(go_os ${CBUILD})
+ export CC=$(tc-getBUILD_CC)
+
+ export GOARCH=$(go_arch)
+ export GOOS=$(go_os)
+ export CC_FOR_TARGET=$(tc-getCC)
+ export CXX_FOR_TARGET=$(tc-getCXX)
+ if [[ ${ARCH} == arm ]]; then
+ export GOARM=$(go_arm)
+ fi
+ elog "GOROOT_BOOTSTRAP is ${GOROOT_BOOTSTRAP}"
+
+ cd src
+ ./make.bash || die "build failed"
+}
+
+src_test()
+{
+ go_cross_compile && return 0
+
+ cd src
+ PATH="${GOBIN}:${PATH}" \
+ ./run.bash -no-rebuild || die "tests failed"
+}
+
+src_install()
+{
+ local bin_path f x
+
+ dodir /usr/lib/go
+ insinto /usr/lib/go
+
+ # There is a known issue which requires the source tree to be installed [1].
+ # Once this is fixed, we can consider using the doc use flag to control
+ # installing the doc and src directories.
+ # [1] https://golang.org/issue/2775
+ doins -r bin doc lib pkg src
+ fperms -R +x /usr/lib/go/bin /usr/lib/go/pkg/tool
+
+ cp -a misc "${D}"/usr/lib/go/misc
+
+ if go_cross_compile; then
+ bin_path="bin/$(go_tuple)"
+ else
+ bin_path=bin
+ fi
+ for x in ${bin_path}/*; do
+ f=${x##*/}
+ dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
+ done
+ dodoc AUTHORS CONTRIBUTORS PATENTS README.md
+}
+
+pkg_preinst()
+{
+ has_version '<dev-lang/go-1.4' &&
+ export had_support_files=true ||
+ export had_support_files=false
+}
+
+pkg_postinst()
+{
+ # If the go tool sees a package file timestamped older than a dependancy it
+ # will rebuild that file. So, in order to stop go from rebuilding lots of
+ # packages for every build we need to fix the timestamps. The compiler and
+ # linker are also checked - so we need to fix them too.
+ ebegin "fixing timestamps to avoid unnecessary rebuilds"
+ tref="usr/lib/go/pkg/*/runtime.a"
+ find "${EROOT}"usr/lib/go -type f \
+ -exec touch -r "${EROOT}"${tref} {} \;
+ eend $?
+
+ if [[ ${PV} != 9999 && -n ${REPLACING_VERSIONS} &&
+ ${REPLACING_VERSIONS} != ${PV} ]]; then
+ elog "Release notes are located at http://golang.org/doc/go${PV}"
+ fi
+
+ if $had_support_files; then
+ ewarn
+ ewarn "All editor support, IDE support, shell completion"
+ ewarn "support, etc has been removed from the go package"
+ ewarn "upstream."
+ ewarn "For more information on which support is available, see"
+ ewarn "the following URL:"
+ ewarn "https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins"
+ fi
+}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2017-03-22 14:39 William Hubbs
0 siblings, 0 replies; 6+ messages in thread
From: William Hubbs @ 2017-03-22 14:39 UTC (permalink / raw
To: gentoo-commits
commit: 8f8a61e7f5f6b446db1bc6331e948345f4fcd94d
Author: William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 22 14:37:30 2017 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Wed Mar 22 14:38:36 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f8a61e7
dev-lang/go: 1.8-r1 revision bump
This fixes #19182 upstream [1].
[1] https://github.com/golang/go/issues/19182
Package-Manager: Portage-2.3.3, Repoman-2.3.2
...-add-opcode-flag-hasSideEffects-for-do-no.patch | 738 +++++++++++++++++++++
dev-lang/go/go-1.8-r1.ebuild | 231 +++++++
2 files changed, 969 insertions(+)
diff --git a/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch b/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
new file mode 100644
index 00000000000..c8ebf376f45
--- /dev/null
+++ b/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
@@ -0,0 +1,738 @@
+From 11b283092a29a9d402ce05706fd3a85683576218 Mon Sep 17 00:00:00 2001
+From: David Chase <drchase@google.com>
+Date: Tue, 21 Feb 2017 15:22:52 -0500
+Subject: [PATCH] cmd/compile: add opcode flag hasSideEffects for do-not-remove
+
+Added a flag to generic and various architectures' atomic
+operations that are judged to have observable side effects
+and thus cannot be dead-code-eliminated.
+
+Test requires GOMAXPROCS > 1 without preemption in loop.
+
+Fixes #19182.
+
+Change-Id: Id2230031abd2cca0bbb32fd68fc8a58fb912070f
+Reviewed-on: https://go-review.googlesource.com/37333
+Run-TryBot: David Chase <drchase@google.com>
+TryBot-Result: Gobot Gobot <gobot@golang.org>
+Reviewed-by: Cherry Zhang <cherryyz@google.com>
+---
+ src/cmd/compile/internal/ssa/deadcode.go | 2 +-
+ src/cmd/compile/internal/ssa/gen/AMD64Ops.go | 16 ++--
+ src/cmd/compile/internal/ssa/gen/ARM64Ops.go | 20 ++---
+ src/cmd/compile/internal/ssa/gen/MIPSOps.go | 16 ++--
+ src/cmd/compile/internal/ssa/gen/S390XOps.go | 16 ++--
+ src/cmd/compile/internal/ssa/gen/genericOps.go | 28 +++----
+ src/cmd/compile/internal/ssa/gen/main.go | 4 +
+ src/cmd/compile/internal/ssa/op.go | 1 +
+ src/cmd/compile/internal/ssa/opGen.go | 111 +++++++++++++++++--------
+ test/fixedbugs/issue19182.go | 36 ++++++++
+ 10 files changed, 168 insertions(+), 82 deletions(-)
+ create mode 100644 test/fixedbugs/issue19182.go
+
+diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go
+index d75d2d5..ce786a9 100644
+--- a/src/cmd/compile/internal/ssa/deadcode.go
++++ b/src/cmd/compile/internal/ssa/deadcode.go
+@@ -64,7 +64,7 @@ func liveValues(f *Func, reachable []bool) []bool {
+ q = append(q, v)
+ }
+ for _, v := range b.Values {
+- if opcodeTable[v.Op].call && !live[v.ID] {
++ if (opcodeTable[v.Op].call || opcodeTable[v.Op].hasSideEffects) && !live[v.ID] {
+ live[v.ID] = true
+ q = append(q, v)
+ }
+diff --git a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
+index cdd5539..1b73ac1 100644
+--- a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
++++ b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
+@@ -548,15 +548,15 @@ func init() {
+ // store arg0 to arg1+auxint+aux, arg2=mem.
+ // These ops return a tuple of <old contents of *(arg1+auxint+aux), memory>.
+ // Note: arg0 and arg1 are backwards compared to MOVLstore (to facilitate resultInArg0)!
+- {name: "XCHGL", argLength: 3, reg: gpstorexchg, asm: "XCHGL", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true},
+- {name: "XCHGQ", argLength: 3, reg: gpstorexchg, asm: "XCHGQ", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true},
++ {name: "XCHGL", argLength: 3, reg: gpstorexchg, asm: "XCHGL", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, hasSideEffects: true},
++ {name: "XCHGQ", argLength: 3, reg: gpstorexchg, asm: "XCHGQ", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, hasSideEffects: true},
+
+ // Atomic adds.
+ // *(arg1+auxint+aux) += arg0. arg2=mem.
+ // Returns a tuple of <old contents of *(arg1+auxint+aux), memory>.
+ // Note: arg0 and arg1 are backwards compared to MOVLstore (to facilitate resultInArg0)!
+- {name: "XADDLlock", argLength: 3, reg: gpstorexchg, asm: "XADDL", typ: "(UInt32,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true},
+- {name: "XADDQlock", argLength: 3, reg: gpstorexchg, asm: "XADDQ", typ: "(UInt64,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true},
++ {name: "XADDLlock", argLength: 3, reg: gpstorexchg, asm: "XADDL", typ: "(UInt32,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, hasSideEffects: true},
++ {name: "XADDQlock", argLength: 3, reg: gpstorexchg, asm: "XADDQ", typ: "(UInt64,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, hasSideEffects: true},
+ {name: "AddTupleFirst32", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
+ {name: "AddTupleFirst64", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
+
+@@ -579,12 +579,12 @@ func init() {
+ // JEQ ...
+ // but we can't do that because memory-using ops can't generate flags yet
+ // (flagalloc wants to move flag-generating instructions around).
+- {name: "CMPXCHGLlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
+- {name: "CMPXCHGQlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
++ {name: "CMPXCHGLlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "CMPXCHGQlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // Atomic memory updates.
+- {name: "ANDBlock", argLength: 3, reg: gpstore, asm: "ANDB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true}, // *(arg0+auxint+aux) &= arg1
+- {name: "ORBlock", argLength: 3, reg: gpstore, asm: "ORB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true}, // *(arg0+auxint+aux) |= arg1
++ {name: "ANDBlock", argLength: 3, reg: gpstore, asm: "ANDB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true}, // *(arg0+auxint+aux) &= arg1
++ {name: "ORBlock", argLength: 3, reg: gpstore, asm: "ORB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true}, // *(arg0+auxint+aux) |= arg1
+ }
+
+ var AMD64blocks = []blockData{
+diff --git a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
+index e8d5be2..0986ac6 100644
+--- a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
++++ b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
+@@ -456,16 +456,16 @@ func init() {
+
+ // atomic stores.
+ // store arg1 to arg0. arg2=mem. returns memory. auxint must be zero.
+- {name: "STLR", argLength: 3, reg: gpstore, asm: "STLR", faultOnNilArg0: true},
+- {name: "STLRW", argLength: 3, reg: gpstore, asm: "STLRW", faultOnNilArg0: true},
++ {name: "STLR", argLength: 3, reg: gpstore, asm: "STLR", faultOnNilArg0: true, hasSideEffects: true},
++ {name: "STLRW", argLength: 3, reg: gpstore, asm: "STLRW", faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic exchange.
+ // store arg1 to arg0. arg2=mem. returns <old content of *arg0, memory>. auxint must be zero.
+ // LDAXR (Rarg0), Rout
+ // STLXR Rarg1, (Rarg0), Rtmp
+ // CBNZ Rtmp, -2(PC)
+- {name: "LoweredAtomicExchange64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicExchange32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicExchange64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicExchange32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic add.
+ // *arg0 += arg1. arg2=mem. returns <new content of *arg0, memory>. auxint must be zero.
+@@ -473,8 +473,8 @@ func init() {
+ // ADD Rarg1, Rout
+ // STLXR Rout, (Rarg0), Rtmp
+ // CBNZ Rtmp, -3(PC)
+- {name: "LoweredAtomicAdd64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicAdd32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicAdd64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicAdd32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic compare and swap.
+ // arg0 = pointer, arg1 = old value, arg2 = new value, arg3 = memory. auxint must be zero.
+@@ -490,8 +490,8 @@ func init() {
+ // STLXR Rarg2, (Rarg0), Rtmp
+ // CBNZ Rtmp, -4(PC)
+ // CSET EQ, Rout
+- {name: "LoweredAtomicCas64", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicCas32", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicCas64", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicCas32", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic and/or.
+ // *arg0 &= (|=) arg1. arg2=mem. returns memory. auxint must be zero.
+@@ -499,8 +499,8 @@ func init() {
+ // AND/OR Rarg1, Rtmp
+ // STLXRB Rtmp, (Rarg0), Rtmp
+ // CBNZ Rtmp, -3(PC)
+- {name: "LoweredAtomicAnd8", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true},
+- {name: "LoweredAtomicOr8", argLength: 3, reg: gpstore, asm: "ORR", faultOnNilArg0: true},
++ {name: "LoweredAtomicAnd8", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicOr8", argLength: 3, reg: gpstore, asm: "ORR", faultOnNilArg0: true, hasSideEffects: true},
+ }
+
+ blocks := []blockData{
+diff --git a/src/cmd/compile/internal/ssa/gen/MIPSOps.go b/src/cmd/compile/internal/ssa/gen/MIPSOps.go
+index 78b961f..3d88b71 100644
+--- a/src/cmd/compile/internal/ssa/gen/MIPSOps.go
++++ b/src/cmd/compile/internal/ssa/gen/MIPSOps.go
+@@ -267,8 +267,8 @@ func init() {
+ // SYNC
+ // MOVW Rarg1, (Rarg0)
+ // SYNC
+- {name: "LoweredAtomicStore", argLength: 3, reg: gpstore, faultOnNilArg0: true},
+- {name: "LoweredAtomicStorezero", argLength: 2, reg: gpstore0, faultOnNilArg0: true},
++ {name: "LoweredAtomicStore", argLength: 3, reg: gpstore, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicStorezero", argLength: 2, reg: gpstore0, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic exchange.
+ // store arg1 to arg0. arg2=mem. returns <old content of *arg0, memory>.
+@@ -278,7 +278,7 @@ func init() {
+ // SC Rtmp, (Rarg0)
+ // BEQ Rtmp, -3(PC)
+ // SYNC
+- {name: "LoweredAtomicExchange", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicExchange", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic add.
+ // *arg0 += arg1. arg2=mem. returns <new content of *arg0, memory>.
+@@ -289,8 +289,8 @@ func init() {
+ // BEQ Rtmp, -3(PC)
+ // SYNC
+ // ADDU Rarg1, Rout
+- {name: "LoweredAtomicAdd", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicAddconst", argLength: 2, reg: regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}}, aux: "Int32", resultNotInArgs: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicAdd", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicAddconst", argLength: 2, reg: regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}}, aux: "Int32", resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic compare and swap.
+ // arg0 = pointer, arg1 = old value, arg2 = new value, arg3 = memory.
+@@ -308,7 +308,7 @@ func init() {
+ // SC Rout, (Rarg0)
+ // BEQ Rout, -4(PC)
+ // SYNC
+- {name: "LoweredAtomicCas", argLength: 4, reg: gpcas, resultNotInArgs: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicCas", argLength: 4, reg: gpcas, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // atomic and/or.
+ // *arg0 &= (|=) arg1. arg2=mem. returns memory.
+@@ -318,8 +318,8 @@ func init() {
+ // SC Rtmp, (Rarg0)
+ // BEQ Rtmp, -3(PC)
+ // SYNC
+- {name: "LoweredAtomicAnd", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true},
+- {name: "LoweredAtomicOr", argLength: 3, reg: gpstore, asm: "OR", faultOnNilArg0: true},
++ {name: "LoweredAtomicAnd", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicOr", argLength: 3, reg: gpstore, asm: "OR", faultOnNilArg0: true, hasSideEffects: true},
+
+ // large or unaligned zeroing
+ // arg0 = address of memory to zero (in R1, changed as side effect)
+diff --git a/src/cmd/compile/internal/ssa/gen/S390XOps.go b/src/cmd/compile/internal/ssa/gen/S390XOps.go
+index 4c5f070..40ba252 100644
+--- a/src/cmd/compile/internal/ssa/gen/S390XOps.go
++++ b/src/cmd/compile/internal/ssa/gen/S390XOps.go
+@@ -429,14 +429,14 @@ func init() {
+
+ // Atomic stores. These are just normal stores.
+ // store arg1 to arg0+auxint+aux. arg2=mem.
+- {name: "MOVWatomicstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true},
+- {name: "MOVDatomicstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true},
++ {name: "MOVWatomicstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "MOVDatomicstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // Atomic adds.
+ // *(arg0+auxint+aux) += arg1. arg2=mem.
+ // Returns a tuple of <old contents of *(arg0+auxint+aux), memory>.
+- {name: "LAA", argLength: 3, reg: gpstorelaa, asm: "LAA", typ: "(UInt32,Mem)", aux: "SymOff", faultOnNilArg0: true},
+- {name: "LAAG", argLength: 3, reg: gpstorelaa, asm: "LAAG", typ: "(UInt64,Mem)", aux: "SymOff", faultOnNilArg0: true},
++ {name: "LAA", argLength: 3, reg: gpstorelaa, asm: "LAA", typ: "(UInt32,Mem)", aux: "SymOff", faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LAAG", argLength: 3, reg: gpstorelaa, asm: "LAAG", typ: "(UInt64,Mem)", aux: "SymOff", faultOnNilArg0: true, hasSideEffects: true},
+ {name: "AddTupleFirst32", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
+ {name: "AddTupleFirst64", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
+
+@@ -461,13 +461,13 @@ func init() {
+ // BEQ ...
+ // but we can't do that because memory-using ops can't generate flags yet
+ // (flagalloc wants to move flag-generating instructions around).
+- {name: "LoweredAtomicCas32", argLength: 4, reg: cas, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicCas64", argLength: 4, reg: cas, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicCas32", argLength: 4, reg: cas, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicCas64", argLength: 4, reg: cas, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // Lowered atomic swaps, emulated using compare-and-swap.
+ // store arg1 to arg0+auxint+aux, arg2=mem.
+- {name: "LoweredAtomicExchange32", argLength: 3, reg: exchange, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
+- {name: "LoweredAtomicExchange64", argLength: 3, reg: exchange, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
++ {name: "LoweredAtomicExchange32", argLength: 3, reg: exchange, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
++ {name: "LoweredAtomicExchange64", argLength: 3, reg: exchange, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
+
+ // find leftmost one
+ {
+diff --git a/src/cmd/compile/internal/ssa/gen/genericOps.go b/src/cmd/compile/internal/ssa/gen/genericOps.go
+index f39598e..3854a39 100644
+--- a/src/cmd/compile/internal/ssa/gen/genericOps.go
++++ b/src/cmd/compile/internal/ssa/gen/genericOps.go
+@@ -441,20 +441,20 @@ var genericOps = []opData{
+ // Atomic loads return a new memory so that the loads are properly ordered
+ // with respect to other loads and stores.
+ // TODO: use for sync/atomic at some point.
+- {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
+- {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
+- {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
+- {name: "AtomicStore32", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
+- {name: "AtomicStore64", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
+- {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
+- {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)"}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
+- {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)"}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
+- {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)"}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
+- {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)"}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
+- {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)"}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
+- {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)"}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
+- {name: "AtomicAnd8", argLength: 3, typ: "Mem"}, // *arg0 &= arg1. arg2=memory. Returns memory.
+- {name: "AtomicOr8", argLength: 3, typ: "Mem"}, // *arg0 |= arg1. arg2=memory. Returns memory.
++ {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
++ {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
++ {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
++ {name: "AtomicStore32", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
++ {name: "AtomicStore64", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
++ {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
++ {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
++ {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
++ {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
++ {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
++ {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
++ {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
++ {name: "AtomicAnd8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns memory.
++ {name: "AtomicOr8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns memory.
+ }
+
+ // kind control successors implicit exit
+diff --git a/src/cmd/compile/internal/ssa/gen/main.go b/src/cmd/compile/internal/ssa/gen/main.go
+index 41199f7..19b904a 100644
+--- a/src/cmd/compile/internal/ssa/gen/main.go
++++ b/src/cmd/compile/internal/ssa/gen/main.go
+@@ -52,6 +52,7 @@ type opData struct {
+ faultOnNilArg0 bool // this op will fault if arg0 is nil (and aux encodes a small offset)
+ faultOnNilArg1 bool // this op will fault if arg1 is nil (and aux encodes a small offset)
+ usesScratch bool // this op requires scratch memory space
++ hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182.
+ }
+
+ type blockData struct {
+@@ -208,6 +209,9 @@ func genOp() {
+ if v.usesScratch {
+ fmt.Fprintln(w, "usesScratch: true,")
+ }
++ if v.hasSideEffects {
++ fmt.Fprintln(w, "hasSideEffects: true,")
++ }
+ if a.name == "generic" {
+ fmt.Fprintln(w, "generic:true,")
+ fmt.Fprintln(w, "},") // close op
+diff --git a/src/cmd/compile/internal/ssa/op.go b/src/cmd/compile/internal/ssa/op.go
+index 4c3164f..37b2f74 100644
+--- a/src/cmd/compile/internal/ssa/op.go
++++ b/src/cmd/compile/internal/ssa/op.go
+@@ -34,6 +34,7 @@ type opInfo struct {
+ faultOnNilArg0 bool // this op will fault if arg0 is nil (and aux encodes a small offset)
+ faultOnNilArg1 bool // this op will fault if arg1 is nil (and aux encodes a small offset)
+ usesScratch bool // this op requires scratch memory space
++ hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182.
+ }
+
+ type inputInfo struct {
+diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go
+index 26bcbe0..7a96216 100644
+--- a/src/cmd/compile/internal/ssa/opGen.go
++++ b/src/cmd/compile/internal/ssa/opGen.go
+@@ -7632,6 +7632,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultInArg0: true,
+ faultOnNilArg1: true,
++ hasSideEffects: true,
+ asm: x86.AXCHGL,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7649,6 +7650,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultInArg0: true,
+ faultOnNilArg1: true,
++ hasSideEffects: true,
+ asm: x86.AXCHGQ,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7667,6 +7669,7 @@ var opcodeTable = [...]opInfo{
+ resultInArg0: true,
+ clobberFlags: true,
+ faultOnNilArg1: true,
++ hasSideEffects: true,
+ asm: x86.AXADDL,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7685,6 +7688,7 @@ var opcodeTable = [...]opInfo{
+ resultInArg0: true,
+ clobberFlags: true,
+ faultOnNilArg1: true,
++ hasSideEffects: true,
+ asm: x86.AXADDQ,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7712,6 +7716,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 4,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: x86.ACMPXCHGL,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7732,6 +7737,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 4,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: x86.ACMPXCHGQ,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7752,6 +7758,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: x86.AANDB,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -7766,6 +7773,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: x86.AORB,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -12982,6 +12990,7 @@ var opcodeTable = [...]opInfo{
+ name: "STLR",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: arm64.ASTLR,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -12994,6 +13003,7 @@ var opcodeTable = [...]opInfo{
+ name: "STLRW",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: arm64.ASTLRW,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -13007,6 +13017,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13022,6 +13033,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13037,6 +13049,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13052,6 +13065,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13068,6 +13082,7 @@ var opcodeTable = [...]opInfo{
+ resultNotInArgs: true,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13085,6 +13100,7 @@ var opcodeTable = [...]opInfo{
+ resultNotInArgs: true,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
+@@ -13100,6 +13116,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicAnd8",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: arm64.AAND,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -13112,6 +13129,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicOr8",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: arm64.AORR,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -14302,6 +14320,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicStore",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
+@@ -14313,6 +14332,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicStorezero",
+ argLen: 2,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 140738025226238}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 SP g R31 SB
+@@ -14324,6 +14344,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
+@@ -14339,6 +14360,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
+@@ -14355,6 +14377,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 2,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {0, 140738025226238}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 SP g R31 SB
+@@ -14369,6 +14392,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 4,
+ resultNotInArgs: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ reg: regInfo{
+ inputs: []inputInfo{
+ {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
+@@ -14384,6 +14408,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicAnd",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: mips.AAND,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -14396,6 +14421,7 @@ var opcodeTable = [...]opInfo{
+ name: "LoweredAtomicOr",
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: mips.AOR,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19839,6 +19865,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.AMOVW,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19853,6 +19880,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.AMOVD,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19866,6 +19894,7 @@ var opcodeTable = [...]opInfo{
+ auxType: auxSymOff,
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ALAA,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19882,6 +19911,7 @@ var opcodeTable = [...]opInfo{
+ auxType: auxSymOff,
+ argLen: 3,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ALAAG,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19909,6 +19939,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 4,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ACS,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19929,6 +19960,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 4,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ACSG,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19949,6 +19981,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ACS,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -19967,6 +20000,7 @@ var opcodeTable = [...]opInfo{
+ argLen: 3,
+ clobberFlags: true,
+ faultOnNilArg0: true,
++ hasSideEffects: true,
+ asm: s390x.ACSG,
+ reg: regInfo{
+ inputs: []inputInfo{
+@@ -21738,59 +21772,70 @@ var opcodeTable = [...]opInfo{
+ generic: true,
+ },
+ {
+- name: "AtomicStore32",
+- argLen: 3,
+- generic: true,
++ name: "AtomicStore32",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicStore64",
+- argLen: 3,
+- generic: true,
++ name: "AtomicStore64",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicStorePtrNoWB",
+- argLen: 3,
+- generic: true,
++ name: "AtomicStorePtrNoWB",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicExchange32",
+- argLen: 3,
+- generic: true,
++ name: "AtomicExchange32",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicExchange64",
+- argLen: 3,
+- generic: true,
++ name: "AtomicExchange64",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicAdd32",
+- argLen: 3,
+- generic: true,
++ name: "AtomicAdd32",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicAdd64",
+- argLen: 3,
+- generic: true,
++ name: "AtomicAdd64",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicCompareAndSwap32",
+- argLen: 4,
+- generic: true,
++ name: "AtomicCompareAndSwap32",
++ argLen: 4,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicCompareAndSwap64",
+- argLen: 4,
+- generic: true,
++ name: "AtomicCompareAndSwap64",
++ argLen: 4,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicAnd8",
+- argLen: 3,
+- generic: true,
++ name: "AtomicAnd8",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ {
+- name: "AtomicOr8",
+- argLen: 3,
+- generic: true,
++ name: "AtomicOr8",
++ argLen: 3,
++ hasSideEffects: true,
++ generic: true,
+ },
+ }
+
+diff --git a/test/fixedbugs/issue19182.go b/test/fixedbugs/issue19182.go
+new file mode 100644
+index 0000000..3a90ff4
+--- /dev/null
++++ b/test/fixedbugs/issue19182.go
+@@ -0,0 +1,36 @@
++// run
++
++// Copyright 2017 The Go Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package main
++
++import (
++ "fmt"
++ "runtime"
++ "sync/atomic"
++ "time"
++)
++
++var a uint64 = 0
++
++func main() {
++ runtime.GOMAXPROCS(2) // With just 1, infinite loop never yields
++
++ go func() {
++ for {
++ atomic.AddUint64(&a, uint64(1))
++ }
++ }()
++
++ time.Sleep(10 * time.Millisecond) // Short sleep is enough in passing case
++ i, val := 0, atomic.LoadUint64(&a)
++ for ; val == 0 && i < 100; val, i = atomic.LoadUint64(&a), i+1 {
++ time.Sleep(100 * time.Millisecond)
++ }
++ if val == 0 {
++ fmt.Printf("Failed to observe atomic increment after %d tries\n", i)
++ }
++
++}
+--
+2.10.2
+
diff --git a/dev-lang/go/go-1.8-r1.ebuild b/dev-lang/go/go-1.8-r1.ebuild
new file mode 100644
index 00000000000..b86d8f90242
--- /dev/null
+++ b/dev-lang/go/go-1.8-r1.ebuild
@@ -0,0 +1,231 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+export CBUILD=${CBUILD:-${CHOST}}
+export CTARGET=${CTARGET:-${CHOST}}
+
+MY_PV=${PV/_/}
+
+inherit toolchain-funcs
+
+BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist"
+BOOTSTRAP_VERSION="bootstrap-1.8"
+BOOTSTRAP_URI="
+amd64? ( ${BOOTSTRAP_DIST}/go-linux-amd64-${BOOTSTRAP_VERSION}.tbz )
+arm? ( ${BOOTSTRAP_DIST}/go-linux-arm-${BOOTSTRAP_VERSION}.tbz )
+arm64? ( ${BOOTSTRAP_DIST}/go-linux-arm64-${BOOTSTRAP_VERSION}.tbz )
+ppc64? (
+ ${BOOTSTRAP_DIST}/go-linux-ppc64-${BOOTSTRAP_VERSION}.tbz
+ ${BOOTSTRAP_DIST}/go-linux-ppc64le-${BOOTSTRAP_VERSION}.tbz
+)
+s390? ( ${BOOTSTRAP_DIST}/go-linux-s390x-${BOOTSTRAP_VERSION}.tbz )
+x86? ( ${BOOTSTRAP_DIST}/go-linux-386-${BOOTSTRAP_VERSION}.tbz )
+amd64-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-amd64-${BOOTSTRAP_VERSION}.tbz )
+x86-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-386-${BOOTSTRAP_VERSION}.tbz )
+x64-macos? ( ${BOOTSTRAP_DIST}/go-darwin-amd64-${BOOTSTRAP_VERSION}.tbz )
+x64-solaris? ( ${BOOTSTRAP_DIST}/go-solaris-amd64-${BOOTSTRAP_VERSION}.tbz )
+"
+
+case ${PV} in
+*9999*)
+ EGIT_REPO_URI="git://github.com/golang/go.git"
+ inherit git-r3
+ ;;
+*)
+ SRC_URI="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz "
+ S="${WORKDIR}"/go
+ case ${PV} in
+ *_beta*|*_rc*) ;;
+ *)
+ KEYWORDS="-* ~amd64 ~arm ~arm64 ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-macos ~x64-solaris"
+ # The upstream tests fail under portage but pass if the build is
+ # run according to their documentation [1].
+ # I am restricting the tests on released versions until this is
+ # solved.
+ # [1] https://golang.org/issues/18442
+ RESTRICT="test"
+ ;;
+ esac
+esac
+SRC_URI+="!gccgo? ( ${BOOTSTRAP_URI} )"
+
+DESCRIPTION="A concurrent garbage collected and typesafe programming language"
+HOMEPAGE="http://www.golang.org"
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+IUSE="gccgo"
+
+DEPEND="gccgo? ( >=sys-devel/gcc-5[go] )"
+RDEPEND="!<dev-go/go-tools-0_pre20150902"
+
+# These test data objects have writable/executable stacks.
+QA_EXECSTACK="
+ usr/lib/go/src/debug/elf/testdata/*.obj
+ usr/lib/go/src/go/internal/gccgoimporter/testdata/unicode.gox
+ usr/lib/go/src/go/internal/gccgoimporter/testdata/time.gox
+ "
+
+# Do not complain about CFLAGS, etc, since Go doesn't use them.
+QA_FLAGS_IGNORED='.*'
+
+REQUIRES_EXCLUDE="/usr/lib/go/src/debug/elf/testdata/*"
+
+# The tools in /usr/lib/go should not cause the multilib-strict check to fail.
+QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
+
+# Do not strip this package. Stripping is unsupported upstream and may
+# fail.
+RESTRICT+=" strip"
+
+DOCS=(
+AUTHORS
+CONTRIBUTING.md
+CONTRIBUTORS
+PATENTS
+README.md
+)
+
+PATCHES=(
+"${FILESDIR}"/${PV}-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
+)
+
+go_arch()
+{
+ # By chance most portage arch names match Go
+ local portage_arch=$(tc-arch $@)
+ case "${portage_arch}" in
+ x86) echo 386;;
+ x64-*) echo amd64;;
+ ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
+ s390) echo s390x ;;
+ *) echo "${portage_arch}";;
+ esac
+}
+
+go_arm()
+{
+ case "${1:-${CHOST}}" in
+ armv5*) echo 5;;
+ armv6*) echo 6;;
+ armv7*) echo 7;;
+ *)
+ die "unknown GOARM for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_os()
+{
+ case "${1:-${CHOST}}" in
+ *-linux*) echo linux;;
+ *-darwin*) echo darwin;;
+ *-freebsd*) echo freebsd;;
+ *-netbsd*) echo netbsd;;
+ *-openbsd*) echo openbsd;;
+ *-solaris*) echo solaris;;
+ *-cygwin*|*-interix*|*-winnt*)
+ echo windows
+ ;;
+ *)
+ die "unknown GOOS for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_tuple()
+{
+ echo "$(go_os $@)_$(go_arch $@)"
+}
+
+go_cross_compile()
+{
+ [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
+}
+
+pkg_pretend()
+{
+ # make.bash does not understand cross-compiling a cross-compiler
+ if [[ $(go_tuple) != $(go_tuple ${CTARGET}) ]]; then
+ die "CHOST CTARGET pair unsupported: CHOST=${CHOST} CTARGET=${CTARGET}"
+ fi
+}
+
+src_unpack()
+{
+ if [[ ${PV} = 9999 ]]; then
+ git-r3_src_unpack
+ fi
+ default
+}
+
+src_compile()
+{
+ export GOROOT_BOOTSTRAP="${WORKDIR}"/go-$(go_os)-$(go_arch)-bootstrap
+ if use gccgo; then
+ mkdir -p "${GOROOT_BOOTSTRAP}/bin" || die
+ local go_binary=$(gcc-config --get-bin-path)/go-$(gcc-major-version)
+ [[ -x ${go_binary} ]] || go_binary=$(
+ find "${EPREFIX}"/usr/${CHOST}/gcc-bin/*/go-$(gcc-major-version) |
+ sort -V | tail -n1)
+ [[ -x ${go_binary} ]] ||
+ die "go-$(gcc-major-version): command not found"
+ ln -s "${go_binary}" "${GOROOT_BOOTSTRAP}/bin/go" || die
+ fi
+ export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
+ export GOROOT="$(pwd)"
+ export GOBIN="${GOROOT}/bin"
+
+ # Go's build script does not use BUILD/HOST/TARGET consistently. :(
+ export GOHOSTARCH=$(go_arch ${CBUILD})
+ export GOHOSTOS=$(go_os ${CBUILD})
+ export CC=$(tc-getBUILD_CC)
+
+ export GOARCH=$(go_arch)
+ export GOOS=$(go_os)
+ export CC_FOR_TARGET=$(tc-getCC)
+ export CXX_FOR_TARGET=$(tc-getCXX)
+ if [[ ${ARCH} == arm ]]; then
+ export GOARM=$(go_arm)
+ fi
+ elog "GOROOT_BOOTSTRAP is ${GOROOT_BOOTSTRAP}"
+
+ cd src
+ ./make.bash || die "build failed"
+}
+
+src_test()
+{
+ go_cross_compile && return 0
+
+ cd src
+ PATH="${GOBIN}:${PATH}" \
+ ./run.bash -no-rebuild || die "tests failed"
+}
+
+src_install()
+{
+ local bin_path f x
+
+ dodir /usr/lib/go
+
+ # There is a known issue which requires the source tree to be installed [1].
+ # Once this is fixed, we can consider using the doc use flag to control
+ # installing the doc and src directories.
+ # [1] https://golang.org/issue/2775
+ #
+ # deliberately use cp to retain permissions
+ cp -R api bin doc lib pkg misc src test "${ED}"/usr/lib/go
+ if go_cross_compile; then
+ bin_path="bin/$(go_tuple)"
+ else
+ bin_path=bin
+ fi
+ for x in ${bin_path}/*; do
+ f=${x##*/}
+ dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
+ done
+ einstalldocs
+}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2017-05-17 17:19 William Hubbs
0 siblings, 0 replies; 6+ messages in thread
From: William Hubbs @ 2017-05-17 17:19 UTC (permalink / raw
To: gentoo-commits
commit: 0a3aa4763de942a37c1209d7aa75bf6fce61a2d5
Author: William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Wed May 17 17:18:31 2017 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Wed May 17 17:19:16 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0a3aa476
dev-lang/go: remove old versions
Package-Manager: Portage-2.3.5, Repoman-2.3.1
dev-lang/go/Manifest | 13 -
...-add-opcode-flag-hasSideEffects-for-do-no.patch | 738 ---------------------
dev-lang/go/go-1.7.5.ebuild | 221 ------
dev-lang/go/go-1.8-r1.ebuild | 231 -------
4 files changed, 1203 deletions(-)
diff --git a/dev-lang/go/Manifest b/dev-lang/go/Manifest
index c04d3006682..a6d0b0c3dea 100644
--- a/dev-lang/go/Manifest
+++ b/dev-lang/go/Manifest
@@ -1,25 +1,12 @@
DIST go-darwin-amd64-bootstrap-1.8.tbz 55053831 SHA256 1058dc305ad7b44b124d3d3eb2c579011b6c489a498e3313e4d0d089045ef3f7 SHA512 4cc24d44c84c94feafab021c0977fcea2aca8f191c6395e38fff68154b1e64efc3f94331c3e36c7b69901af58e9d53545c682f0a742d36b2d230508bd69777c4 WHIRLPOOL 52696cbe1129683e0cb0467b239723d29304d7f003317be6ce301118397166844489edaa7a15bf38e11dc205b50fafc326f4f35e2ed0d89e2fcb2701a6509838
-DIST go-darwin-amd64-bootstrap.tbz 48361403 SHA256 afb6cc976c404933e68ee3125fe8fbf94b57b9d8db8501d2bd1ce692468fbc9b SHA512 aefaad5abd58ed96cf5658bae2e931f162c2699fb248104837a279955dea6fe6cd4d582766379d2689c04bdc009c19a19f17585d8401d49d1fac772dcf385b93 WHIRLPOOL aa1c06103ae72f0b1c62cccd82b1fa88c5310d3baad2d9eddd173322c04ad7a7b7b9fb6ac9407c8002c6eebb8691cd415bca3d50a17548d52a5022001c6b93e2
DIST go-freebsd-386-bootstrap-1.8.tbz 53739013 SHA256 1e4afbb11aaa32d3de70fe3e407e519f100f09de3ac4f881d8410fc1345e13f9 SHA512 c92f849b2d92401657412cccc589042b2747e55b2f4813d674c5bc91c3f535ee60f8ed7b8cbf1320e216d22a16dade8b78bb8071982895901f2b3c304e38f478 WHIRLPOOL 80d973b0c0b8c2eb363ef171ee6f51d17d82997f3f1d192a68d4a18eea2413876b453dc5f673a827e781d2f2cb009b6fd91796599217435e7f0969cdece71698
-DIST go-freebsd-386-bootstrap-1.tbz 47180595 SHA256 6f8d5ee62a1d9022ebb7799b23306cc0bd7bd974c1b27312e97522dcc8044a2c SHA512 ef2b8defa7f81647d5e423f24a4ef708d5f50d514a0a29dd16f8728c8ec08a05144360cd19c04d8dcb1d3c891eb6252450522ca525b60fdb0a674225d113004a WHIRLPOOL acae3a9a09b55863de97b82e046b9a54bfda9725ff98d47f07baee9464fe855fc48b5df6f96144e7cb1779480f953ebc15a95724709d93848608803007c4b001
DIST go-freebsd-amd64-bootstrap-1.8.tbz 55103927 SHA256 4a6291e9044bc3e284943873b4a4868ee94515e1fb00416cabb9b19d6e8a40e7 SHA512 c7d50731ff41147295ef5f3233aa1404081b47e786a300e1d0e4db8348e56bd73fe5f169fe8b807ffa37a53683e3aef16ebb6e877d802b86ff1a3d5d3a6f44cb WHIRLPOOL e2c02a9ffcd82125de64c48abe4158a3bf352a02dea4b5ce34b345cb078fa97cf5cc65f874f454b9fb7776faa499cc16d9c50d035206c3172251a3ab365c9384
-DIST go-freebsd-amd64-bootstrap.tbz 48451024 SHA256 c5b16adab514352f49eb9ffef0d499e954d5d6bb6aefc8e98543d24e2a8fd7b7 SHA512 097a48c9b3b7541b6c4aab6fe9304b7df461e31543609b836842294a2acecf14243d0efc80282b2e442f6be92d7e189dddab6ffd4487b115d94113205452352e WHIRLPOOL 691cecccc01383bd874e687c3644ceab06c33d3c9c57da737c2c1f8208dcc6d99bc18968f50c4e466049069f219e39f34ee8a8b6af0f667f31ae011528f4c591
DIST go-linux-386-bootstrap-1.8.tbz 53843745 SHA256 da2172a6aa7593bbdae43d714989b5fd728e3a722cab9ccb599b5d159240152f SHA512 b456f7572d04c805a6fc756647c050460f76e5404dba41963c861c92f1600e9fedafe181a1f69132518065737a88edb4b183ec8c3ca24bc8df31279117e92606 WHIRLPOOL 8ae15f8963a842067f79a10741bed30e9b3b6d2bfeacb453dd4eae79ffdd86e214f361fba90b64013e0ce87238f151d985350ea2d7d1d82f7fc464a03ca25bb2
-DIST go-linux-386-bootstrap-1.tbz 47379010 SHA256 b1e5bef8500d6aa009238b391e4527781b88dd328e8a11ffd684af03beb81861 SHA512 85b71ae511a2981c32e700531ec0284615979b9d4515cd7e23bf109246da1788c9bd253c973af77c7ee9928efa5ca84034173ecdbeaf88b5c195e70cf4aebfde WHIRLPOOL 122b4b8e1501e049d55832b4c0e185bc9c47b6fd788b06cfb01b605d7fbb1912b291692de4e30b11e1ef71eaa59a6684fa7c03f91f9b7ade2142eb2d630ee979
DIST go-linux-amd64-bootstrap-1.8.tbz 55399105 SHA256 b21c5846d2837de48286c65026a2ce6bdd03fcc6bec5ba29861080a2d228999b SHA512 89d68cfe0e6ce4be690cf52a4a02b17ef2cae3538b057d4690bfd6e93727bcdc1cbc17cba3403e652bb95bffd25d44bdd4efd0014d1d2f019838bde925139f57 WHIRLPOOL 21f70e16e10c49f4b6462cc35329015588ae337045c9fc61a49fa985d03aa194f4be55cd146fd23060226162102789258e54ed3534726d470adf43cac84df586
-DIST go-linux-amd64-bootstrap.tbz 48722911 SHA256 0ab0842fb1f6cc6f10a85f225ff1a2b9e5e4b38128a7136d0c1896819421a986 SHA512 ce4dbc979b63a4612f4a8f7e7a6c5247e11bbc3a2d62ab0537a1b405ec8ab22f153012421d2240a7d6a4f91a79bb3f1370454f9e843fac43b99757c17134e5b7 WHIRLPOOL a94d0e0a1c44e3385d23f8973d15e6ef041450a3578c38987f158c4f9f231d315bc5204539d9dc7322cc9ecb96b7618b22d023f906474e1348c5d666792dff58
DIST go-linux-arm-bootstrap-1.8.tbz 53948103 SHA256 86593294a84d3085583cf3293df62ca82a119bfe560ff649e1af8b1b0e45ee79 SHA512 98ff0dbdb2aca9e54ea5327c9d31ce389e434a887015ef8555a8e85223a9998075c5013045275fb995a877a8d247704a21d726d46df7097adc0c4aa03af4cd68 WHIRLPOOL ba62849e86cf0f905f75affb4748d1c4cf9b0421bad5c726556d96a6e8f4bca0790b097b9b2a4145eb8e0a95458f589a6f14de586f22ca1969d279f8e7271959
-DIST go-linux-arm-bootstrap.tbz 46055976 SHA256 a44e33b95046e01fd7125c3cc3c34b13f83bbf692cddfd3e86e267da11de2a44 SHA512 a8cf3225dafd2f08b944e60d0fb6320b5e394646f5df2ca2464c76a2e6e6b72f4840ddcc65dc5f59c94907715780f1e25c73b480a79909d9455faad59ffd38d5 WHIRLPOOL 304bb37f94b8f5d0bd77c0d5faebed1cb627cc3b453c686d7297f6542ee3e0ddabc7139e13a21ee2f5a20caca273c63bcfbcbd4daf670b1dbfe77b599f8111ac
DIST go-linux-arm64-bootstrap-1.8.tbz 51947002 SHA256 773305a44482d4d4c5a9be5c5997b40772c6efe4a38bdd2750612463b7786a88 SHA512 adfbe62c5594c267707078bf8afb94a793dfba004c04a1a60f96d023d96c2fc4a6a422dee93a0f3487b1f2e1e117c7c6c607b62126dd5535686aaed88f6659d9 WHIRLPOOL b3af3c442d801b26b530a315d3aed17c2650064eb156c2fcb8da7f6597aa05eda5c425c6c14e881cce7b89ef83e9d6dc8480f789d2db2186a78ae95fbcb13520
-DIST go-linux-arm64-bootstrap.tbz 45369354 SHA256 810c998e6701580fe0f26d46c5796eefce648e252ff9d6d761304e60556b7fc0 SHA512 3f64869430c03efa77796ed74d07a337e2a205802485605cbdd67778a08e5ce041ce3925b7a5cca0a6b4ad24ab70e07ee54091b010f67ec7370a985022f5a21e WHIRLPOOL f6f470081d5f23c190310280aaf7454a4f58fe4e7545bbd219046711f8d27ce97cc5f5f1c207e777067d1f6332e4b3f2c819b178e899d21c2d5d1d466a42cc37
DIST go-linux-ppc64-bootstrap-1.8.tbz 52315782 SHA256 19eb3674c07a17dacec9620bc5ddcffa0264adf606e4c0d640c9f31644777ab3 SHA512 0aa32ac1514055ed9140b8c8330cbdbadfd9da6ad00b60d49b0685473be21e0b6510c31394678e32048f2f38d06a0d575f453c555614664eaef2bf5be6c91734 WHIRLPOOL 2363ce812af9c1dec331801477e979ef82a66d0ca92ac92f56fcb3bb264d96acdb6bfcd397d2c7b81cdc616a69571afa4343a0c64ebfc8ec7d6f8aab0ae4ece1
-DIST go-linux-ppc64-bootstrap.tbz 45266082 SHA256 89902cebaf93b95dea225b7304eedcae101d6fb83bba0fcdfee001361b4868c0 SHA512 d013a1a5953207505a9f7e0c5cfdc7f463d4669fd18b36cf1df10126e9d4c012252bc4d207dd4503c34301e76197d8e89a9ed9d9d0b8a3b54b62e782b4c39d7b WHIRLPOOL 3ec868d94e8452a3cdb49a1292f9f32ebeb813ea297e419849cdee28c8d952887feb70e1095ce109ff6b8bb81dee47b7eb6f275b15bb6f46422095c3b260f968
DIST go-linux-ppc64le-bootstrap-1.8.tbz 52211575 SHA256 4e05b8830a473756cfee3fc27a17e09b38ccfca4e2335a485b41d3fb9c342066 SHA512 6931d999dd0ee1ff44c4cec48acb27af061f57f87aa74802dcebab78553b46bc8ac732f07fe91e5074dbdd32c55b707994875934bfb12bb4276d71eb1d06c4ba WHIRLPOOL cdc392fc51b7bfdd28e1c29bffce88139b9447261c9dbffefb3910b9c7406505bd250309618bd6a8430dcfcecc9155f8d5fe94f9e848cc2e721776ba34c22c3a
-DIST go-linux-ppc64le-bootstrap.tbz 50134685 SHA256 ca816a3e3cbd7721200522fa39843de0bf546d0ac18e0d550e64b7cc33bea4f2 SHA512 da718166febe77b57f2f2edb18c921501a0eb7184a7e6f18411b5cba95fe0de185ef9d5e85be3632c5829e66008912d12b5259ca7fc330ad28026e53bb658e7f WHIRLPOOL 0d7875146f1bdc8f6af089f7f4b003d952419c51be7d519ca3474b39f67dbc88c6caa515f707ad9e6fac345e8a78f42d13eb794485ce18b6d90f7331ee16686c
DIST go-linux-s390x-bootstrap-1.8.tbz 57124869 SHA256 70bb859e80268b3421587d85189a807b14449b8c5e7b23606b87dfab54189634 SHA512 d429cae870d66217ab2e07c74209d3031d97baa4f899b4d70ae6283a1a5b1434b037904c4cfca0b2bc798d5ba0b358c3739e000eccbc74809baf564c5686df5a WHIRLPOOL d0475efcbc2c1cbb3c6db452dbeb2a5fe709fa56b65eba2fbbcce2296b6a04ba89b9e33579d6eab192cd63b45ad78a0d7afd458229e4b252e80bd2db260abf11
-DIST go-linux-s390x-bootstrap.tbz 49809007 SHA256 80a87bc5ac2239c99f8d7425fbc6f4fefba63f549b0835505c25378c08114656 SHA512 1b7500e6c42508b6cb07214620070065262349d2cd3698deeac0638d0bf0bfeb89c59c2d72a284af34f3071b4cfb9ce543c5fdec7add4a46adc9580295909439 WHIRLPOOL d3782cb515ab67720105224e02d96ab1ca86518db661719b2d0f7c48aa1f4f896a7cc5fed5b6ddc032c8206e8a10c6262646be0e59def61723936044d6ceb143
DIST go-solaris-amd64-bootstrap-1.8.tbz 54926326 SHA256 83053f333d56d72ddbe9a8f293f8afeff31739806d49ebaa144811a5438b17bc SHA512 52b849e5b9a940e10de7ba3df0ebdf6e1c5d631de9581d936c9edf8f38e6bb3314acbc2b2d5202b0528fde2a359d52bc0c6f39acf9b1b614725e4b4a947ed10d WHIRLPOOL 2d58085d88fa612a7dfb087df33d2c5ee6b6d4c0b0c0363d5dcef014a6e3e9703816e8a111d1348e1e1a4ebcdde58694a869a27ae42e0deec154529f1a794991
-DIST go-solaris-amd64-bootstrap.tbz 48367195 SHA256 92ebdbf001f243a78a6c2d8ee30e929ba2cecbedf8e0fc07e129b04b107453ad SHA512 cf8725db0d001d61badee71624799a3c9e75f61f77ab090c1f6c490d694c4be367019b28d88306045d877ab5a324a1f9b0674293caf3acb19c193fc3746a48f2 WHIRLPOOL 672c6642e340b6d4f38b633f67fdc3202e3725022a8a61e2129276fccd6c42ddc24ed06c1d57eb31a25ea8056b79686619cbb36431b9c23b6d4be5bcb715bd89
-DIST go1.7.5.src.tar.gz 14204325 SHA256 4e834513a2079f8cbbd357502cccaac9507fd00a1efe672375798858ff291815 SHA512 2dda0780a8b24d71fec4ddeb6858c58a42845f51d9afc171d924a7b763101878cc7f29ae1dd35f129b4ee45b84d45211093a1d20639745fed36b49fb7fe1ba07 WHIRLPOOL b28ab10558d9f8fba87d5db2c839a84eab0b61244d75f4b3d42b443365ca8a1ae1c60c2e1073ef2b4a854d957c26111fcc286b7caae4be892e6cba0e4b24e21d
DIST go1.8.1.src.tar.gz 15331455 SHA256 33daf4c03f86120fdfdc66bddf6bfff4661c7ca11c5da473e537f4d69b470e57 SHA512 f01fe7b35ac23101610f6fc169b88dafe2edc49b3b044d5d0aff771b05dcb2c8d2e7a5090ed6dbe67f861e78e792ace32e209ed464399ca02dcd186b13ec8037 WHIRLPOOL c358ca23740183afac4ecf83a6b7daeeef3e6481f29cb5f98b911cb1d661921db2e16ac2528f0ec59633920f1484e7fa777275e46313e20cc8b32baed9054d24
-DIST go1.8.src.tar.gz 15320083 SHA256 406865f587b44be7092f206d73fc1de252600b79b3cacc587b74b5ef5c623596 SHA512 9742dd8ec0364793e44a55207238c7339236a4da3a6e7cbb3b4eca45e957c7c0cb725e7d7430b9a04630285468d32dac686facfc57f3f58885b80bbb3d333ada WHIRLPOOL 62d7b1729d3a192142b7b1af20c797736ae631bb87e7c82487601e669d69547212669c216e66d0d64ad83884d348ed3dacf2f9fd9d923f85c673adadd0ff4aae
diff --git a/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch b/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
deleted file mode 100644
index c8ebf376f45..00000000000
--- a/dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
+++ /dev/null
@@ -1,738 +0,0 @@
-From 11b283092a29a9d402ce05706fd3a85683576218 Mon Sep 17 00:00:00 2001
-From: David Chase <drchase@google.com>
-Date: Tue, 21 Feb 2017 15:22:52 -0500
-Subject: [PATCH] cmd/compile: add opcode flag hasSideEffects for do-not-remove
-
-Added a flag to generic and various architectures' atomic
-operations that are judged to have observable side effects
-and thus cannot be dead-code-eliminated.
-
-Test requires GOMAXPROCS > 1 without preemption in loop.
-
-Fixes #19182.
-
-Change-Id: Id2230031abd2cca0bbb32fd68fc8a58fb912070f
-Reviewed-on: https://go-review.googlesource.com/37333
-Run-TryBot: David Chase <drchase@google.com>
-TryBot-Result: Gobot Gobot <gobot@golang.org>
-Reviewed-by: Cherry Zhang <cherryyz@google.com>
----
- src/cmd/compile/internal/ssa/deadcode.go | 2 +-
- src/cmd/compile/internal/ssa/gen/AMD64Ops.go | 16 ++--
- src/cmd/compile/internal/ssa/gen/ARM64Ops.go | 20 ++---
- src/cmd/compile/internal/ssa/gen/MIPSOps.go | 16 ++--
- src/cmd/compile/internal/ssa/gen/S390XOps.go | 16 ++--
- src/cmd/compile/internal/ssa/gen/genericOps.go | 28 +++----
- src/cmd/compile/internal/ssa/gen/main.go | 4 +
- src/cmd/compile/internal/ssa/op.go | 1 +
- src/cmd/compile/internal/ssa/opGen.go | 111 +++++++++++++++++--------
- test/fixedbugs/issue19182.go | 36 ++++++++
- 10 files changed, 168 insertions(+), 82 deletions(-)
- create mode 100644 test/fixedbugs/issue19182.go
-
-diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go
-index d75d2d5..ce786a9 100644
---- a/src/cmd/compile/internal/ssa/deadcode.go
-+++ b/src/cmd/compile/internal/ssa/deadcode.go
-@@ -64,7 +64,7 @@ func liveValues(f *Func, reachable []bool) []bool {
- q = append(q, v)
- }
- for _, v := range b.Values {
-- if opcodeTable[v.Op].call && !live[v.ID] {
-+ if (opcodeTable[v.Op].call || opcodeTable[v.Op].hasSideEffects) && !live[v.ID] {
- live[v.ID] = true
- q = append(q, v)
- }
-diff --git a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
-index cdd5539..1b73ac1 100644
---- a/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
-+++ b/src/cmd/compile/internal/ssa/gen/AMD64Ops.go
-@@ -548,15 +548,15 @@ func init() {
- // store arg0 to arg1+auxint+aux, arg2=mem.
- // These ops return a tuple of <old contents of *(arg1+auxint+aux), memory>.
- // Note: arg0 and arg1 are backwards compared to MOVLstore (to facilitate resultInArg0)!
-- {name: "XCHGL", argLength: 3, reg: gpstorexchg, asm: "XCHGL", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true},
-- {name: "XCHGQ", argLength: 3, reg: gpstorexchg, asm: "XCHGQ", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true},
-+ {name: "XCHGL", argLength: 3, reg: gpstorexchg, asm: "XCHGL", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, hasSideEffects: true},
-+ {name: "XCHGQ", argLength: 3, reg: gpstorexchg, asm: "XCHGQ", aux: "SymOff", resultInArg0: true, faultOnNilArg1: true, hasSideEffects: true},
-
- // Atomic adds.
- // *(arg1+auxint+aux) += arg0. arg2=mem.
- // Returns a tuple of <old contents of *(arg1+auxint+aux), memory>.
- // Note: arg0 and arg1 are backwards compared to MOVLstore (to facilitate resultInArg0)!
-- {name: "XADDLlock", argLength: 3, reg: gpstorexchg, asm: "XADDL", typ: "(UInt32,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true},
-- {name: "XADDQlock", argLength: 3, reg: gpstorexchg, asm: "XADDQ", typ: "(UInt64,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true},
-+ {name: "XADDLlock", argLength: 3, reg: gpstorexchg, asm: "XADDL", typ: "(UInt32,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, hasSideEffects: true},
-+ {name: "XADDQlock", argLength: 3, reg: gpstorexchg, asm: "XADDQ", typ: "(UInt64,Mem)", aux: "SymOff", resultInArg0: true, clobberFlags: true, faultOnNilArg1: true, hasSideEffects: true},
- {name: "AddTupleFirst32", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
- {name: "AddTupleFirst64", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
-
-@@ -579,12 +579,12 @@ func init() {
- // JEQ ...
- // but we can't do that because memory-using ops can't generate flags yet
- // (flagalloc wants to move flag-generating instructions around).
-- {name: "CMPXCHGLlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-- {name: "CMPXCHGQlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-+ {name: "CMPXCHGLlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGL", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "CMPXCHGQlock", argLength: 4, reg: cmpxchg, asm: "CMPXCHGQ", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // Atomic memory updates.
-- {name: "ANDBlock", argLength: 3, reg: gpstore, asm: "ANDB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true}, // *(arg0+auxint+aux) &= arg1
-- {name: "ORBlock", argLength: 3, reg: gpstore, asm: "ORB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true}, // *(arg0+auxint+aux) |= arg1
-+ {name: "ANDBlock", argLength: 3, reg: gpstore, asm: "ANDB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true}, // *(arg0+auxint+aux) &= arg1
-+ {name: "ORBlock", argLength: 3, reg: gpstore, asm: "ORB", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true}, // *(arg0+auxint+aux) |= arg1
- }
-
- var AMD64blocks = []blockData{
-diff --git a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
-index e8d5be2..0986ac6 100644
---- a/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
-+++ b/src/cmd/compile/internal/ssa/gen/ARM64Ops.go
-@@ -456,16 +456,16 @@ func init() {
-
- // atomic stores.
- // store arg1 to arg0. arg2=mem. returns memory. auxint must be zero.
-- {name: "STLR", argLength: 3, reg: gpstore, asm: "STLR", faultOnNilArg0: true},
-- {name: "STLRW", argLength: 3, reg: gpstore, asm: "STLRW", faultOnNilArg0: true},
-+ {name: "STLR", argLength: 3, reg: gpstore, asm: "STLR", faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "STLRW", argLength: 3, reg: gpstore, asm: "STLRW", faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic exchange.
- // store arg1 to arg0. arg2=mem. returns <old content of *arg0, memory>. auxint must be zero.
- // LDAXR (Rarg0), Rout
- // STLXR Rarg1, (Rarg0), Rtmp
- // CBNZ Rtmp, -2(PC)
-- {name: "LoweredAtomicExchange64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicExchange32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicExchange64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicExchange32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic add.
- // *arg0 += arg1. arg2=mem. returns <new content of *arg0, memory>. auxint must be zero.
-@@ -473,8 +473,8 @@ func init() {
- // ADD Rarg1, Rout
- // STLXR Rout, (Rarg0), Rtmp
- // CBNZ Rtmp, -3(PC)
-- {name: "LoweredAtomicAdd64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicAdd32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicAdd64", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicAdd32", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic compare and swap.
- // arg0 = pointer, arg1 = old value, arg2 = new value, arg3 = memory. auxint must be zero.
-@@ -490,8 +490,8 @@ func init() {
- // STLXR Rarg2, (Rarg0), Rtmp
- // CBNZ Rtmp, -4(PC)
- // CSET EQ, Rout
-- {name: "LoweredAtomicCas64", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicCas32", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicCas64", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicCas32", argLength: 4, reg: gpcas, resultNotInArgs: true, clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic and/or.
- // *arg0 &= (|=) arg1. arg2=mem. returns memory. auxint must be zero.
-@@ -499,8 +499,8 @@ func init() {
- // AND/OR Rarg1, Rtmp
- // STLXRB Rtmp, (Rarg0), Rtmp
- // CBNZ Rtmp, -3(PC)
-- {name: "LoweredAtomicAnd8", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true},
-- {name: "LoweredAtomicOr8", argLength: 3, reg: gpstore, asm: "ORR", faultOnNilArg0: true},
-+ {name: "LoweredAtomicAnd8", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicOr8", argLength: 3, reg: gpstore, asm: "ORR", faultOnNilArg0: true, hasSideEffects: true},
- }
-
- blocks := []blockData{
-diff --git a/src/cmd/compile/internal/ssa/gen/MIPSOps.go b/src/cmd/compile/internal/ssa/gen/MIPSOps.go
-index 78b961f..3d88b71 100644
---- a/src/cmd/compile/internal/ssa/gen/MIPSOps.go
-+++ b/src/cmd/compile/internal/ssa/gen/MIPSOps.go
-@@ -267,8 +267,8 @@ func init() {
- // SYNC
- // MOVW Rarg1, (Rarg0)
- // SYNC
-- {name: "LoweredAtomicStore", argLength: 3, reg: gpstore, faultOnNilArg0: true},
-- {name: "LoweredAtomicStorezero", argLength: 2, reg: gpstore0, faultOnNilArg0: true},
-+ {name: "LoweredAtomicStore", argLength: 3, reg: gpstore, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicStorezero", argLength: 2, reg: gpstore0, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic exchange.
- // store arg1 to arg0. arg2=mem. returns <old content of *arg0, memory>.
-@@ -278,7 +278,7 @@ func init() {
- // SC Rtmp, (Rarg0)
- // BEQ Rtmp, -3(PC)
- // SYNC
-- {name: "LoweredAtomicExchange", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicExchange", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic add.
- // *arg0 += arg1. arg2=mem. returns <new content of *arg0, memory>.
-@@ -289,8 +289,8 @@ func init() {
- // BEQ Rtmp, -3(PC)
- // SYNC
- // ADDU Rarg1, Rout
-- {name: "LoweredAtomicAdd", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicAddconst", argLength: 2, reg: regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}}, aux: "Int32", resultNotInArgs: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicAdd", argLength: 3, reg: gpxchg, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicAddconst", argLength: 2, reg: regInfo{inputs: []regMask{gpspsbg}, outputs: []regMask{gp}}, aux: "Int32", resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic compare and swap.
- // arg0 = pointer, arg1 = old value, arg2 = new value, arg3 = memory.
-@@ -308,7 +308,7 @@ func init() {
- // SC Rout, (Rarg0)
- // BEQ Rout, -4(PC)
- // SYNC
-- {name: "LoweredAtomicCas", argLength: 4, reg: gpcas, resultNotInArgs: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicCas", argLength: 4, reg: gpcas, resultNotInArgs: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // atomic and/or.
- // *arg0 &= (|=) arg1. arg2=mem. returns memory.
-@@ -318,8 +318,8 @@ func init() {
- // SC Rtmp, (Rarg0)
- // BEQ Rtmp, -3(PC)
- // SYNC
-- {name: "LoweredAtomicAnd", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true},
-- {name: "LoweredAtomicOr", argLength: 3, reg: gpstore, asm: "OR", faultOnNilArg0: true},
-+ {name: "LoweredAtomicAnd", argLength: 3, reg: gpstore, asm: "AND", faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicOr", argLength: 3, reg: gpstore, asm: "OR", faultOnNilArg0: true, hasSideEffects: true},
-
- // large or unaligned zeroing
- // arg0 = address of memory to zero (in R1, changed as side effect)
-diff --git a/src/cmd/compile/internal/ssa/gen/S390XOps.go b/src/cmd/compile/internal/ssa/gen/S390XOps.go
-index 4c5f070..40ba252 100644
---- a/src/cmd/compile/internal/ssa/gen/S390XOps.go
-+++ b/src/cmd/compile/internal/ssa/gen/S390XOps.go
-@@ -429,14 +429,14 @@ func init() {
-
- // Atomic stores. These are just normal stores.
- // store arg1 to arg0+auxint+aux. arg2=mem.
-- {name: "MOVWatomicstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true},
-- {name: "MOVDatomicstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true},
-+ {name: "MOVWatomicstore", argLength: 3, reg: gpstore, asm: "MOVW", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "MOVDatomicstore", argLength: 3, reg: gpstore, asm: "MOVD", aux: "SymOff", typ: "Mem", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // Atomic adds.
- // *(arg0+auxint+aux) += arg1. arg2=mem.
- // Returns a tuple of <old contents of *(arg0+auxint+aux), memory>.
-- {name: "LAA", argLength: 3, reg: gpstorelaa, asm: "LAA", typ: "(UInt32,Mem)", aux: "SymOff", faultOnNilArg0: true},
-- {name: "LAAG", argLength: 3, reg: gpstorelaa, asm: "LAAG", typ: "(UInt64,Mem)", aux: "SymOff", faultOnNilArg0: true},
-+ {name: "LAA", argLength: 3, reg: gpstorelaa, asm: "LAA", typ: "(UInt32,Mem)", aux: "SymOff", faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LAAG", argLength: 3, reg: gpstorelaa, asm: "LAAG", typ: "(UInt64,Mem)", aux: "SymOff", faultOnNilArg0: true, hasSideEffects: true},
- {name: "AddTupleFirst32", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
- {name: "AddTupleFirst64", argLength: 2}, // arg0=tuple <x,y>. Returns <x+arg1,y>.
-
-@@ -461,13 +461,13 @@ func init() {
- // BEQ ...
- // but we can't do that because memory-using ops can't generate flags yet
- // (flagalloc wants to move flag-generating instructions around).
-- {name: "LoweredAtomicCas32", argLength: 4, reg: cas, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicCas64", argLength: 4, reg: cas, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicCas32", argLength: 4, reg: cas, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicCas64", argLength: 4, reg: cas, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // Lowered atomic swaps, emulated using compare-and-swap.
- // store arg1 to arg0+auxint+aux, arg2=mem.
-- {name: "LoweredAtomicExchange32", argLength: 3, reg: exchange, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-- {name: "LoweredAtomicExchange64", argLength: 3, reg: exchange, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true},
-+ {name: "LoweredAtomicExchange32", argLength: 3, reg: exchange, asm: "CS", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-+ {name: "LoweredAtomicExchange64", argLength: 3, reg: exchange, asm: "CSG", aux: "SymOff", clobberFlags: true, faultOnNilArg0: true, hasSideEffects: true},
-
- // find leftmost one
- {
-diff --git a/src/cmd/compile/internal/ssa/gen/genericOps.go b/src/cmd/compile/internal/ssa/gen/genericOps.go
-index f39598e..3854a39 100644
---- a/src/cmd/compile/internal/ssa/gen/genericOps.go
-+++ b/src/cmd/compile/internal/ssa/gen/genericOps.go
-@@ -441,20 +441,20 @@ var genericOps = []opData{
- // Atomic loads return a new memory so that the loads are properly ordered
- // with respect to other loads and stores.
- // TODO: use for sync/atomic at some point.
-- {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-- {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-- {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-- {name: "AtomicStore32", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-- {name: "AtomicStore64", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-- {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem"}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-- {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)"}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
-- {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)"}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
-- {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)"}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
-- {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)"}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
-- {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)"}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
-- {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)"}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
-- {name: "AtomicAnd8", argLength: 3, typ: "Mem"}, // *arg0 &= arg1. arg2=memory. Returns memory.
-- {name: "AtomicOr8", argLength: 3, typ: "Mem"}, // *arg0 |= arg1. arg2=memory. Returns memory.
-+ {name: "AtomicLoad32", argLength: 2, typ: "(UInt32,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-+ {name: "AtomicLoad64", argLength: 2, typ: "(UInt64,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-+ {name: "AtomicLoadPtr", argLength: 2, typ: "(BytePtr,Mem)"}, // Load from arg0. arg1=memory. Returns loaded value and new memory.
-+ {name: "AtomicStore32", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-+ {name: "AtomicStore64", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-+ {name: "AtomicStorePtrNoWB", argLength: 3, typ: "Mem", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns memory.
-+ {name: "AtomicExchange32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
-+ {name: "AtomicExchange64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true}, // Store arg1 to *arg0. arg2=memory. Returns old contents of *arg0 and new memory.
-+ {name: "AtomicAdd32", argLength: 3, typ: "(UInt32,Mem)", hasSideEffects: true}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
-+ {name: "AtomicAdd64", argLength: 3, typ: "(UInt64,Mem)", hasSideEffects: true}, // Do *arg0 += arg1. arg2=memory. Returns sum and new memory.
-+ {name: "AtomicCompareAndSwap32", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
-+ {name: "AtomicCompareAndSwap64", argLength: 4, typ: "(Bool,Mem)", hasSideEffects: true}, // if *arg0==arg1, then set *arg0=arg2. Returns true iff store happens and new memory.
-+ {name: "AtomicAnd8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 &= arg1. arg2=memory. Returns memory.
-+ {name: "AtomicOr8", argLength: 3, typ: "Mem", hasSideEffects: true}, // *arg0 |= arg1. arg2=memory. Returns memory.
- }
-
- // kind control successors implicit exit
-diff --git a/src/cmd/compile/internal/ssa/gen/main.go b/src/cmd/compile/internal/ssa/gen/main.go
-index 41199f7..19b904a 100644
---- a/src/cmd/compile/internal/ssa/gen/main.go
-+++ b/src/cmd/compile/internal/ssa/gen/main.go
-@@ -52,6 +52,7 @@ type opData struct {
- faultOnNilArg0 bool // this op will fault if arg0 is nil (and aux encodes a small offset)
- faultOnNilArg1 bool // this op will fault if arg1 is nil (and aux encodes a small offset)
- usesScratch bool // this op requires scratch memory space
-+ hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182.
- }
-
- type blockData struct {
-@@ -208,6 +209,9 @@ func genOp() {
- if v.usesScratch {
- fmt.Fprintln(w, "usesScratch: true,")
- }
-+ if v.hasSideEffects {
-+ fmt.Fprintln(w, "hasSideEffects: true,")
-+ }
- if a.name == "generic" {
- fmt.Fprintln(w, "generic:true,")
- fmt.Fprintln(w, "},") // close op
-diff --git a/src/cmd/compile/internal/ssa/op.go b/src/cmd/compile/internal/ssa/op.go
-index 4c3164f..37b2f74 100644
---- a/src/cmd/compile/internal/ssa/op.go
-+++ b/src/cmd/compile/internal/ssa/op.go
-@@ -34,6 +34,7 @@ type opInfo struct {
- faultOnNilArg0 bool // this op will fault if arg0 is nil (and aux encodes a small offset)
- faultOnNilArg1 bool // this op will fault if arg1 is nil (and aux encodes a small offset)
- usesScratch bool // this op requires scratch memory space
-+ hasSideEffects bool // for "reasons", not to be eliminated. E.g., atomic store, #19182.
- }
-
- type inputInfo struct {
-diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go
-index 26bcbe0..7a96216 100644
---- a/src/cmd/compile/internal/ssa/opGen.go
-+++ b/src/cmd/compile/internal/ssa/opGen.go
-@@ -7632,6 +7632,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultInArg0: true,
- faultOnNilArg1: true,
-+ hasSideEffects: true,
- asm: x86.AXCHGL,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7649,6 +7650,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultInArg0: true,
- faultOnNilArg1: true,
-+ hasSideEffects: true,
- asm: x86.AXCHGQ,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7667,6 +7669,7 @@ var opcodeTable = [...]opInfo{
- resultInArg0: true,
- clobberFlags: true,
- faultOnNilArg1: true,
-+ hasSideEffects: true,
- asm: x86.AXADDL,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7685,6 +7688,7 @@ var opcodeTable = [...]opInfo{
- resultInArg0: true,
- clobberFlags: true,
- faultOnNilArg1: true,
-+ hasSideEffects: true,
- asm: x86.AXADDQ,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7712,6 +7716,7 @@ var opcodeTable = [...]opInfo{
- argLen: 4,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: x86.ACMPXCHGL,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7732,6 +7737,7 @@ var opcodeTable = [...]opInfo{
- argLen: 4,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: x86.ACMPXCHGQ,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7752,6 +7758,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: x86.AANDB,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -7766,6 +7773,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: x86.AORB,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -12982,6 +12990,7 @@ var opcodeTable = [...]opInfo{
- name: "STLR",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: arm64.ASTLR,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -12994,6 +13003,7 @@ var opcodeTable = [...]opInfo{
- name: "STLRW",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: arm64.ASTLRW,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -13007,6 +13017,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13022,6 +13033,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13037,6 +13049,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13052,6 +13065,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13068,6 +13082,7 @@ var opcodeTable = [...]opInfo{
- resultNotInArgs: true,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13085,6 +13100,7 @@ var opcodeTable = [...]opInfo{
- resultNotInArgs: true,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 805044223}, // R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R19 R20 R21 R22 R23 R24 R25 R26 g R30
-@@ -13100,6 +13116,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicAnd8",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: arm64.AAND,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -13112,6 +13129,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicOr8",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: arm64.AORR,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -14302,6 +14320,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicStore",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
-@@ -14313,6 +14332,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicStorezero",
- argLen: 2,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 140738025226238}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 SP g R31 SB
-@@ -14324,6 +14344,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
-@@ -14339,6 +14360,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
-@@ -14355,6 +14377,7 @@ var opcodeTable = [...]opInfo{
- argLen: 2,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 140738025226238}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 SP g R31 SB
-@@ -14369,6 +14392,7 @@ var opcodeTable = [...]opInfo{
- argLen: 4,
- resultNotInArgs: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 469762046}, // R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R24 R25 R28 g R31
-@@ -14384,6 +14408,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicAnd",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: mips.AAND,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -14396,6 +14421,7 @@ var opcodeTable = [...]opInfo{
- name: "LoweredAtomicOr",
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: mips.AOR,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19839,6 +19865,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.AMOVW,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19853,6 +19880,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.AMOVD,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19866,6 +19894,7 @@ var opcodeTable = [...]opInfo{
- auxType: auxSymOff,
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ALAA,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19882,6 +19911,7 @@ var opcodeTable = [...]opInfo{
- auxType: auxSymOff,
- argLen: 3,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ALAAG,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19909,6 +19939,7 @@ var opcodeTable = [...]opInfo{
- argLen: 4,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ACS,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19929,6 +19960,7 @@ var opcodeTable = [...]opInfo{
- argLen: 4,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ACSG,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19949,6 +19981,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ACS,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -19967,6 +20000,7 @@ var opcodeTable = [...]opInfo{
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
-+ hasSideEffects: true,
- asm: s390x.ACSG,
- reg: regInfo{
- inputs: []inputInfo{
-@@ -21738,59 +21772,70 @@ var opcodeTable = [...]opInfo{
- generic: true,
- },
- {
-- name: "AtomicStore32",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicStore32",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicStore64",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicStore64",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicStorePtrNoWB",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicStorePtrNoWB",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicExchange32",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicExchange32",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicExchange64",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicExchange64",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicAdd32",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicAdd32",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicAdd64",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicAdd64",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicCompareAndSwap32",
-- argLen: 4,
-- generic: true,
-+ name: "AtomicCompareAndSwap32",
-+ argLen: 4,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicCompareAndSwap64",
-- argLen: 4,
-- generic: true,
-+ name: "AtomicCompareAndSwap64",
-+ argLen: 4,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicAnd8",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicAnd8",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- {
-- name: "AtomicOr8",
-- argLen: 3,
-- generic: true,
-+ name: "AtomicOr8",
-+ argLen: 3,
-+ hasSideEffects: true,
-+ generic: true,
- },
- }
-
-diff --git a/test/fixedbugs/issue19182.go b/test/fixedbugs/issue19182.go
-new file mode 100644
-index 0000000..3a90ff4
---- /dev/null
-+++ b/test/fixedbugs/issue19182.go
-@@ -0,0 +1,36 @@
-+// run
-+
-+// Copyright 2017 The Go Authors. All rights reserved.
-+// Use of this source code is governed by a BSD-style
-+// license that can be found in the LICENSE file.
-+
-+package main
-+
-+import (
-+ "fmt"
-+ "runtime"
-+ "sync/atomic"
-+ "time"
-+)
-+
-+var a uint64 = 0
-+
-+func main() {
-+ runtime.GOMAXPROCS(2) // With just 1, infinite loop never yields
-+
-+ go func() {
-+ for {
-+ atomic.AddUint64(&a, uint64(1))
-+ }
-+ }()
-+
-+ time.Sleep(10 * time.Millisecond) // Short sleep is enough in passing case
-+ i, val := 0, atomic.LoadUint64(&a)
-+ for ; val == 0 && i < 100; val, i = atomic.LoadUint64(&a), i+1 {
-+ time.Sleep(100 * time.Millisecond)
-+ }
-+ if val == 0 {
-+ fmt.Printf("Failed to observe atomic increment after %d tries\n", i)
-+ }
-+
-+}
---
-2.10.2
-
diff --git a/dev-lang/go/go-1.7.5.ebuild b/dev-lang/go/go-1.7.5.ebuild
deleted file mode 100644
index 97b147485ed..00000000000
--- a/dev-lang/go/go-1.7.5.ebuild
+++ /dev/null
@@ -1,221 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-export CBUILD=${CBUILD:-${CHOST}}
-export CTARGET=${CTARGET:-${CHOST}}
-
-MY_PV=${PV/_/}
-
-inherit toolchain-funcs
-
-BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist"
-SRC_URI="!gccgo? (
-kernel_Darwin? (
- x64-macos? ( ${BOOTSTRAP_DIST}/go-darwin-amd64-bootstrap.tbz )
-)
-kernel_FreeBSD? (
-amd64-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-amd64-bootstrap.tbz )
-x86-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-386-bootstrap-1.tbz )
-)
-kernel_linux? (
- amd64? ( ${BOOTSTRAP_DIST}/go-linux-amd64-bootstrap.tbz )
- arm? ( ${BOOTSTRAP_DIST}/go-linux-arm-bootstrap.tbz )
- arm64? ( ${BOOTSTRAP_DIST}/go-linux-arm64-bootstrap.tbz )
- ppc64? (
- ${BOOTSTRAP_DIST}/go-linux-ppc64-bootstrap.tbz
- ${BOOTSTRAP_DIST}/go-linux-ppc64le-bootstrap.tbz
- )
- s390? ( ${BOOTSTRAP_DIST}/go-linux-s390x-bootstrap.tbz )
- x86? ( ${BOOTSTRAP_DIST}/go-linux-386-bootstrap-1.tbz )
-)
-kernel_SunOS? (
- x64-solaris? ( ${BOOTSTRAP_DIST}/go-solaris-amd64-bootstrap.tbz )
-)
-)
-"
-
-if [[ ${PV} = 9999 ]]; then
- EGIT_REPO_URI="git://github.com/golang/go.git"
- inherit git-r3
-else
- SRC_URI+="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz"
- case ${PV} in
- *9999*|*_rc*) ;;
- *)
- KEYWORDS="-* amd64 arm arm64 ppc64 x86 ~amd64-fbsd ~x86-fbsd ~x64-macos ~x64-solaris"
- ;;
- esac
-fi
-
-DESCRIPTION="A concurrent garbage collected and typesafe programming language"
-HOMEPAGE="http://www.golang.org"
-
-LICENSE="BSD"
-SLOT="0/${PV}"
-IUSE="gccgo"
-
-DEPEND="gccgo? ( >=sys-devel/gcc-5[go] )"
-RDEPEND="!<dev-go/go-tools-0_pre20150902"
-
-# These test data objects have writable/executable stacks.
-QA_EXECSTACK="usr/lib/go/src/debug/elf/testdata/*.obj"
-
-# Do not complain about CFLAGS, etc, since Go doesn't use them.
-QA_FLAGS_IGNORED='.*'
-
-REQUIRES_EXCLUDE="/usr/lib/go/src/debug/elf/testdata/*"
-
-# The tools in /usr/lib/go should not cause the multilib-strict check to fail.
-QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
-
-# The go language uses *.a files which are _NOT_ libraries and should not be
-# stripped. The test data objects should also be left alone and unstripped.
-STRIP_MASK="/usr/lib/go/pkg/*.a
- /usr/lib/go/src/debug/elf/testdata/*
- /usr/lib/go/src/debug/dwarf/testdata/*
- /usr/lib/go/src/runtime/race/*.syso"
-
-if [[ ${PV} != 9999 ]]; then
- S="${WORKDIR}"/go
-fi
-
-go_arch()
-{
- # By chance most portage arch names match Go
- local portage_arch=$(tc-arch $@)
- case "${portage_arch}" in
- x86) echo 386;;
- x64-*) echo amd64;;
- ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
- s390) echo s390x ;;
- *) echo "${portage_arch}";;
- esac
-}
-
-go_arm()
-{
- case "${1:-${CHOST}}" in
- armv5*) echo 5;;
- armv6*) echo 6;;
- armv7*) echo 7;;
- *)
- die "unknown GOARM for ${1:-${CHOST}}"
- ;;
- esac
-}
-
-go_os()
-{
- case "${1:-${CHOST}}" in
- *-linux*) echo linux;;
- *-darwin*) echo darwin;;
- *-freebsd*) echo freebsd;;
- *-netbsd*) echo netbsd;;
- *-openbsd*) echo openbsd;;
- *-solaris*) echo solaris;;
- *-cygwin*|*-interix*|*-winnt*)
- echo windows
- ;;
- *)
- die "unknown GOOS for ${1:-${CHOST}}"
- ;;
- esac
-}
-
-go_tuple()
-{
- echo "$(go_os $@)_$(go_arch $@)"
-}
-
-go_cross_compile()
-{
- [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
-}
-
-pkg_pretend()
-{
- # make.bash does not understand cross-compiling a cross-compiler
- if [[ $(go_tuple) != $(go_tuple ${CTARGET}) ]]; then
- die "CHOST CTARGET pair unsupported: CHOST=${CHOST} CTARGET=${CTARGET}"
- fi
-}
-
-src_unpack()
-{
- if [[ ${PV} = 9999 ]]; then
- git-r3_src_unpack
- fi
- default
-}
-
-src_compile()
-{
- export GOROOT_BOOTSTRAP="${WORKDIR}"/go-$(go_os)-$(go_arch)-bootstrap
- if use gccgo; then
- mkdir -p "${GOROOT_BOOTSTRAP}/bin" || die
- local go_binary=$(gcc-config --get-bin-path)/go-5
- [[ -x ${go_binary} ]] || go_binary=$(
- find "${EPREFIX}"/usr/${CHOST}/gcc-bin/*/go-5 | sort -V | tail -n1)
- [[ -x ${go_binary} ]] || die "go-5: command not found"
- ln -s "${go_binary}" "${GOROOT_BOOTSTRAP}/bin/go" || die
- fi
- export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
- export GOROOT="$(pwd)"
- export GOBIN="${GOROOT}/bin"
-
- # Go's build script does not use BUILD/HOST/TARGET consistently. :(
- export GOHOSTARCH=$(go_arch ${CBUILD})
- export GOHOSTOS=$(go_os ${CBUILD})
- export CC=$(tc-getBUILD_CC)
-
- export GOARCH=$(go_arch)
- export GOOS=$(go_os)
- export CC_FOR_TARGET=$(tc-getCC)
- export CXX_FOR_TARGET=$(tc-getCXX)
- if [[ ${ARCH} == arm ]]; then
- export GOARM=$(go_arm)
- fi
- einfo "GOROOT_BOOTSTRAP is ${GOROOT_BOOTSTRAP}"
-
- cd src
- ./make.bash || die "build failed"
-}
-
-src_test()
-{
- go_cross_compile && return 0
-
- cd src
- PATH="${GOBIN}:${PATH}" \
- ./run.bash -no-rebuild || die "tests failed"
-}
-
-src_install()
-{
- local bin_path f x
-
- dodir /usr/lib/go
- insinto /usr/lib/go
-
- # There is a known issue which requires the source tree to be installed [1].
- # Once this is fixed, we can consider using the doc use flag to control
- # installing the doc and src directories.
- # [1] https://golang.org/issue/2775
- doins -r bin doc lib pkg src
- fperms -R +x /usr/lib/go/bin /usr/lib/go/pkg/tool
-
- cp -a misc "${D}"/usr/lib/go/misc
-
- if go_cross_compile; then
- bin_path="bin/$(go_tuple)"
- else
- bin_path=bin
- fi
- for x in ${bin_path}/*; do
- f=${x##*/}
- dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
- done
- dodoc AUTHORS CONTRIBUTORS PATENTS README.md
-}
diff --git a/dev-lang/go/go-1.8-r1.ebuild b/dev-lang/go/go-1.8-r1.ebuild
deleted file mode 100644
index e5b9424d9ce..00000000000
--- a/dev-lang/go/go-1.8-r1.ebuild
+++ /dev/null
@@ -1,231 +0,0 @@
-# Copyright 1999-2017 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-export CBUILD=${CBUILD:-${CHOST}}
-export CTARGET=${CTARGET:-${CHOST}}
-
-MY_PV=${PV/_/}
-
-inherit toolchain-funcs
-
-BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist"
-BOOTSTRAP_VERSION="bootstrap-1.8"
-BOOTSTRAP_URI="
-amd64? ( ${BOOTSTRAP_DIST}/go-linux-amd64-${BOOTSTRAP_VERSION}.tbz )
-arm? ( ${BOOTSTRAP_DIST}/go-linux-arm-${BOOTSTRAP_VERSION}.tbz )
-arm64? ( ${BOOTSTRAP_DIST}/go-linux-arm64-${BOOTSTRAP_VERSION}.tbz )
-ppc64? (
- ${BOOTSTRAP_DIST}/go-linux-ppc64-${BOOTSTRAP_VERSION}.tbz
- ${BOOTSTRAP_DIST}/go-linux-ppc64le-${BOOTSTRAP_VERSION}.tbz
-)
-s390? ( ${BOOTSTRAP_DIST}/go-linux-s390x-${BOOTSTRAP_VERSION}.tbz )
-x86? ( ${BOOTSTRAP_DIST}/go-linux-386-${BOOTSTRAP_VERSION}.tbz )
-amd64-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-amd64-${BOOTSTRAP_VERSION}.tbz )
-x86-fbsd? ( ${BOOTSTRAP_DIST}/go-freebsd-386-${BOOTSTRAP_VERSION}.tbz )
-x64-macos? ( ${BOOTSTRAP_DIST}/go-darwin-amd64-${BOOTSTRAP_VERSION}.tbz )
-x64-solaris? ( ${BOOTSTRAP_DIST}/go-solaris-amd64-${BOOTSTRAP_VERSION}.tbz )
-"
-
-case ${PV} in
-*9999*)
- EGIT_REPO_URI="git://github.com/golang/go.git"
- inherit git-r3
- ;;
-*)
- SRC_URI="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz "
- S="${WORKDIR}"/go
- case ${PV} in
- *_beta*|*_rc*) ;;
- *)
- KEYWORDS="-* ~amd64 ~arm ~arm64 ~ppc64 ~x86 ~amd64-fbsd ~x86-fbsd ~x64-macos ~x64-solaris"
- # The upstream tests fail under portage but pass if the build is
- # run according to their documentation [1].
- # I am restricting the tests on released versions until this is
- # solved.
- # [1] https://golang.org/issues/18442
- RESTRICT="test"
- ;;
- esac
-esac
-SRC_URI+="!gccgo? ( ${BOOTSTRAP_URI} )"
-
-DESCRIPTION="A concurrent garbage collected and typesafe programming language"
-HOMEPAGE="http://www.golang.org"
-
-LICENSE="BSD"
-SLOT="0/${PV}"
-IUSE="gccgo"
-
-DEPEND="gccgo? ( >=sys-devel/gcc-5[go] )"
-RDEPEND="!<dev-go/go-tools-0_pre20150902"
-
-# These test data objects have writable/executable stacks.
-QA_EXECSTACK="
- usr/lib/go/src/debug/elf/testdata/*.obj
- usr/lib/go/src/go/internal/gccgoimporter/testdata/unicode.gox
- usr/lib/go/src/go/internal/gccgoimporter/testdata/time.gox
- "
-
-# Do not complain about CFLAGS, etc, since Go doesn't use them.
-QA_FLAGS_IGNORED='.*'
-
-REQUIRES_EXCLUDE="/usr/lib/go/src/debug/elf/testdata/*"
-
-# The tools in /usr/lib/go should not cause the multilib-strict check to fail.
-QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
-
-# Do not strip this package. Stripping is unsupported upstream and may
-# fail.
-RESTRICT+=" strip"
-
-DOCS=(
-AUTHORS
-CONTRIBUTING.md
-CONTRIBUTORS
-PATENTS
-README.md
-)
-
-PATCHES=(
-"${FILESDIR}"/${PV}-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch
-)
-
-go_arch()
-{
- # By chance most portage arch names match Go
- local portage_arch=$(tc-arch $@)
- case "${portage_arch}" in
- x86) echo 386;;
- x64-*) echo amd64;;
- ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
- s390) echo s390x ;;
- *) echo "${portage_arch}";;
- esac
-}
-
-go_arm()
-{
- case "${1:-${CHOST}}" in
- armv5*) echo 5;;
- armv6*) echo 6;;
- armv7*) echo 7;;
- *)
- die "unknown GOARM for ${1:-${CHOST}}"
- ;;
- esac
-}
-
-go_os()
-{
- case "${1:-${CHOST}}" in
- *-linux*) echo linux;;
- *-darwin*) echo darwin;;
- *-freebsd*) echo freebsd;;
- *-netbsd*) echo netbsd;;
- *-openbsd*) echo openbsd;;
- *-solaris*) echo solaris;;
- *-cygwin*|*-interix*|*-winnt*)
- echo windows
- ;;
- *)
- die "unknown GOOS for ${1:-${CHOST}}"
- ;;
- esac
-}
-
-go_tuple()
-{
- echo "$(go_os $@)_$(go_arch $@)"
-}
-
-go_cross_compile()
-{
- [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
-}
-
-pkg_pretend()
-{
- # make.bash does not understand cross-compiling a cross-compiler
- if [[ $(go_tuple) != $(go_tuple ${CTARGET}) ]]; then
- die "CHOST CTARGET pair unsupported: CHOST=${CHOST} CTARGET=${CTARGET}"
- fi
-}
-
-src_unpack()
-{
- if [[ ${PV} = 9999 ]]; then
- git-r3_src_unpack
- fi
- default
-}
-
-src_compile()
-{
- export GOROOT_BOOTSTRAP="${WORKDIR}"/go-$(go_os)-$(go_arch)-bootstrap
- if use gccgo; then
- mkdir -p "${GOROOT_BOOTSTRAP}/bin" || die
- local go_binary=$(gcc-config --get-bin-path)/go-$(gcc-major-version)
- [[ -x ${go_binary} ]] || go_binary=$(
- find "${EPREFIX}"/usr/${CHOST}/gcc-bin/*/go-$(gcc-major-version) |
- sort -V | tail -n1)
- [[ -x ${go_binary} ]] ||
- die "go-$(gcc-major-version): command not found"
- ln -s "${go_binary}" "${GOROOT_BOOTSTRAP}/bin/go" || die
- fi
- export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
- export GOROOT="$(pwd)"
- export GOBIN="${GOROOT}/bin"
-
- # Go's build script does not use BUILD/HOST/TARGET consistently. :(
- export GOHOSTARCH=$(go_arch ${CBUILD})
- export GOHOSTOS=$(go_os ${CBUILD})
- export CC=$(tc-getBUILD_CC)
-
- export GOARCH=$(go_arch)
- export GOOS=$(go_os)
- export CC_FOR_TARGET=$(tc-getCC)
- export CXX_FOR_TARGET=$(tc-getCXX)
- if [[ ${ARCH} == arm ]]; then
- export GOARM=$(go_arm)
- fi
- einfo "GOROOT_BOOTSTRAP is ${GOROOT_BOOTSTRAP}"
-
- cd src
- ./make.bash || die "build failed"
-}
-
-src_test()
-{
- go_cross_compile && return 0
-
- cd src
- PATH="${GOBIN}:${PATH}" \
- ./run.bash -no-rebuild || die "tests failed"
-}
-
-src_install()
-{
- local bin_path f x
-
- dodir /usr/lib/go
-
- # There is a known issue which requires the source tree to be installed [1].
- # Once this is fixed, we can consider using the doc use flag to control
- # installing the doc and src directories.
- # [1] https://golang.org/issue/2775
- #
- # deliberately use cp to retain permissions
- cp -R api bin doc lib pkg misc src test "${ED}"/usr/lib/go
- if go_cross_compile; then
- bin_path="bin/$(go_tuple)"
- else
- bin_path=bin
- fi
- for x in ${bin_path}/*; do
- f=${x##*/}
- dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
- done
- einstalldocs
-}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2023-08-10 22:38 William Hubbs
0 siblings, 0 replies; 6+ messages in thread
From: William Hubbs @ 2023-08-10 22:38 UTC (permalink / raw
To: gentoo-commits
commit: 82c82016506ba427e33fff601f7359ccd3b7a005
Author: William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 10 22:37:58 2023 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Aug 10 22:38:22 2023 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=82c82016
dev-lang/go: add 1.21.0
Signed-off-by: William Hubbs <williamh <AT> gentoo.org>
dev-lang/go/Manifest | 1 +
.../files/go-never-download-newer-toolchains.patch | 13 ++
dev-lang/go/go-1.21.0.ebuild | 213 +++++++++++++++++++++
3 files changed, 227 insertions(+)
diff --git a/dev-lang/go/Manifest b/dev-lang/go/Manifest
index 1e58e25ac36a..f522dcd0efdc 100644
--- a/dev-lang/go/Manifest
+++ b/dev-lang/go/Manifest
@@ -2,3 +2,4 @@ DIST go1.19.10.src.tar.gz 26563069 BLAKE2B 2aec01a67ba3e61f83b635bdf830bf6407342
DIST go1.19.12.src.tar.gz 26575152 BLAKE2B 27f7053922e9329f0a3365c6623a7df1a0ef3383cc8fc5f5dac7f74415a558924fa930ae0c5010986573efa877f571ebe3b1835e916a9d927d7121555f2361c6 SHA512 15488e6f9ce86a4ca5650bb9df7845abb11ada0d11fb9a1b048f8c1f7047ad677b45e6c4026eff41c81a14adaa1bf78826f8e81000e7083dbbb6055a31b894e1
DIST go1.20.5.src.tar.gz 26192951 BLAKE2B 13ab06a45a7b13eb5cf8886594343bc169df3c4ff0062ac89c0997283686563edccb7d39423457947f945782bef418ab1a1f3b8712aa8817a8f4c61b54e8574c SHA512 94cecb366cd9d9722b53e52ea3b0a5715a9e9dc21da0273dd3db9354557f71b9501b018125ef073dacc2e59125335f436cea1151cd8df0d60e2ad513f841905c
DIST go1.20.7.src.tar.gz 26192928 BLAKE2B 89a1b2bde472c22534e63585cd8fcff6076a16a7f1d15e90ec5cf5277225ae3bf53805531b256d0090cb170ed7e1bd1ed494cffcf5b3777f435bbb3591906612 SHA512 c3dae709d0db8ab32a68bda2d260ffe86ee77c703bdbf34eefd0e1f745dd0aa04e3d17833877e7f06aa066686da501a85361591e510a341affc0244dde2b9946
+DIST go1.21.0.src.tar.gz 26942359 BLAKE2B ba04a8b20d4ea35cd6f32e5975a347c9359b9e9d2bf77196afb50b6f527d69623cdc7900c74abe5315e53589e0be20aef5eb4a5faa0efa836ed22db12d041203 SHA512 da629fee156de6abbc5195f746e2fe4172a31b97eccd3871283c60452e81ac740533cc28ca68762ebc0ce48fb791dc527d3b7ebe7e1aee0f0b68868de736ed42
diff --git a/dev-lang/go/files/go-never-download-newer-toolchains.patch b/dev-lang/go/files/go-never-download-newer-toolchains.patch
new file mode 100644
index 000000000000..74e85f80b63a
--- /dev/null
+++ b/dev-lang/go/files/go-never-download-newer-toolchains.patch
@@ -0,0 +1,13 @@
+diff --git a/go.env b/go.env
+index 6ff2b921d4..1112a19c9b 100644
+--- a/go.env
++++ b/go.env
+@@ -7,6 +7,6 @@
+ GOPROXY=https://proxy.golang.org,direct
+ GOSUMDB=sum.golang.org
+
+-# Automatically download newer toolchains as directed by go.mod files.
++# Never download newer toolchains.
+ # See https://go.dev/doc/toolchain for details.
+-GOTOOLCHAIN=auto
++GOTOOLCHAIN=local
diff --git a/dev-lang/go/go-1.21.0.ebuild b/dev-lang/go/go-1.21.0.ebuild
new file mode 100644
index 000000000000..68b33c5e0315
--- /dev/null
+++ b/dev-lang/go/go-1.21.0.ebuild
@@ -0,0 +1,213 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+export CBUILD=${CBUILD:-${CHOST}}
+export CTARGET=${CTARGET:-${CHOST}}
+
+# See "Bootstrap" in release notes
+GO_BOOTSTRAP_MIN=1.17.13
+MY_PV=${PV/_/}
+
+inherit toolchain-funcs
+
+case ${PV} in
+*9999*)
+ EGIT_REPO_URI="https://github.com/golang/go.git"
+ inherit git-r3
+ ;;
+*)
+ SRC_URI="https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz "
+ S="${WORKDIR}"/go
+ case ${PV} in
+ *_beta*|*_rc*) ;;
+ *)
+ KEYWORDS="-* ~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~s390 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris"
+ ;;
+ esac
+esac
+
+DESCRIPTION="A concurrent garbage collected and typesafe programming language"
+HOMEPAGE="https://go.dev"
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+IUSE="abi_mips_o32 abi_mips_n64 cpu_flags_x86_sse2"
+
+RDEPEND="
+arm? ( sys-devel/binutils[gold] )
+arm64? ( sys-devel/binutils[gold] )"
+BDEPEND="|| (
+ >=dev-lang/go-${GO_BOOTSTRAP_MIN}
+ >=dev-lang/go-bootstrap-${GO_BOOTSTRAP_MIN} )"
+
+# the *.syso files have writable/executable stacks
+QA_EXECSTACK='*.syso'
+
+# Do not complain about CFLAGS, etc, since Go doesn't use them.
+QA_FLAGS_IGNORED='.*'
+
+# The tools in /usr/lib/go should not cause the multilib-strict check to fail.
+QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*"
+
+# This package triggers "unrecognized elf file(s)" notices on riscv.
+# https://bugs.gentoo.org/794046
+QA_PREBUILT='.*'
+
+# Do not strip this package. Stripping is unsupported upstream and may
+# fail.
+RESTRICT+=" strip"
+
+DOCS=(
+ CONTRIBUTING.md
+ PATENTS
+ README.md
+ SECURITY.md
+)
+
+go_arch() {
+ # By chance most portage arch names match Go
+ local tc_arch=$(tc-arch $@)
+ case "${tc_arch}" in
+ x86) echo 386;;
+ x64-*) echo amd64;;
+ loong) echo loong64;;
+ mips) if use abi_mips_o32; then
+ [[ $(tc-endian $@) = big ]] && echo mips || echo mipsle
+ elif use abi_mips_n64; then
+ [[ $(tc-endian $@) = big ]] && echo mips64 || echo mips64le
+ fi ;;
+ ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo ppc64le ;;
+ riscv) echo riscv64 ;;
+ s390) echo s390x ;;
+ *) echo "${tc_arch}";;
+ esac
+}
+
+go_arm() {
+ case "${1:-${CHOST}}" in
+ armv5*) echo 5;;
+ armv6*) echo 6;;
+ armv7*) echo 7;;
+ *)
+ die "unknown GOARM for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_os() {
+ case "${1:-${CHOST}}" in
+ *-linux*) echo linux;;
+ *-darwin*) echo darwin;;
+ *-freebsd*) echo freebsd;;
+ *-netbsd*) echo netbsd;;
+ *-openbsd*) echo openbsd;;
+ *-solaris*) echo solaris;;
+ *-cygwin*|*-interix*|*-winnt*)
+ echo windows
+ ;;
+ *)
+ die "unknown GOOS for ${1:-${CHOST}}"
+ ;;
+ esac
+}
+
+go_tuple() {
+ echo "$(go_os $@)_$(go_arch $@)"
+}
+
+go_cross_compile() {
+ [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]]
+}
+
+PATCHES=(
+ "${FILESDIR}"/go-never-download-newer-toolchains.patch
+)
+
+src_compile() {
+ if has_version -b ">=dev-lang/go-${GO_BOOTSTRAP_MIN}"; then
+ export GOROOT_BOOTSTRAP="${BROOT}/usr/lib/go"
+ elif has_version -b ">=dev-lang/go-bootstrap-${GO_BOOTSTRAP_MIN}"; then
+ export GOROOT_BOOTSTRAP="${BROOT}/usr/lib/go-bootstrap"
+ else
+ eerror "Go cannot be built without go or go-bootstrap installed"
+ die "Should not be here, please report a bug"
+ fi
+
+ export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
+ export GOROOT="${PWD}"
+ export GOBIN="${GOROOT}/bin"
+
+ # Go's build script does not use BUILD/HOST/TARGET consistently. :(
+ export GOHOSTARCH=$(go_arch ${CBUILD})
+ export GOHOSTOS=$(go_os ${CBUILD})
+ export CC=$(tc-getBUILD_CC)
+
+ export GOARCH=$(go_arch)
+ export GOOS=$(go_os)
+ export CC_FOR_TARGET=$(tc-getCC)
+ export CXX_FOR_TARGET=$(tc-getCXX)
+ use arm && export GOARM=$(go_arm)
+ use x86 && export GO386=$(usex cpu_flags_x86_sse2 '' 'softfloat')
+
+ cd src
+ bash -x ./make.bash || die "build failed"
+}
+
+src_test() {
+ go_cross_compile && return 0
+
+ cd src
+
+ # https://github.com/golang/go/issues/42005
+ rm cmd/link/internal/ld/fallocate_test.go || true
+
+ PATH="${GOBIN}:${PATH}" \
+ ./run.bash -no-rebuild || die "tests failed"
+ cd ..
+ rm -fr pkg/*_race || die
+ rm -fr pkg/obj/go-build || die
+}
+
+src_install() {
+ dodir /usr/lib/go
+ # The use of cp is deliberate in order to retain permissions
+ cp -R api bin doc lib pkg misc src test "${ED}"/usr/lib/go
+ einstalldocs
+
+ insinto /usr/lib/go
+doins go.env VERSION
+
+ # testdata directories are not needed on the installed system
+ rm -fr $(find "${ED}"/usr/lib/go -iname testdata -type d -print)
+
+ local bin_path
+ if go_cross_compile; then
+ bin_path="bin/$(go_tuple)"
+ else
+ bin_path=bin
+ fi
+ local f x
+ for x in ${bin_path}/*; do
+ f=${x##*/}
+ dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
+ done
+
+ # install the @golang-rebuild set for Portage
+ insinto /usr/share/portage/config/sets
+ newins "${FILESDIR}"/go-sets.conf go.conf
+}
+
+pkg_postinst() {
+ [[ -z ${REPLACING_VERSIONS} ]] && return
+ elog "After ${CATEGORY}/${PN} is updated it is recommended to rebuild"
+ elog "all packages compiled with previous versions of ${CATEGORY}/${PN}"
+ elog "due to the static linking nature of go."
+ elog "If this is not done, the packages compiled with the older"
+ elog "version of the compiler will not be updated until they are"
+ elog "updated individually, which could mean they will have"
+ elog "vulnerabilities."
+ elog "Run 'emerge @golang-rebuild' to rebuild all 'go' packages"
+ elog "See https://bugs.gentoo.org/752153 for more info"
+}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/
@ 2025-03-15 0:57 William Hubbs
0 siblings, 0 replies; 6+ messages in thread
From: William Hubbs @ 2025-03-15 0:57 UTC (permalink / raw
To: gentoo-commits
commit: 5116b3e1ff1a6986cfe5ead3569c9644a7b14df9
Author: William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 15 00:54:34 2025 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Sat Mar 15 00:56:53 2025 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5116b3e1
dev-lang/go: skip gdb runtime tests
Closes: https://bugs.gentoo.org/951315
Signed-off-by: William Hubbs <williamh <AT> gentoo.org>
dev-lang/go/files/go-1.24-skip-gdb-tests.patch | 12 ++++++++++++
dev-lang/go/go-1.24.1.ebuild | 1 +
2 files changed, 13 insertions(+)
diff --git a/dev-lang/go/files/go-1.24-skip-gdb-tests.patch b/dev-lang/go/files/go-1.24-skip-gdb-tests.patch
new file mode 100644
index 000000000000..498483571dad
--- /dev/null
+++ b/dev-lang/go/files/go-1.24-skip-gdb-tests.patch
@@ -0,0 +1,12 @@
+diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go
+index 9c54d68949..d4eada51af 100644
+--- a/src/runtime/runtime-gdb_test.go
++++ b/src/runtime/runtime-gdb_test.go
+@@ -55,6 +55,7 @@ func checkGdbEnvironment(t *testing.T) {
+ case "plan9":
+ t.Skip("there is no gdb on Plan 9")
+ }
++ t.Skip("gdb tests do not work under gentoo portage")
+ }
+
+ func checkGdbVersion(t *testing.T) {
diff --git a/dev-lang/go/go-1.24.1.ebuild b/dev-lang/go/go-1.24.1.ebuild
index 022bec0a6614..423eda182b28 100644
--- a/dev-lang/go/go-1.24.1.ebuild
+++ b/dev-lang/go/go-1.24.1.ebuild
@@ -71,6 +71,7 @@ go_cross_compile() {
}
PATCHES=(
+ "${FILESDIR}"/go-1.24-skip-gdb-tests.patch
"${FILESDIR}"/go-never-download-newer-toolchains.patch
)
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-03-15 0:57 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-22 14:39 [gentoo-commits] repo/gentoo:master commit in: dev-lang/go/, dev-lang/go/files/ William Hubbs
-- strict thread matches above, loose matches on Subject: below --
2025-03-15 0:57 William Hubbs
2023-08-10 22:38 William Hubbs
2017-05-17 17:19 William Hubbs
2016-07-20 13:58 William Hubbs
2015-11-02 19:38 Fabian Groffen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox