Fix a memory leak on error
diff --git a/src/bc/program.c b/src/bc/program.c
index 30efa73..3cfcfbc 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -1613,6 +1613,7 @@
     status = bc_func_init(&f);
     if (status) return status;
     status = bc_vec_push(&p->funcs, &f);
+    if (status) bc_func_free(&f);
   }
 
   return status;