aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-03-03 19:28:37 +0200
committerVeikka Tuominen <git@vexu.eu>2022-03-03 22:42:34 +0200
commitaa7cbca7d37bb2cd7794ffa401193cdc3f5f9849 (patch)
tree35ba6d6b69a3df9f661ba64202f31e0d8b1b6e5f
parent69bd2c243e23fa2d4df2ec50802bd4b453211bfd (diff)
downloadzig-aa7cbca7d37bb2cd7794ffa401193cdc3f5f9849.tar.gz
zig-aa7cbca7d37bb2cd7794ffa401193cdc3f5f9849.zip
stage2: make analyzePtrArithmetic no-op with offset=0
-rw-r--r--src/Sema.zig2
-rw-r--r--test/behavior/basic.zig6
-rw-r--r--test/behavior/pointers.zig6
3 files changed, 12 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 239d8cfc93..90de95b5d6 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -9494,6 +9494,8 @@ fn analyzePtrArithmetic(
}
const offset_int = try sema.usizeCast(block, offset_src, offset_val.toUnsignedInt());
+ // TODO I tried to put this check earlier but it the LLVM backend generate invalid instructinons
+ if (offset_int == 0) return ptr;
if (ptr_val.getUnsignedInt()) |addr| {
const target = sema.mod.getTarget();
const ptr_child_ty = ptr_ty.childType();
diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig
index 3d3c44cbbc..6b63c8b89b 100644
--- a/test/behavior/basic.zig
+++ b/test/behavior/basic.zig
@@ -747,7 +747,11 @@ fn maybe(x: bool) anyerror!?u32 {
}
test "pointer to thread local array" {
- if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
const s = "Hello world";
std.mem.copy(u8, buffer[0..], s);
diff --git a/test/behavior/pointers.zig b/test/behavior/pointers.zig
index d3d2188b12..a74ce12ab3 100644
--- a/test/behavior/pointers.zig
+++ b/test/behavior/pointers.zig
@@ -391,7 +391,11 @@ test "@ptrToInt on null optional at comptime" {
}
test "indexing array with sentinel returns correct type" {
- if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
var s: [:0]const u8 = "abc";
try testing.expectEqualSlices(u8, "*const u8", @typeName(@TypeOf(&s[0])));