authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-23 14:26:01+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-23 15:40:12+03:00
logbaf516218e227a55b59c9ae9e6c52b0f9ebd0980
treed5e983c4efab7d627916b452919e634e007dfee5
parent2436dd2c1b976f5902be6d20a93c164631ce3df5

Sema: don't add union field access safety check for single field unions


2 files changed, 7 insertions(+), 2 deletions(-)

src/Sema.zig+6-2
......@@ -20203,7 +20203,9 @@ fn unionFieldPtr(
2020320203 }
2020420204
2020520205 try sema.requireRuntimeBlock(block, src, null);
20206 if (!initializing and union_obj.layout == .Auto and block.wantSafety() and union_ty.unionTagTypeSafety() != null) {
20206 if (!initializing and union_obj.layout == .Auto and block.wantSafety() and
20207 union_ty.unionTagTypeSafety() != null and union_obj.fields.count() > 1)
20208 {
2020720209 const enum_ty = union_ty.unionTagTypeHypothetical();
2020820210 const wanted_tag_val = try Value.Tag.enum_field_index.create(sema.arena, field_index);
2020920211 const wanted_tag = try sema.addConstant(enum_ty, wanted_tag_val);
......@@ -20271,7 +20273,9 @@ fn unionFieldVal(
2027120273 }
2027220274
2027320275 try sema.requireRuntimeBlock(block, src, null);
20274 if (union_obj.layout == .Auto and block.wantSafety() and union_ty.unionTagTypeSafety() != null) {
20276 if (union_obj.layout == .Auto and block.wantSafety() and
20277 union_ty.unionTagTypeSafety() != null and union_obj.fields.count() > 1)
20278 {
2027520279 const enum_ty = union_ty.unionTagTypeHypothetical();
2027620280 const wanted_tag_val = try Value.Tag.enum_field_index.create(sema.arena, field_index);
2027720281 const wanted_tag = try sema.addConstant(enum_ty, wanted_tag_val);
test/behavior/align.zig+1
......@@ -222,6 +222,7 @@ fn testBytesAlign(b: u8) !void {
222222test "@alignCast slices" {
223223 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
224224 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
225 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
225226
226227 var array align(4) = [_]u32{ 1, 1 };
227228 const slice = array[0..];