From: Wolfgang (Blub) Bumiller Date: Sat, 18 Aug 2012 15:58:38 +0000 (+0200) Subject: ast_return should accept NULL as value to create a simple 'return' without a value X-Git-Tag: 0.1-rc1~192 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=6d84010dc4b5843afece799bb071a6e1d6d13dcd;p=xonotic%2Fgmqcc.git ast_return should accept NULL as value to create a simple 'return' without a value --- diff --git a/ast.c b/ast.c index 851171e..fb1bc87 100644 --- a/ast.c +++ b/ast.c @@ -1135,13 +1135,18 @@ bool ast_return_codegen(ast_return *self, ast_function *func, bool lvalue, ir_va } self->expression.outr = (ir_value*)1; - cgen = self->operand->expression.codegen; - /* lvalue! */ - if (!(*cgen)((ast_expression*)(self->operand), func, false, &operand)) - return false; + if (self->operand) { + cgen = self->operand->expression.codegen; + /* lvalue! */ + if (!(*cgen)((ast_expression*)(self->operand), func, false, &operand)) + return false; - if (!ir_block_create_return(func->curblock, operand)) - return false; + if (!ir_block_create_return(func->curblock, operand)) + return false; + } else { + if (!ir_block_create_return(func->curblock, NULL)) + return false; + } return true; } diff --git a/ir.c b/ir.c index 5e7a923..dcf03e0 100644 --- a/ir.c +++ b/ir.c @@ -1077,11 +1077,11 @@ bool ir_block_create_return(ir_block *self, ir_value *v) if (!in) return false; - if (!ir_instr_op(in, 0, v, false) || - !ir_block_instr_add(self, in) ) - { + if (v && !ir_instr_op(in, 0, v, false)) + return false; + + if (!ir_block_instr_add(self, in)) return false; - } return true; }