authorgravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-03-04 15:39:24-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-05 02:56:24-05:00
loge297860158cabb74a261a979f2f17305716c6e10
tree79408e971315aeaf3b7e5149620e757646d0c49e
parentf2a5d0bf94897554e25e889dc1c6c4c7fc6c1217

stage2: test changed behavior of c pointer resolution from stage1

stage1 peer resolves the given test to `[*c]u8` but stage2 makes that a const u8. I believe stage2 behavior is correct since the pointer itself is const.

1 files changed, 9 insertions(+), 0 deletions(-)

test/behavior/pointers.zig+9
...@@ -142,6 +142,15 @@ test "peer type resolution with C pointers" {...@@ -142,6 +142,15 @@ test "peer type resolution with C pointers" {
142 try expect(@TypeOf(x4) == [*c]u8);142 try expect(@TypeOf(x4) == [*c]u8);
143}143}
144144
145test "peer type resolution with C pointer and const pointer" {
146 // stage1 incorrectly resolves to [*]u8
147 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
148
149 var ptr_c: [*c]u8 = undefined;
150 const ptr_const: u8 = undefined;
151 try expect(@TypeOf(ptr_c, &ptr_const) == [*c]const u8);
152}
153
145test "implicit casting between C pointer and optional non-C pointer" {154test "implicit casting between C pointer and optional non-C pointer" {
146 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;155 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
147 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;156 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;