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:
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