From 2ba787e3038d8776599fb968b3ddec6b7a62a3f3 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Mon, 31 Jul 2023 01:50:54 -0400 Subject: Sema: restrict what can appear in a naked function * Disable runtime calls, since it is not possible to know the proper stack adjustment to follow the callee abi. * Disable runtime returns, since it is not possible to know where the return address is stored in general. * Allow implicit returns regardless of the return type, which allows naked functions with a non-void return type to be written. --- src/Module.zig | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/Module.zig') diff --git a/src/Module.zig b/src/Module.zig index 41236880c5..f5438ebb9f 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -4186,6 +4186,7 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void { .owner_decl = new_decl, .owner_decl_index = new_decl_index, .func_index = .none, + .func_is_naked = false, .fn_ret_ty = Type.void, .fn_ret_ty_ies = null, .owner_func_index = .none, @@ -4268,6 +4269,7 @@ fn semaDecl(mod: *Module, decl_index: Decl.Index) !bool { .owner_decl = decl, .owner_decl_index = decl_index, .func_index = .none, + .func_is_naked = false, .fn_ret_ty = Type.void, .fn_ret_ty_ies = null, .owner_func_index = .none, @@ -5213,6 +5215,7 @@ pub fn analyzeFnBody(mod: *Module, func_index: InternPool.Index, arena: Allocato .owner_decl = decl, .owner_decl_index = decl_index, .func_index = func_index, + .func_is_naked = fn_ty_info.cc == .Naked, .fn_ret_ty = fn_ty_info.return_type.toType(), .fn_ret_ty_ies = null, .owner_func_index = func_index, -- cgit v1.2.3