diff options
author | William Hubbs <williamh@gentoo.org> | 2017-05-17 12:18:31 -0500 |
---|---|---|
committer | William Hubbs <williamh@gentoo.org> | 2017-05-17 12:19:16 -0500 |
commit | 0a3aa4763de942a37c1209d7aa75bf6fce61a2d5 (patch) | |
tree | d9ae6fb0121a54be85b32255435d337ea5e3aa13 /dev-lang | |
parent | dev-python/node-semver: Add python3_6 (diff) | |
download | gentoo-0a3aa4763de942a37c1209d7aa75bf6fce61a2d5.tar.gz gentoo-0a3aa4763de942a37c1209d7aa75bf6fce61a2d5.tar.bz2 gentoo-0a3aa4763de942a37c1209d7aa75bf6fce61a2d5.zip |
dev-lang/go: remove old versions
Package-Manager: Portage-2.3.5, Repoman-2.3.1
Diffstat (limited to 'dev-lang')
-rw-r--r-- | dev-lang/go/Manifest | 13 | ||||
-rw-r--r-- | dev-lang/go/files/1.8-cmd-compile-add-opcode-flag-hasSideEffects-for-do-no.patch | 738 | ||||
-rw-r--r-- | dev-lang/go/go-1.7.5.ebuild | 221 | ||||
-rw-r--r-- | dev-lang/go/go-1.8-r1.ebuild | 231 |
4 files changed, 0 insertions, 1203 deletions
diff --git a/dev-lang/go/Manifest b/dev-lang/go/Manifest index c04d3006682e..a6d0b0c3deaf 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 c8ebf376f451..000000000000 --- 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 97b147485ed8..000000000000 --- 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 e5b9424d9ce2..000000000000 --- 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 -} |