From 79ce6c56cabedab3b85e3ae25e85e8474cf7c6f9 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sat, 11 Aug 2001 22:02:59 +0000 Subject: [PATCH] fix assignops with entity fields by cloning e1 rather than just re-using it --- tools/qfcc/source/expr.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index 8d8ab761c..439524e85 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -810,27 +810,29 @@ type_mismatch: expr_t * asx_expr (int op, expr_t *e1, expr_t *e2) { + expr_t *e = new_expr (); + *e = *e1; switch (op) { case ASADD: - return binary_expr ('=', e1, binary_expr ('+', e1, e2)); + return binary_expr ('=', e, binary_expr ('+', e1, e2)); case ASSUB: - return binary_expr ('=', e1, binary_expr ('-', e1, e2)); + return binary_expr ('=', e, binary_expr ('-', e1, e2)); case ASMUL: - return binary_expr ('=', e1, binary_expr ('*', e1, e2)); + return binary_expr ('=', e, binary_expr ('*', e1, e2)); case ASDIV: - return binary_expr ('=', e1, binary_expr ('/', e1, e2)); + return binary_expr ('=', e, binary_expr ('/', e1, e2)); case ASAND: - return binary_expr ('=', e1, binary_expr ('&', e1, e2)); + return binary_expr ('=', e, binary_expr ('&', e1, e2)); case ASOR: - return binary_expr ('=', e1, binary_expr ('|', e1, e2)); + return binary_expr ('=', e, binary_expr ('|', e1, e2)); case ASXOR: - return binary_expr ('=', e1, binary_expr ('^', e1, e2)); + return binary_expr ('=', e, binary_expr ('^', e1, e2)); case ASMOD: - return binary_expr ('=', e1, binary_expr ('%', e1, e2)); + return binary_expr ('=', e, binary_expr ('%', e1, e2)); case ASSHL: - return binary_expr ('=', e1, binary_expr (SHL, e1, e2)); + return binary_expr ('=', e, binary_expr (SHL, e1, e2)); case ASSHR: - return binary_expr ('=', e1, binary_expr (SHR, e1, e2)); + return binary_expr ('=', e, binary_expr (SHR, e1, e2)); default: error (e1, "invalid operand for asx"); }