aboutsummaryrefslogtreecommitdiff
path: root/src/Type.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2025-02-01 09:47:01 +0000
committermlugg <mlugg@mlugg.co.uk>2025-02-01 09:48:18 +0000
commit149031204c0c804a66571a751b259da95886640d (patch)
tree4c36c2b86776a5c0116e7212bc31dd1f4bfe3f78 /src/Type.zig
parentd97441d37ef08813187f1b44ec29612619104585 (diff)
downloadzig-149031204c0c804a66571a751b259da95886640d.tar.gz
zig-149031204c0c804a66571a751b259da95886640d.zip
Sema: skip aliasing check and runtime operation for `@memcpy` of zero-bit type
This check isn't valid in such cases, because the source and destination pointers both refer to zero bits of memory, meaning they effectively never alias. Resolves: #21655
Diffstat (limited to 'src/Type.zig')
-rw-r--r--src/Type.zig7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/Type.zig b/src/Type.zig
index e6fc9c7d6a..403caad668 100644
--- a/src/Type.zig
+++ b/src/Type.zig
@@ -452,6 +452,13 @@ pub fn hasRuntimeBitsIgnoreComptime(ty: Type, zcu: *const Zcu) bool {
return hasRuntimeBitsInner(ty, true, .eager, zcu, {}) catch unreachable;
}
+pub fn hasRuntimeBitsIgnoreComptimeSema(ty: Type, pt: Zcu.PerThread) SemaError!bool {
+ return hasRuntimeBitsInner(ty, true, .sema, pt.zcu, pt.tid) catch |err| switch (err) {
+ error.NeedLazy => unreachable, // this would require a resolve strat of lazy
+ else => |e| return e,
+ };
+}
+
/// true if and only if the type takes up space in memory at runtime.
/// There are two reasons a type will return false:
/// * the type is a comptime-only type. For example, the type `type` itself.