aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/basic.zig
diff options
context:
space:
mode:
authorsin-ack <77421532+sin-ack@users.noreply.github.com>2022-04-30 05:53:06 +0300
committerGitHub <noreply@github.com>2022-04-29 22:53:06 -0400
commit032c722d2019a475362c0ae01241a80417bdd8a2 (patch)
tree97e0d9229e2f1173d2bfb8f53351476656042db4 /test/behavior/basic.zig
parent609896a6e8180ec32844d2b4656b52ef41fe7757 (diff)
downloadzig-032c722d2019a475362c0ae01241a80417bdd8a2.tar.gz
zig-032c722d2019a475362c0ae01241a80417bdd8a2.zip
Sema: Fix many-pointer array concatenation at comptime (#11512)
* Sema: Correctly determine whether array_cat lhs and rhs are single ptrs Many-pointers are also not single-pointers and wouldn't be considered here. This commit makes the conditions use the appropriately-named isSinglePointer instead. * Sema: Correctly obtain ArrayInfo for many-pointer concatenation Many-pointers at comptime have a known size like slices and can be used in array concatenation. This fixes a stage1 regression. * test: Add comptime manyptr concatenation test Co-authored-by: sin-ack <sin-ack@users.noreply.github.com>
Diffstat (limited to 'test/behavior/basic.zig')
-rw-r--r--test/behavior/basic.zig25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig
index d608cba98b..12ead179f4 100644
--- a/test/behavior/basic.zig
+++ b/test/behavior/basic.zig
@@ -709,6 +709,31 @@ test "string concatenation" {
try expect(b[len] == 0);
}
+fn manyptrConcat(comptime s: [*:0]const u8) [*:0]const u8 {
+ return "very " ++ s;
+}
+
+test "comptime manyptr concatenation" {
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
+
+ const s = "epic";
+ const actual = manyptrConcat(s);
+ const expected = "very epic";
+
+ const len = mem.len(actual);
+ const len_with_null = len + 1;
+ {
+ var i: u32 = 0;
+ while (i < len_with_null) : (i += 1) {
+ try expect(actual[i] == expected[i]);
+ }
+ }
+ try expect(actual[len] == 0);
+ try expect(expected[len] == 0);
+}
+
test "thread local variable" {
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO