From 417d1b4442ee2fc2294b5c2defdfdfa9fdcd6f7c Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sun, 6 Mar 2011 13:19:20 +0900 Subject: [PATCH] Fix structure copy into and out of entities. --- tools/qfcc/source/expr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index f55f9d556..b38e81639 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -2449,7 +2449,7 @@ assign_expr (expr_t *e1, expr_t *e2) if (is_struct (get_type (e2))) { e1 = address_expr (e1, 0, 0); e2 = address_expr (e2, 0, 0); - e = new_move_expr (e1, e2, get_type (e2)); + e = new_move_expr (e1, e2, t2); } else { expr_t *temp = new_temp_def_expr (t1); @@ -2462,6 +2462,7 @@ assign_expr (expr_t *e1, expr_t *e2) } else if (is_indirect (e1)) { if (is_struct (get_type (e1))) { e1 = address_expr (e1, 0, 0); + e2 = address_expr (e2, 0, 0); return new_move_expr (e1, e2, get_type (e2)); } if (e1->type == ex_expr) { @@ -2482,9 +2483,10 @@ assign_expr (expr_t *e1, expr_t *e2) } } else if (is_indirect (e2)) { if (is_struct (get_type (e1))) { + e1 = address_expr (e1, 0, 0); e2 = address_expr (e2, 0, 0); e2->rvalue = 1; - return new_move_expr (e1, e2, get_type (e2)); + return new_move_expr (e1, e2, t2); } if (e2->type == ex_uexpr) { e = e2->e.expr.e1;