]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.c
now a bare 'return;' is not required anymore if return has been assigned anywhere
[xonotic/gmqcc.git] / ast.c
diff --git a/ast.c b/ast.c
index 35b1a7dfa26b850f0c7103ec61b23da9792a13fb..81e1c121231e16bbb9bdde2c92cf72ec642fda1b 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -1685,8 +1685,13 @@ bool ast_function_codegen(ast_function *self, ir_builder *ir)
         }
         else if (vec_size(self->curblock->entries) || self->curblock == irf->first)
         {
-            /* error("missing return"); */
-            if (compile_warning(ast_ctx(self), WARN_MISSING_RETURN_VALUES,
+            if (self->return_value) {
+                cgen = self->return_value->expression.codegen;
+                if (!(*cgen)((ast_expression*)(self->return_value), self, false, &dummy))
+                    return false;
+                return ir_block_create_return(self->curblock, ast_ctx(self), dummy);
+            }
+            else if (compile_warning(ast_ctx(self), WARN_MISSING_RETURN_VALUES,
                                 "control reaches end of non-void function (`%s`) via %s",
                                 self->name, self->curblock->label))
             {