authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-03-03 17:56:37-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-03-03 17:56:37-05:00
log0ea51f7f494cd84a48fd997b60196d6c4254ccac
tree16e37b2d217f7ea6418b04d37542b5f937351e34
parent6c045f9e83434e98fbfbd7c511e673274cb22afc
parentb96d5fd71f12a56ba97c6ca36e47a7cbceee9696
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #11049 from mitchellh/peer-arrays

stage2: fix a couple issues with peer resolution and const casting arrays

2 files changed, 14 insertions(+), 6 deletions(-)

src/Sema.zig+4-4
......@@ -18270,7 +18270,7 @@ fn resolvePeerTypes(
1827018270
1827118271 convert_to_slice = false;
1827218272
18273 if (chosen_ty.childType().isConstPtr() and !candidate_ty.childType().isConstPtr())
18273 if (chosen_ty.isConstPtr() and !candidate_ty.isConstPtr())
1827418274 seen_const = true;
1827518275
1827618276 continue;
......@@ -18282,7 +18282,7 @@ fn resolvePeerTypes(
1828218282 chosen_ty_tag == .Pointer and
1828318283 chosen_ty.ptrSize() == .Many)
1828418284 {
18285 if (candidate_ty.childType().isConstPtr() and !chosen_ty.childType().isConstPtr())
18285 if (candidate_ty.isConstPtr() and !chosen_ty.isConstPtr())
1828618286 seen_const = true;
1828718287
1828818288 continue;
......@@ -18303,7 +18303,7 @@ fn resolvePeerTypes(
1830318303 convert_to_slice = false; // it already is a slice
1830418304
1830518305 // If the pointer is const then we need to const
18306 if (candidate_ty.childType().isConstPtr())
18306 if (candidate_ty.isConstPtr())
1830718307 seen_const = true;
1830818308
1830918309 continue;
......@@ -18326,7 +18326,7 @@ fn resolvePeerTypes(
1832618326 convert_to_slice = false; // it already is a slice
1832718327
1832818328 // If the prev pointer is const then we need to const
18329 if (chosen_child_ty.isConstPtr())
18329 if (chosen_ty.isConstPtr())
1833018330 seen_const = true;
1833118331
1833218332 continue;
test/behavior/cast.zig+10-2
......@@ -964,7 +964,11 @@ test "cast between C pointer with different but compatible types" {
964964}
965965
966966test "peer type resolve string lit with sentinel-terminated mutable slice" {
967 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
967 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
968 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
969 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
970 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
971 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
968972
969973 var array: [4:0]u8 = undefined;
970974 array[4] = 0; // TODO remove this when #4372 is solved
......@@ -981,7 +985,11 @@ test "peer type resolve array pointers, one of them const" {
981985}
982986
983987test "peer type resolve array pointer and unknown pointer" {
984 if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO
988 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
989 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
990 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
991 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
992 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
985993
986994 const const_array: [4]u8 = undefined;
987995 var array: [4]u8 = undefined;