| ... | ... | @@ -22215,7 +22215,22 @@ fn semaUnionFields(block: *Block, mod: *Module, union_obj: *Module.Union) Compil |
| 22215 | 22215 | } |
| 22216 | 22216 | |
| 22217 | 22217 | const gop = union_obj.fields.getOrPutAssumeCapacity(field_name); |
| 22218 | | assert(!gop.found_existing); |
| 22218 | if (gop.found_existing) { |
| 22219 | const msg = msg: { |
| 22220 | const tree = try sema.getAstTree(&block_scope); |
| 22221 | const field_src = enumFieldSrcLoc(decl, tree.*, union_obj.node_offset, field_i); |
| 22222 | const msg = try sema.errMsg(&block_scope, field_src, "duplicate union field: '{s}'", .{field_name}); |
| 22223 | errdefer msg.destroy(gpa); |
| 22224 | |
| 22225 | const prev_field_index = union_obj.fields.getIndex(field_name).?; |
| 22226 | const prev_field_src = enumFieldSrcLoc(decl, tree.*, union_obj.node_offset, prev_field_index); |
| 22227 | try sema.mod.errNoteNonLazy(prev_field_src.toSrcLoc(decl), msg, "other field here", .{}); |
| 22228 | try sema.errNote(&block_scope, src, msg, "union declared here", .{}); |
| 22229 | break :msg msg; |
| 22230 | }; |
| 22231 | return sema.failWithOwnedErrorMsg(&block_scope, msg); |
| 22232 | } |
| 22233 | |
| 22219 | 22234 | gop.value_ptr.* = .{ |
| 22220 | 22235 | .ty = try field_ty.copy(decl_arena_allocator), |
| 22221 | 22236 | .abi_align = 0, |