summaryrefslogtreecommitdiff
path: root/src/cmd/6g/cgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6g/cgen.c')
-rw-r--r--src/cmd/6g/cgen.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c
index ae1309142..4dd505b08 100644
--- a/src/cmd/6g/cgen.c
+++ b/src/cmd/6g/cgen.c
@@ -1585,6 +1585,13 @@ componentgen(Node *nr, Node *nl)
freer = 1;
}
}
+
+ // 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: