mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-12 22:33:36 +00:00
Add #must_tail (similar syntax to #force_inline
This commit is contained in:
@@ -2111,7 +2111,7 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur
|
||||
|
||||
for (Entity *e : info->init_procedures) {
|
||||
lbValue value = lb_find_procedure_value_from_entity(m, e);
|
||||
lb_emit_call(p, value, {}, ProcInlining_none);
|
||||
lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none);
|
||||
}
|
||||
|
||||
|
||||
@@ -2157,7 +2157,7 @@ gb_internal lbProcedure *lb_create_cleanup_runtime(lbModule *main_module) { // C
|
||||
|
||||
for (Entity *e : info->fini_procedures) {
|
||||
lbValue value = lb_find_procedure_value_from_entity(main_module, e);
|
||||
lb_emit_call(p, value, {}, ProcInlining_none);
|
||||
lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none);
|
||||
}
|
||||
|
||||
lb_end_procedure_body(p);
|
||||
@@ -2850,7 +2850,7 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star
|
||||
}
|
||||
|
||||
lbValue startup_runtime_value = {startup_runtime->value, startup_runtime->type};
|
||||
lb_emit_call(p, startup_runtime_value, {}, ProcInlining_none);
|
||||
lb_emit_call(p, startup_runtime_value, {}, ProcInlining_none, ProcTailing_none);
|
||||
|
||||
if (build_context.command_kind == Command_test) {
|
||||
Type *t_Internal_Test = find_type_in_pkg(m->info, str_lit("testing"), str_lit("Internal_Test"));
|
||||
@@ -2917,16 +2917,16 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star
|
||||
|
||||
auto exit_args = array_make<lbValue>(temporary_allocator(), 1);
|
||||
exit_args[0] = lb_emit_select(p, result, lb_const_int(m, t_int, 0), lb_const_int(m, t_int, 1));
|
||||
lb_emit_call(p, exit_runner, exit_args, ProcInlining_none);
|
||||
lb_emit_call(p, exit_runner, exit_args, ProcInlining_none, ProcTailing_none);
|
||||
} else {
|
||||
if (m->info->entry_point != nullptr) {
|
||||
lbValue entry_point = lb_find_procedure_value_from_entity(m, m->info->entry_point);
|
||||
lb_emit_call(p, entry_point, {}, ProcInlining_no_inline);
|
||||
lb_emit_call(p, entry_point, {}, ProcInlining_no_inline, ProcTailing_none);
|
||||
}
|
||||
|
||||
if (call_cleanup) {
|
||||
lbValue cleanup_runtime_value = {cleanup_runtime->value, cleanup_runtime->type};
|
||||
lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none);
|
||||
lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none, ProcTailing_none);
|
||||
}
|
||||
|
||||
if (is_dll_main) {
|
||||
|
||||
Reference in New Issue
Block a user