Commit 6cb99fdac3

Andrew Kelley <superjoe30@gmail.com>
2018-03-27 21:07:45
fix crash when compile error in analyzing @panic call
1 parent 0b7b319
Changed files (2)
src/ir.cpp
@@ -16918,18 +16918,18 @@ static TypeTableEntry *ir_analyze_instruction_can_implicit_cast(IrAnalyze *ira,
 static TypeTableEntry *ir_analyze_instruction_panic(IrAnalyze *ira, IrInstructionPanic *instruction) {
     IrInstruction *msg = instruction->msg->other;
     if (type_is_invalid(msg->value.type))
-        return ira->codegen->builtin_types.entry_invalid;
+        return ir_unreach_error(ira);
 
     if (ir_should_inline(ira->new_irb.exec, instruction->base.scope)) {
         ir_add_error(ira, &instruction->base, buf_sprintf("encountered @panic at compile-time"));
-        return ira->codegen->builtin_types.entry_invalid;
+        return ir_unreach_error(ira);
     }
 
     TypeTableEntry *u8_ptr_type = get_pointer_to_type(ira->codegen, ira->codegen->builtin_types.entry_u8, true);
     TypeTableEntry *str_type = get_slice_type(ira->codegen, u8_ptr_type);
     IrInstruction *casted_msg = ir_implicit_cast(ira, msg, str_type);
     if (type_is_invalid(casted_msg->value.type))
-        return ira->codegen->builtin_types.entry_invalid;
+        return ir_unreach_error(ira);
 
     IrInstruction *new_instruction = ir_build_panic(&ira->new_irb, instruction->base.scope,
             instruction->base.source_node, casted_msg);
test/compile_errors.zig
@@ -1,6 +1,15 @@
 const tests = @import("tests.zig");
 
 pub fn addCases(cases: &tests.CompileErrorContext) void {
+    cases.add("wrong type passed to @panic",
+        \\export fn entry() void {
+        \\    var e = error.Foo;
+        \\    @panic(e);
+        \\}
+    ,
+        ".tmp_source.zig:3:12: error: expected type '[]const u8', found 'error{Foo}'");
+
+
     cases.add("@tagName used on union with no associated enum tag",
         \\const FloatInt = extern union {
         \\    Float: f32,