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...@@ -13587,14 +13587,14 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
13587 const lhs_sub_val = if (lhs_ty.isSinglePointer(zcu))13587 const lhs_sub_val = if (lhs_ty.isSinglePointer(zcu))
13588 try sema.pointerDeref(block, lhs_src, lhs_val, lhs_ty) orelse break :rs lhs_src13588 try sema.pointerDeref(block, lhs_src, lhs_val, lhs_ty) orelse break :rs lhs_src
13589 else if (lhs_ty.isSlice(zcu))13589 else if (lhs_ty.isSlice(zcu))
13590 try sema.maybeDerefSliceAsArray(block, lhs_src, lhs_val, lhs_ty) orelse break :rs lhs_src13590 try sema.maybeDerefSliceAsArray(block, lhs_src, lhs_val) orelse break :rs lhs_src
13591 else13591 else
13592 lhs_val;13592 lhs_val;
1359313593
13594 const rhs_sub_val = if (rhs_ty.isSinglePointer(zcu))13594 const rhs_sub_val = if (rhs_ty.isSinglePointer(zcu))
13595 try sema.pointerDeref(block, rhs_src, rhs_val, rhs_ty) orelse break :rs rhs_src13595 try sema.pointerDeref(block, rhs_src, rhs_val, rhs_ty) orelse break :rs rhs_src
13596 else if (rhs_ty.isSlice(zcu))13596 else if (rhs_ty.isSlice(zcu))
13597 try sema.maybeDerefSliceAsArray(block, rhs_src, rhs_val, rhs_ty) orelse break :rs rhs_src13597 try sema.maybeDerefSliceAsArray(block, rhs_src, rhs_val) orelse break :rs rhs_src
13598 else13598 else
13599 rhs_val;13599 rhs_val;
1360013600
...@@ -31049,7 +31049,7 @@ fn analyzeLoad(...@@ -31049,7 +31049,7 @@ fn analyzeLoad(
3104931049
31050 if (try sema.resolveDefinedValue(block, ptr_src, ptr)) |ptr_val| {31050 if (try sema.resolveDefinedValue(block, ptr_src, ptr)) |ptr_val| {
31051 if (switch (ptr_ty.ptrSize(zcu)) {31051 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),
31053 else => try sema.pointerDeref(block, src, ptr_val, ptr_ty),31053 else => try sema.pointerDeref(block, src, ptr_val, ptr_ty),
31054 }) |elem_val| {31054 }) |elem_val| {
31055 return .fromValue(elem_val);31055 return .fromValue(elem_val);
...@@ -34669,7 +34669,7 @@ fn anyUndef(sema: *Sema, block: *Block, src: LazySrcLoc, val: Value) !bool {...@@ -34669,7 +34669,7 @@ fn anyUndef(sema: *Sema, block: *Block, src: LazySrcLoc, val: Value) !bool {
34669 .slice => {34669 .slice => {
34670 // If the slice contents are runtime-known, reification will fail later on with a34670 // If the slice contents are runtime-known, reification will fail later on with a
34671 // specific error message.34671 // 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;
34673 return sema.anyUndef(block, src, arr);34673 return sema.anyUndef(block, src, arr);
34674 },34674 },
34675 .aggregate => |aggregate| for (0..aggregate.storage.values().len) |i| {34675 .aggregate => |aggregate| for (0..aggregate.storage.values().len) |i| {
...@@ -34710,7 +34710,7 @@ fn derefSliceAsArray(...@@ -34710,7 +34710,7 @@ fn derefSliceAsArray(
34710 /// being comptime-resolved is that the block is being comptime-evaluated.34710 /// being comptime-resolved is that the block is being comptime-evaluated.
34711 reason: ?ComptimeReason,34711 reason: ?ComptimeReason,
34712) CompileError!Value {34712) 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 {
34714 return sema.failWithNeededComptime(block, src, reason);34714 return sema.failWithNeededComptime(block, src, reason);
34715 };34715 };
34716}34716}
...@@ -34723,10 +34723,11 @@ fn maybeDerefSliceAsArray(...@@ -34723,10 +34723,11 @@ fn maybeDerefSliceAsArray(
34723 block: *Block,34723 block: *Block,
34724 src: LazySrcLoc,34724 src: LazySrcLoc,
34725 slice_val: Value,34725 slice_val: Value,
34726 slice_ty: Type,
34727) CompileError!?Value {34726) CompileError!?Value {
34728 const pt = sema.pt;34727 const pt = sema.pt;
34729 const zcu = pt.zcu;34728 const zcu = pt.zcu;
34729 const slice_ty = slice_val.typeOf(zcu);
34730 assert(slice_ty.zigTypeTag(zcu) == .pointer);
34730 switch (slice_ty.ptrInfo(zcu).flags.size) {34731 switch (slice_ty.ptrInfo(zcu).flags.size) {
34731 .slice => {},34732 .slice => {},
34732 .one => return sema.pointerDeref(block, src, slice_val, slice_ty),34733 .one => return sema.pointerDeref(block, src, slice_val, slice_ty),