From: Dale Weiler Date: Sat, 27 Apr 2013 15:20:01 +0000 (+0000) Subject: Expression has undefined behavior (left operand modifies code->globals->used, used... X-Git-Tag: v0.3.0~151^2~60 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=dc6a7436ee06bc147b6d1e6e22929b8f37c2bd48;p=xonotic%2Fgmqcc.git Expression has undefined behavior (left operand modifies code->globals->used, used by right operand): (code->globals)[(((vector_t*)((void *)code->globals)) - 1)->used++] = (code_genstring(code, global->constval.vstring)) Code has unspecified behavior. Order of evaluation of function parameters or subexpressions is not defined, so if a value is used and modified in different places not separated by a sequence point constraining evaluation order, then the result of the expression is unspecified. --- diff --git a/ir.c b/ir.c index 82dcb9b..a124bd1 100644 --- a/ir.c +++ b/ir.c @@ -3418,7 +3418,8 @@ static bool ir_builder_gen_global(code_t *code, ir_builder *self, ir_value *glob { ir_value_code_setaddr(global, vec_size(code->globals)); if (global->hasvalue) { - vec_push(code->globals, code_genstring(code, global->constval.vstring)); + uint32_t load = code_genstring(code, global->constval.vstring); + vec_push(code->globals, load); } else { vec_push(code->globals, 0); }