authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-10 10:12:08-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2018-07-10 10:12:08-04:00
log28f9230b40ee7aa179705c39616aaf2a5f303b73
treec8fabad00b800c43143fe148557c23a64c129de0
parentb5cfbfd84ee26d5174abf3368b75b9e4502898a5

fix crash when calling comptime-known undefined function ptr

closes #880 closes #1212

2 files changed, 15 insertions(+), 0 deletions(-)

src/ir.cpp+2
......@@ -13271,6 +13271,8 @@ static TypeTableEntry *ir_analyze_instruction_call(IrAnalyze *ira, IrInstruction
1327113271 return ir_finish_anal(ira, cast_instruction->value.type);
1327213272 } else if (fn_ref->value.type->id == TypeTableEntryIdFn) {
1327313273 FnTableEntry *fn_table_entry = ir_resolve_fn(ira, fn_ref);
13274 if (fn_table_entry == nullptr)
13275 return ira->codegen->builtin_types.entry_invalid;
1327413276 return ir_analyze_fn_call(ira, call_instruction, fn_table_entry, fn_table_entry->type_entry,
1327513277 fn_ref, nullptr, is_comptime, call_instruction->fn_inline);
1327613278 } else if (fn_ref->value.type->id == TypeTableEntryIdBoundFn) {
test/compile_errors.zig+13
......@@ -1,6 +1,19 @@
11const tests = @import("tests.zig");
22
33pub fn addCases(cases: *tests.CompileErrorContext) void {
4 cases.add(
5 "use of comptime-known undefined function value",
6 \\const Cmd = struct {
7 \\ exec: fn () void,
8 \\};
9 \\export fn entry() void {
10 \\ const command = Cmd{ .exec = undefined };
11 \\ command.exec();
12 \\}
13 ,
14 ".tmp_source.zig:6:12: error: use of undefined value",
15 );
16
417 cases.add(
518 "bad @alignCast at comptime",
619 \\comptime {