aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig33
-rw-r--r--src/wasi_libc.zig4
2 files changed, 33 insertions, 4 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 9e62aff122..644410dc20 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -28454,6 +28454,14 @@ fn elemPtrOneLayerOnly(
try sema.checkLogicalPtrOperation(block, src, indexable_ty);
const result_ty = try indexable_ty.elemPtrType(null, pt);
+ try sema.validateRuntimeElemAccess(block, elem_index_src, result_ty, indexable_ty, indexable_src);
+ try sema.validateRuntimeValue(block, indexable_src, indexable);
+
+ if (!try result_ty.childType(zcu).hasRuntimeBitsIgnoreComptimeSema(pt)) {
+ // zero-bit child type; just bitcast the pointer
+ return block.addBitCast(result_ty, indexable);
+ }
+
return block.addPtrElemPtr(indexable, elem_index, result_ty);
},
.one => {
@@ -28926,6 +28934,11 @@ fn elemPtrSlice(
const cmp_op: Air.Inst.Tag = if (slice_sent) .cmp_lte else .cmp_lt;
try sema.addSafetyCheckIndexOob(block, src, elem_index, len_inst, cmp_op);
}
+ if (!try slice_ty.childType(zcu).hasRuntimeBitsIgnoreComptimeSema(pt)) {
+ // zero-bit child type; just extract the pointer and bitcast it
+ const slice_ptr = try block.addTyOp(.slice_ptr, slice_ty.slicePtrFieldType(zcu), slice);
+ return block.addBitCast(elem_ptr_ty, slice_ptr);
+ }
return block.addSliceElemPtr(slice, elem_index, elem_ptr_ty);
}
@@ -34966,7 +34979,15 @@ pub fn resolveStructLayout(sema: *Sema, ty: Type) SemaError!void {
offsets[i] = @intCast(aligns[i].forward(offset));
offset = offsets[i] + sizes[i];
}
- struct_type.setLayoutResolved(ip, @intCast(big_align.forward(offset)), big_align);
+ const size = std.math.cast(u32, big_align.forward(offset)) orelse {
+ const msg = try sema.errMsg(
+ ty.srcLoc(zcu),
+ "struct layout requires size {d}, this compiler implementation supports up to {d}",
+ .{ big_align.forward(offset), std.math.maxInt(u32) },
+ );
+ return sema.failWithOwnedErrorMsg(null, msg);
+ };
+ struct_type.setLayoutResolved(ip, size, big_align);
_ = try ty.comptimeOnlySema(pt);
}
@@ -35241,7 +35262,15 @@ pub fn resolveUnionLayout(sema: *Sema, ty: Type) SemaError!void {
break :layout .{ size, max_align.max(tag_align), padding };
} else .{ max_align.forward(max_size), max_align, 0 };
- union_type.setHaveLayout(ip, @intCast(size), padding, alignment);
+ const casted_size = std.math.cast(u32, size) orelse {
+ const msg = try sema.errMsg(
+ ty.srcLoc(pt.zcu),
+ "union layout requires size {d}, this compiler implementation supports up to {d}",
+ .{ size, std.math.maxInt(u32) },
+ );
+ return sema.failWithOwnedErrorMsg(null, msg);
+ };
+ union_type.setHaveLayout(ip, casted_size, padding, alignment);
if (union_type.flagsUnordered(ip).assumed_runtime_bits and !(try ty.hasRuntimeBitsSema(pt))) {
const msg = try sema.errMsg(
diff --git a/src/wasi_libc.zig b/src/wasi_libc.zig
index 33c03e8068..bf6e13e556 100644
--- a/src/wasi_libc.zig
+++ b/src/wasi_libc.zig
@@ -1252,6 +1252,6 @@ const emulated_signal_bottom_half_src_files = &[_][]const u8{
};
const emulated_signal_top_half_src_files = &[_][]const u8{
- "wasi/libc-top-half/musl/src/signal/psignal.c",
- "wasi/libc-top-half/musl/src/string/strsignal.c",
+ "musl/src/signal/psignal.c",
+ "musl/src/string/strsignal.c",
};