Commit baf516218e

Veikka Tuominen <git@vexu.eu>
2022-07-23 13:26:01
Sema: don't add union field access safety check for single field unions
1 parent 2436dd2
Changed files (2)
src
test
behavior
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);
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..];