authorgravatar for john.schmidt.h@gmail.comJohn Schmidt <john.schmidt.h@gmail.com> 2022-03-18 17:35:30+01:00
committergravatar for john.schmidt.h@gmail.comJohn Schmidt <john.schmidt.h@gmail.com> 2022-04-03 13:49:34+02:00
log8f0dac01ef00574167ca99b716d9903c86a96a3d
treed63c99ca1f7997557b19369aeae915516acef13d
parent91eb1af9177d774158d888484023e3bf0be65412

sema: add more info to error message for invalid comptime union field access


1 files changed, 9 insertions(+), 3 deletions(-)

src/Sema.zig+9-3
......@@ -17484,9 +17484,15 @@ fn unionFieldVal(
1748417484 if (tag_matches) {
1748517485 return sema.addConstant(field.ty, tag_and_val.val);
1748617486 } else {
17487 // TODO enhance this saying which one was active
17488 // and which one was accessed, and showing where the union was declared.
17489 return sema.fail(block, src, "access of inactive union field", .{});
17487 const msg = msg: {
17488 const active_index = tag_and_val.tag.castTag(.enum_field_index).?.data;
17489 const active_field_name = union_obj.fields.keys()[active_index];
17490 const msg = try sema.errMsg(block, src, "access of union field '{s}' while field '{s}' is active", .{ field_name, active_field_name });
17491 errdefer msg.destroy(sema.gpa);
17492 try sema.addDeclaredHereNote(msg, union_ty);
17493 break :msg msg;
17494 };
17495 return sema.failWithOwnedErrorMsg(block, msg);
1749017496 }
1749117497 },
1749217498 .Packed, .Extern => {