mirror of
https://github.com/ziglang/zig.git
synced 2026-02-06 14:37:04 +00:00
stage2: comptime slice of pointer to hardcoded address
This commit is contained in:
parent
0942bf73c9
commit
7062c8a886
@ -8001,7 +8001,12 @@ fn analyzePtrArithmetic(
|
||||
const offset_int = offset_val.toUnsignedInt();
|
||||
if (ptr_val.getUnsignedInt()) |addr| {
|
||||
const target = sema.mod.getTarget();
|
||||
const elem_ty = ptr_ty.childType();
|
||||
const ptr_child_ty = ptr_ty.childType();
|
||||
const elem_ty = if (ptr_ty.isSinglePointer() and ptr_child_ty.zigTypeTag() == .Array)
|
||||
ptr_child_ty.childType()
|
||||
else
|
||||
ptr_child_ty;
|
||||
|
||||
const elem_size = elem_ty.abiSize(target);
|
||||
const new_addr = switch (air_tag) {
|
||||
.ptr_add => addr + elem_size * offset_int,
|
||||
|
||||
@ -65,6 +65,7 @@ test {
|
||||
if (builtin.zig_is_stage2) {
|
||||
// When all comptime_memory.zig tests pass, #9646 can be closed.
|
||||
// _ = @import("behavior/comptime_memory.zig");
|
||||
_ = @import("behavior/slice_stage2.zig");
|
||||
} else {
|
||||
_ = @import("behavior/align_stage1.zig");
|
||||
_ = @import("behavior/alignof.zig");
|
||||
|
||||
12
test/behavior/slice_stage2.zig
Normal file
12
test/behavior/slice_stage2.zig
Normal file
@ -0,0 +1,12 @@
|
||||
const std = @import("std");
|
||||
const expect = std.testing.expect;
|
||||
|
||||
const x = @intToPtr([*]i32, 0x1000)[0..0x500];
|
||||
const y = x[0x100..];
|
||||
test "compile time slice of pointer to hard coded address" {
|
||||
try expect(@ptrToInt(x) == 0x1000);
|
||||
try expect(x.len == 0x500);
|
||||
|
||||
try expect(@ptrToInt(y) == 0x1400);
|
||||
try expect(y.len == 0x400);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user