]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ast.c
parsing array initializers
[xonotic/gmqcc.git] / ast.c
diff --git a/ast.c b/ast.c
index 4af3e3cafbd894c7b3beda8e736c0f48aec743ff..d845eb24a5db26dfd94e962bf198f2657efada26 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -21,7 +21,6 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -1628,7 +1627,7 @@ bool ast_function_codegen(ast_function *self, ir_builder *ir)
         return true;
     }
 
-    // have a local return value variable?
+    /* have a local return value variable? */
     if (self->return_value) {
         if (!ast_local_codegen(self->return_value, self->ir_func, false))
             return false;
@@ -1685,8 +1684,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))
             {