authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-08-12 22:58:52+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-08-13 11:36:16+01:00
log38ba425b26312ea073c7082e576e8583913139d7
tree40fb6ec72a7482dd77ec7f55aa9c70a73c4d6981
parentb8124d9c0b01e8ac7cd0daf93a0ed018da5f2352
signaturelock-open Commit is signed but in an unrecognized format.

llvm: support small error limits

Resolves: #23533

1 files changed, 4 insertions(+), 1 deletions(-)

src/codegen/llvm.zig+4-1
......@@ -10475,11 +10475,14 @@ pub const FuncGen = struct {
1047510475 const slice_ty = self.typeOfIndex(inst);
1047610476 const slice_llvm_ty = try o.lowerType(pt, slice_ty);
1047710477
10478 // If operand is small (e.g. `u8`), then signedness becomes a problem -- GEP always treats the index as signed.
10479 const extended_operand = try self.wip.conv(.unsigned, operand, try o.lowerType(pt, .usize), "");
10480
1047810481 const error_name_table_ptr = try self.getErrorNameTable();
1047910482 const error_name_table =
1048010483 try self.wip.load(.normal, .ptr, error_name_table_ptr.toValue(&o.builder), .default, "");
1048110484 const error_name_ptr =
10482 try self.wip.gep(.inbounds, slice_llvm_ty, error_name_table, &.{operand}, "");
10485 try self.wip.gep(.inbounds, slice_llvm_ty, error_name_table, &.{extended_operand}, "");
1048310486 return self.wip.load(.normal, slice_llvm_ty, error_name_ptr, .default, "");
1048410487 }
1048510488