mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
fix crash when compile error in analyzing @panic call
This commit is contained in:
parent
0b7b3190fd
commit
6cb99fdac3
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user