aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-03-10 15:32:10 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-03-10 17:52:18 -0700
commitb642fa24a67f88082b768d39e443b03c7446be76 (patch)
tree9f63c66c0f70cf297e08a5dd383b23989b00e8a6
parentb0dc61fae26ab37c41300a8e817cef45992669bb (diff)
downloadzig-b642fa24a67f88082b768d39e443b03c7446be76.tar.gz
zig-b642fa24a67f88082b768d39e443b03c7446be76.zip
stage2: implement integer pointer constants
-rw-r--r--src/codegen.zig14
-rw-r--r--test/behavior/basic.zig2
-rw-r--r--test/behavior/bugs/7250.zig7
3 files changed, 17 insertions, 6 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 20b2968c48..e33cacc787 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -303,6 +303,20 @@ pub fn generateSymbol(
},
},
.Pointer => switch (typed_value.val.tag()) {
+ .zero, .one, .int_u64, .int_big_positive => {
+ switch (target.cpu.arch.ptrBitWidth()) {
+ 32 => {
+ const x = typed_value.val.toUnsignedInt();
+ mem.writeInt(u32, try code.addManyAsArray(4), @intCast(u32, x), endian);
+ },
+ 64 => {
+ const x = typed_value.val.toUnsignedInt();
+ mem.writeInt(u64, try code.addManyAsArray(8), x, endian);
+ },
+ else => unreachable,
+ }
+ return Result{ .appended = {} };
+ },
.variable => {
const decl = typed_value.val.castTag(.variable).?.data.owner_decl;
return lowerDeclRef(bin_file, src_loc, typed_value, decl, code, debug_output, reloc_info);
diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig
index 481a15bbe5..f925ddede3 100644
--- a/test/behavior/basic.zig
+++ b/test/behavior/basic.zig
@@ -719,7 +719,7 @@ test "string concatenation" {
}
test "thread local variable" {
- if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
const S = struct {
threadlocal var t: i32 = 1234;
diff --git a/test/behavior/bugs/7250.zig b/test/behavior/bugs/7250.zig
index ea05cf70e3..898672133a 100644
--- a/test/behavior/bugs/7250.zig
+++ b/test/behavior/bugs/7250.zig
@@ -14,10 +14,7 @@ threadlocal var g_uart0 = nrfx_uart_t{
};
test "reference a global threadlocal variable" {
- if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+
_ = nrfx_uart_rx(&g_uart0);
}