diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-01-18 17:15:36 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-01-18 17:15:36 -0500 |
| commit | 0fc645ab7084c1812d367583b37218359b21c02c (patch) | |
| tree | b156e5bdc445b8b9b3b7763c358a195cf9438a1f | |
| parent | 0b8f19fcba04cde35ca4831f37f8249d51da9432 (diff) | |
| download | zig-0fc645ab7084c1812d367583b37218359b21c02c.tar.gz zig-0fc645ab7084c1812d367583b37218359b21c02c.zip | |
emit a compile error for @panic called at compile time
closes #706
| -rw-r--r-- | src/ir.cpp | 5 | ||||
| -rw-r--r-- | test/compile_errors.zig | 8 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 4dd022c09f..4c107ce767 100644 --- a/src/ir.cpp +++ b/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); diff --git a/test/compile_errors.zig b/test/compile_errors.zig index 6b2ea545ed..13373f4737 100644 --- a/test/compile_errors.zig +++ b/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'"); |
