diff options
| author | mlugg <mlugg@mlugg.co.uk> | 2023-03-16 17:51:31 +0000 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-03-17 01:56:36 -0400 |
| commit | 4ec299007a6a183edddfcb0505a9c1501da7ad0c (patch) | |
| tree | 147976e4d469e4e494244bb86111b73aaeb7bd11 /test | |
| parent | 68c7261e1daf7787dcbf0cd6f9b01e5678d20a93 (diff) | |
| download | zig-4ec299007a6a183edddfcb0505a9c1501da7ad0c.tar.gz zig-4ec299007a6a183edddfcb0505a9c1501da7ad0c.zip | |
Sema: allow dereferencing ill-defined pointers to zero-bit types at comptime
It doesn't matter if a pointer to a zero-bit (i.e. OPV) type is
undefined or runtime-known; we still know the result of the dereference
at comptime. Code may use this, for instance, when allocating zero-bit
types: `@as(*void, undefined)` is entirely reasonable to use at runtime,
since we know the pointer will never be accessed, thus it should be
valid at comptime too.
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/comptime_memory.zig | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/test/behavior/comptime_memory.zig b/test/behavior/comptime_memory.zig index 71d177395b..98e6e65725 100644 --- a/test/behavior/comptime_memory.zig +++ b/test/behavior/comptime_memory.zig @@ -420,3 +420,11 @@ test "mutate entire slice at comptime" { buf[1..3].* = x; } } + +test "dereference undefined pointer to zero-bit type" { + const p0: *void = undefined; + try testing.expectEqual({}, p0.*); + + const p1: *[0]u32 = undefined; + try testing.expect(p1.*.len == 0); +} |
