diff options
| author | Eric Joldasov <bratishkaerik@getgoogleoff.me> | 2023-06-15 13:14:16 +0600 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-06-19 12:34:42 -0700 |
| commit | 50339f595aa6ec96760b1cd9f8d0e0bfc3f167fc (patch) | |
| tree | 9e2b95d8e111e905e00511962dfd32c8e5bb3245 /test/behavior/ptrfromint.zig | |
| parent | a6c8ee5231230947c928bbe1c6a39eb6e1bb9c5b (diff) | |
| download | zig-50339f595aa6ec96760b1cd9f8d0e0bfc3f167fc.tar.gz zig-50339f595aa6ec96760b1cd9f8d0e0bfc3f167fc.zip | |
all: zig fmt and rename "@XToY" to "@YFromX"
Signed-off-by: Eric Joldasov <bratishkaerik@getgoogleoff.me>
Diffstat (limited to 'test/behavior/ptrfromint.zig')
| -rw-r--r-- | test/behavior/ptrfromint.zig | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/behavior/ptrfromint.zig b/test/behavior/ptrfromint.zig new file mode 100644 index 0000000000..c07a6df834 --- /dev/null +++ b/test/behavior/ptrfromint.zig @@ -0,0 +1,48 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const expectEqual = std.testing.expectEqual; + +test "casting integer address to function pointer" { + addressToFunction(); + comptime addressToFunction(); +} + +fn addressToFunction() void { + var addr: usize = 0xdeadbee0; + _ = @ptrFromInt(*const fn () void, addr); +} + +test "mutate through ptr initialized with constant ptrFromInt value" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + forceCompilerAnalyzeBranchHardCodedPtrDereference(false); +} + +fn forceCompilerAnalyzeBranchHardCodedPtrDereference(x: bool) void { + const hardCodedP = @ptrFromInt(*volatile u8, 0xdeadbeef); + if (x) { + hardCodedP.* = hardCodedP.* | 10; + } else { + return; + } +} + +test "@ptrFromInt creates null pointer" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + const ptr = @ptrFromInt(?*u32, 0); + try expectEqual(@as(?*u32, null), ptr); +} + +test "@ptrFromInt creates allowzero zero pointer" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO + + const ptr = @ptrFromInt(*allowzero u32, 0); + try expectEqual(@as(usize, 0), @intFromPtr(ptr)); +} |
