]> Cypherpunks repositories - gostls13.git/commit
undo CL 102820043 / b0ce6dbafc18
authorRuss Cox <rsc@golang.org>
Thu, 29 May 2014 01:46:20 +0000 (21:46 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 29 May 2014 01:46:20 +0000 (21:46 -0400)
commit9dd062b82e9fc126c787449cc3b4730d0d0525c6
tree9a4a47072a79e3d697e55797581ecc33029832d5
parent948b2c722b32d2bc63d6f326c80831801b0e06f7
undo CL 102820043 / b0ce6dbafc18

Breaks 386 and arm builds.
The obvious reason is that this CL only edited 6g/gsubr.c
and failed to edit 5g/gsubr.c and 8g/gsubr.c.
However, the obvious CL applying the same edit to those
files (CL 101900043) causes mysterious build failures
in various of the standard package tests, usually involving
reflect. Something deep and subtle is broken but only on
the 32-bit systems.

Undo this CL for now.

««« original CL description
cmd/gc: fix x=x crash

The 'nodarg' function is used to obtain a Node*
representing a function argument or result.
It returned a brand new Node*, but that violates
the guarantee in most places in the compiler that
two Node*s refer to the same variable if and only if
they are the same Node* pointer. Reestablish that
invariant by making nodarg return a preexisting
named variable if present.

Having fixed that, avoid any copy during x=x in
componentgen, because the VARDEF we emit
before the copy marks the lhs x as dead incorrectly.

The change in walk.c avoids modifying the result
of nodarg. This was the only place in the compiler
that did so.

Fixes #8097.

LGTM=r, khr
R=golang-codereviews, r, khr
CC=golang-codereviews, iant
https://golang.org/cl/102820043
»»»

TBR=r
CC=golang-codereviews, khr
https://golang.org/cl/95660043
src/cmd/5g/cgen.c
src/cmd/6g/cgen.c
src/cmd/6g/gsubr.c
src/cmd/8g/cgen.c
src/cmd/gc/walk.c
test/live.go