mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
dwarf: do not use Type.errorSetNames() for inferred error sets
Otherwise, we risk tripping an assertion in `Type.errorSetNames()` in case the inferred error set was not yet fully resolved. This so far only surfaced when Dwarf triggers recursive analysis of an error set as part of emitting debug info for an error union.
This commit is contained in:
parent
4985abcc49
commit
e444e69dc4
@ -1117,7 +1117,18 @@ fn addDbgInfoType(
|
||||
// DW.AT.const_value, DW.FORM.data8
|
||||
mem.writeInt(u64, dbg_info_buffer.addManyAsArrayAssumeCapacity(8), 0, target_endian);
|
||||
|
||||
const error_names = if (ty.isAnyError()) module.error_name_list.items else ty.errorSetNames();
|
||||
const error_names = blk: {
|
||||
if (ty.isAnyError())
|
||||
break :blk module.error_name_list.items;
|
||||
// TODO not quite sure about the next one, but if I don't do this, I risk
|
||||
// tripping an assert in `Type.errorSetNames` in case the inferred error set
|
||||
// was not yet fully resolved. This so far only surfaced when this code would
|
||||
// schedule analysis of an error set part of some error union.
|
||||
if (ty.tag() == .error_set_inferred)
|
||||
break :blk ty.castTag(.error_set_inferred).?.data.errors.keys();
|
||||
break :blk ty.errorSetNames();
|
||||
};
|
||||
|
||||
for (error_names) |error_name| {
|
||||
const kv = module.getErrorValue(error_name) catch unreachable;
|
||||
// DW.AT.enumerator
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user