- Fix bug with @jump miscompile

- Remove "panic" text from unreachable() when safe mode is turned off.
This commit is contained in:
Christoffer Lerno
2024-06-22 23:20:23 +02:00
parent e02f73417c
commit f2e5c5e9b9
7 changed files with 83 additions and 11 deletions

View File

@@ -752,7 +752,13 @@ static LLVMValueRef llvm_emit_switch_jump_stmt(GenContext *c,
BEValue min_val;
llvm_emit_expr(c, &min_val, exprptr(cases[min_index]->case_stmt.expr));
assert(llvm_value_is_const(&min_val));
switch_value->value = LLVMBuildSub(c->builder, switch_value->value, min_val.value, "");
llvm_value_rvalue(c, switch_value);
llvm_value_rvalue(c, &min_val);
LLVMValueRef min = min_val.value;
if (!LLVMIsConstant(min) || !LLVMIsNull(min))
{
switch_value->value = LLVMBuildSub(c->builder, switch_value->value, min_val.value, "");
}
LLVMValueRef is_valid = LLVMBuildICmp(c->builder, LLVMIntUGT, switch_value->value, llvm_const_int(c, switch_value->type, count - 1), "");
LLVMBasicBlockRef switch_block = llvm_basic_block_new(c, "jumpblock");
LLVMBuildCondBr(c->builder, is_valid, default_block, switch_block);