authorgravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2026-08-02 14:01:56+02:00
committergravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2026-08-02 14:41:10+02:00
log1dd69217729a6b95b4ac644cc5385a8b1bc6c044
tree4d3be34fc625bd1ce753ccf58cd48089c74b16ac
parentadef113102f7b5c55f502c9b4ac58f61349eab1d

Sema: remove `slice_ty` param from `maybeDerefSliceAsArray` again

Instead compute it from `slice_val`.

1 files changed, 7 insertions(+), 6 deletions(-)

src/Sema.zig+7-6
......@@ -13587,14 +13587,14 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1358713587 const lhs_sub_val = if (lhs_ty.isSinglePointer(zcu))
1358813588 try sema.pointerDeref(block, lhs_src, lhs_val, lhs_ty) orelse break :rs lhs_src
1358913589 else if (lhs_ty.isSlice(zcu))
13590 try sema.maybeDerefSliceAsArray(block, lhs_src, lhs_val, lhs_ty) orelse break :rs lhs_src
13590 try sema.maybeDerefSliceAsArray(block, lhs_src, lhs_val) orelse break :rs lhs_src
1359113591 else
1359213592 lhs_val;
1359313593
1359413594 const rhs_sub_val = if (rhs_ty.isSinglePointer(zcu))
1359513595 try sema.pointerDeref(block, rhs_src, rhs_val, rhs_ty) orelse break :rs rhs_src
1359613596 else if (rhs_ty.isSlice(zcu))
13597 try sema.maybeDerefSliceAsArray(block, rhs_src, rhs_val, rhs_ty) orelse break :rs rhs_src
13597 try sema.maybeDerefSliceAsArray(block, rhs_src, rhs_val) orelse break :rs rhs_src
1359813598 else
1359913599 rhs_val;
1360013600
......@@ -31049,7 +31049,7 @@ fn analyzeLoad(
3104931049
3105031050 if (try sema.resolveDefinedValue(block, ptr_src, ptr)) |ptr_val| {
3105131051 if (switch (ptr_ty.ptrSize(zcu)) {
31052 .slice => try sema.maybeDerefSliceAsArray(block, src, ptr_val, ptr_ty),
31052 .slice => try sema.maybeDerefSliceAsArray(block, src, ptr_val),
3105331053 else => try sema.pointerDeref(block, src, ptr_val, ptr_ty),
3105431054 }) |elem_val| {
3105531055 return .fromValue(elem_val);
......@@ -34669,7 +34669,7 @@ fn anyUndef(sema: *Sema, block: *Block, src: LazySrcLoc, val: Value) !bool {
3466934669 .slice => {
3467034670 // If the slice contents are runtime-known, reification will fail later on with a
3467134671 // specific error message.
34672 const arr = try sema.maybeDerefSliceAsArray(block, src, val, val.typeOf(zcu)) orelse return false;
34672 const arr = try sema.maybeDerefSliceAsArray(block, src, val) orelse return false;
3467334673 return sema.anyUndef(block, src, arr);
3467434674 },
3467534675 .aggregate => |aggregate| for (0..aggregate.storage.values().len) |i| {
......@@ -34710,7 +34710,7 @@ fn derefSliceAsArray(
3471034710 /// being comptime-resolved is that the block is being comptime-evaluated.
3471134711 reason: ?ComptimeReason,
3471234712) CompileError!Value {
34713 return try sema.maybeDerefSliceAsArray(block, src, slice_val, slice_val.typeOf(sema.pt.zcu)) orelse {
34713 return try sema.maybeDerefSliceAsArray(block, src, slice_val) orelse {
3471434714 return sema.failWithNeededComptime(block, src, reason);
3471534715 };
3471634716}
......@@ -34723,10 +34723,11 @@ fn maybeDerefSliceAsArray(
3472334723 block: *Block,
3472434724 src: LazySrcLoc,
3472534725 slice_val: Value,
34726 slice_ty: Type,
3472734726) CompileError!?Value {
3472834727 const pt = sema.pt;
3472934728 const zcu = pt.zcu;
34729 const slice_ty = slice_val.typeOf(zcu);
34730 assert(slice_ty.zigTypeTag(zcu) == .pointer);
3473034731 switch (slice_ty.ptrInfo(zcu).flags.size) {
3473134732 .slice => {},
3473234733 .one => return sema.pointerDeref(block, src, slice_val, slice_ty),