aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index 992b51c635..f34c97e6e5 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -583,7 +583,11 @@ pub fn generateSymbol(
}
const union_obj = mod.typeToUnion(typed_value.ty).?;
- const field_index = typed_value.ty.unionTagFieldIndex(un.tag.toValue(), mod).?;
+ const field_index = typed_value.ty.unionTagFieldIndex(un.tag.toValue(), mod) orelse f: {
+ assert(union_obj.getLayout(ip) == .Extern);
+ break :f mod.unionLargestField(union_obj).index;
+ };
+
const field_ty = union_obj.field_types.get(ip)[field_index].toType();
if (!field_ty.hasRuntimeBits(mod)) {
try code.appendNTimes(0xaa, math.cast(usize, layout.payload_size) orelse return error.Overflow);