Commit 0fc645ab70

Andrew Kelley <superjoe30@gmail.com>
2018-01-18 23:15:36
emit a compile error for @panic called at compile time
closes #706
1 parent 0b8f19f
Changed files (2)
src/ir.cpp
@@ -14499,6 +14499,11 @@ static TypeTableEntry *ir_analyze_instruction_panic(IrAnalyze *ira, IrInstructio
     if (type_is_invalid(msg->value.type))
         return ira->codegen->builtin_types.entry_invalid;
 
+    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;
+    }
+
     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);
test/compile_errors.zig
@@ -1,6 +1,14 @@
 const tests = @import("tests.zig");
 
 pub fn addCases(cases: &tests.CompileErrorContext) {
+    cases.add("@panic called at compile time",
+        \\export fn entry() {
+        \\    comptime {
+        \\        @panic("aoeu");
+        \\    }
+        \\}
+    , "error: encountered @panic at compile-time");
+
     cases.add("wrong return type for main",
         \\pub fn main() -> f32 { }
     , "error: expected return type of main to be 'u8', 'noreturn', 'void', or '%void'");