mirror of
https://github.com/ziglang/zig.git
synced 2024-11-26 23:22:44 +00:00
0fe3fd01dd
The compiler actually doesn't need any functional changes for this: Sema does reification based on the tag indices of `std.builtin.Type` already! So, no zig1.wasm update is necessary. This change is necessary to disallow name clashes between fields and decls on a type, which is a prerequisite of #9938.
24 lines
812 B
Zig
24 lines
812 B
Zig
const std = @import("std");
|
|
const expect = std.testing.expect;
|
|
|
|
test "pointer casting" {
|
|
const bytes align(@alignOf(u32)) = [_]u8{ 0x12, 0x12, 0x12, 0x12 };
|
|
const u32_ptr: *const u32 = @ptrCast(&bytes);
|
|
try expect(u32_ptr.* == 0x12121212);
|
|
|
|
// Even this example is contrived - there are better ways to do the above than
|
|
// pointer casting. For example, using a slice narrowing cast:
|
|
const u32_value = std.mem.bytesAsSlice(u32, bytes[0..])[0];
|
|
try expect(u32_value == 0x12121212);
|
|
|
|
// And even another way, the most straightforward way to do it:
|
|
try expect(@as(u32, @bitCast(bytes)) == 0x12121212);
|
|
}
|
|
|
|
test "pointer child type" {
|
|
// pointer types have a `child` field which tells you the type they point to.
|
|
try expect(@typeInfo(*u32).pointer.child == u32);
|
|
}
|
|
|
|
// test
|