From ba55946c9a898f750d30dd781485403bd43a5fcf Mon Sep 17 00:00:00 2001 From: Manu Linares Date: Mon, 18 Aug 2025 18:12:03 -0300 Subject: [PATCH] Fixes slicing with negative value error message - llvm_codegen_expr.c (#2410) * Fixes slicing with negative value error message - llvm_codegen_expr.c Fixes printing negative value Example: ``` fn void main() { int[100] arr; usz a = 35; usz b = 36; arr[b:a - b]; } ``` output should be: ERROR: 'Negative value (-1) given for slice length.' * Update releasenotes. --------- Co-authored-by: Christoffer Lerno --- releasenotes.md | 1 + src/compiler/llvm_codegen_expr.c | 1 + 2 files changed, 2 insertions(+) diff --git a/releasenotes.md b/releasenotes.md index e41884d6f..6cfac76e5 100644 --- a/releasenotes.md +++ b/releasenotes.md @@ -50,6 +50,7 @@ - Miscompilation of do-while when the while starts with a branch #2394. - Compiler assert when calling unassigned CT functions #2418. - Fixed crash in header generation when exporting functions with const enums (#2384). +- Fix incorrect panic message when slicing with negative size. ### Stdlib changes - Add `==` to `Pair`, `Triple` and TzDateTime. Add print to `Pair` and `Triple`. diff --git a/src/compiler/llvm_codegen_expr.c b/src/compiler/llvm_codegen_expr.c index ab45bdb48..f86380748 100644 --- a/src/compiler/llvm_codegen_expr.c +++ b/src/compiler/llvm_codegen_expr.c @@ -2791,6 +2791,7 @@ static void llvm_emit_slice_values(GenContext *c, Expr *slice, BEValue *parent_r llvm_emit_int_comp(c, &excess, &start_index, &end_index, BINARYOP_GT); BEValue actual_end_len = end_index; actual_end_len.value = llvm_emit_sub_int(c, end_index.type, end_index.value, start_index.value, slice->span); + actual_end_len.type = type_isz; llvm_emit_panic_if_true(c, &excess, "Negative slice length", slice->span, "Negative value (%d) given for slice length.", &actual_end_len, NULL); if (len.value) {