From 112af3545d8afbaf7a95891ea78f94de9d79996d Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 28 May 2014 21:46:20 -0400 Subject: 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 issue 8097. LGTM=r, khr R=golang-codereviews, r, khr CC=golang-codereviews, iant https://codereview.appspot.com/102820043 ??? TBR=r CC=golang-codereviews, khr https://codereview.appspot.com/95660043 --- src/cmd/8g/cgen.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'src/cmd/8g') diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c index d626c2eb0..1aae7771c 100644 --- a/src/cmd/8g/cgen.c +++ b/src/cmd/8g/cgen.c @@ -1397,13 +1397,6 @@ componentgen(Node *nr, Node *nl) } } - // nl and nr are 'cadable' which basically means they are names (variables) now. - // If they are the same variable, don't generate any code, because the - // VARDEF we generate will mark the old value as dead incorrectly. - // (And also the assignments are useless.) - if(nr != N && nl->op == ONAME && nr->op == ONAME && nl == nr) - goto yes; - switch(nl->type->etype) { case TARRAY: if(nl->op == ONAME) -- cgit v1.2.1