zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit aa31096cbd0d66d7c31e12eebe91f36293346dba (tree)
parent e4977f3e89fcc164a4d02cd38eb066cfe1a1124f
Author: Bogdan Romanyuk <65823030+wrongnull@users.noreply.github.com>
Date:   Thu, 23 Nov 2023 05:08:15 +0300

Sema: disallow call to undefined function


Diffstat:
Msrc/Sema.zig | 3+++
Mtest/cases/compile_errors/refer_to_the_type_of_a_generic_function.zig | 2+-
Atest/cases/compile_errors/undefined_value_call.zig | 9+++++++++
3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -7132,6 +7132,9 @@ fn analyzeCall( const callee_ty = sema.typeOf(func); const func_ty_info = mod.typeToFunc(func_ty).?; const cc = func_ty_info.cc; + if (try sema.resolveValue(func)) |func_val| + if (func_val.isUndef(mod)) + return sema.failWithUseOfUndef(block, call_src); if (cc == .Naked) { const maybe_decl = try sema.funcDeclSrc(func); const msg = msg: { diff --git a/test/cases/compile_errors/refer_to_the_type_of_a_generic_function.zig b/test/cases/compile_errors/refer_to_the_type_of_a_generic_function.zig @@ -8,4 +8,4 @@ export fn entry() void { // backend=stage2 // target=native // -// :4:5: error: use of undefined value here causes undefined behavior +// :4:6: error: use of undefined value here causes undefined behavior diff --git a/test/cases/compile_errors/undefined_value_call.zig b/test/cases/compile_errors/undefined_value_call.zig @@ -0,0 +1,9 @@ +pub export fn entry() void { + @as(fn () void, undefined)(); +} + +// error +// backend=stage2 +// target=native +// +// :2:31: error: use of undefined value here causes undefined behavior