From a7b7a114bceee781adb110bc623cd4b46480f682 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 13 Dec 2012 21:06:04 +0900 Subject: [PATCH] Don't kill the node to which an alias is being assigned. This does not fix the lost return value the menus as that is caused by the alias not being marked live when it should be. --- tools/qfcc/source/dags.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tools/qfcc/source/dags.c b/tools/qfcc/source/dags.c index ec750788b..eded5eb1e 100644 --- a/tools/qfcc/source/dags.c +++ b/tools/qfcc/source/dags.c @@ -406,11 +406,14 @@ op_is_identifier (operand_t *op) } static int -dag_kill_aliases_visit (def_t *def, void *_node) +dag_kill_aliases_visit (def_t *def, void *_l) { - dagnode_t *node = (dagnode_t *) _node; + daglabel_t *l = (daglabel_t *) _l; + dagnode_t *node = l->dagnode;; daglabel_t *label; + if (def == l->op->o.def) + return 0; label = def->daglabel; if (label && label->dagnode) { set_add (node->edges, label->dagnode->number); @@ -428,7 +431,7 @@ dag_kill_aliases (daglabel_t *l) if (op->op_type == op_temp) { } else if (op->op_type == op_def) { if (op->o.def->alias || op->o.def->alias_defs) - def_visit_all (op->o.def, 1, dag_kill_aliases_visit, l->dagnode); + def_visit_all (op->o.def, 1, dag_kill_aliases_visit, l); } else { internal_error (0, "rvalue assignment?"); }