From baf516218e227a55b59c9ae9e6c52b0f9ebd0980 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sat, 23 Jul 2022 14:26:01 +0300 Subject: [PATCH] Sema: don't add union field access safety check for single field unions --- src/Sema.zig | 8 ++++++-- test/behavior/align.zig | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index d23487a5fd..db3cfa6d40 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -20203,7 +20203,9 @@ fn unionFieldPtr( } try sema.requireRuntimeBlock(block, src, null); - if (!initializing and union_obj.layout == .Auto and block.wantSafety() and union_ty.unionTagTypeSafety() != null) { + if (!initializing and union_obj.layout == .Auto and block.wantSafety() and + union_ty.unionTagTypeSafety() != null and union_obj.fields.count() > 1) + { const enum_ty = union_ty.unionTagTypeHypothetical(); const wanted_tag_val = try Value.Tag.enum_field_index.create(sema.arena, field_index); const wanted_tag = try sema.addConstant(enum_ty, wanted_tag_val); @@ -20271,7 +20273,9 @@ fn unionFieldVal( } try sema.requireRuntimeBlock(block, src, null); - if (union_obj.layout == .Auto and block.wantSafety() and union_ty.unionTagTypeSafety() != null) { + if (union_obj.layout == .Auto and block.wantSafety() and + union_ty.unionTagTypeSafety() != null and union_obj.fields.count() > 1) + { const enum_ty = union_ty.unionTagTypeHypothetical(); const wanted_tag_val = try Value.Tag.enum_field_index.create(sema.arena, field_index); const wanted_tag = try sema.addConstant(enum_ty, wanted_tag_val); diff --git a/test/behavior/align.zig b/test/behavior/align.zig index d09e97c05b..26e3d91373 100644 --- a/test/behavior/align.zig +++ b/test/behavior/align.zig @@ -222,6 +222,7 @@ fn testBytesAlign(b: u8) !void { test "@alignCast slices" { if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; var array align(4) = [_]u32{ 1, 1 }; const slice = array[0..];