aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-03-27 20:31:54 +0300
committerVeikka Tuominen <git@vexu.eu>2022-03-27 20:31:54 +0300
commitbda7993bebf6c13d1c4f98269c80a2463f99e659 (patch)
treee94414505f1baf6be87060b46ce798d5cac62e98 /src
parentd15bbebe2e6b8fcbfcd730a6c0d1be621b27045d (diff)
downloadzig-bda7993bebf6c13d1c4f98269c80a2463f99e659.tar.gz
zig-bda7993bebf6c13d1c4f98269c80a2463f99e659.zip
Sema: fix error set memory unsafety
All error names are supposed to be owned by Module.
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 4e0b57fbc6..da98cb488d 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -2317,8 +2317,8 @@ fn zirErrorSetDecl(
const extra_index_end = extra_index + (extra.data.fields_len * 2);
while (extra_index < extra_index_end) : (extra_index += 2) { // +2 to skip over doc_string
const str_index = sema.code.extra[extra_index];
- const name = try new_decl_arena_allocator.dupe(u8, sema.code.nullTerminatedString(str_index));
- const result = names.getOrPutAssumeCapacity(name);
+ const kv = try sema.mod.getErrorValue(sema.code.nullTerminatedString(str_index));
+ const result = names.getOrPutAssumeCapacity(kv.key);
assert(!result.found_existing); // verified in AstGen
}
@@ -13113,11 +13113,10 @@ fn zirReify(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
// TODO use reflection instead of magic numbers here
// error_set: type,
const name_val = struct_val[0];
+ const name_str = try name_val.toAllocatedBytes(Type.initTag(.const_slice_u8), sema.arena, target);
- names.putAssumeCapacityNoClobber(
- try name_val.toAllocatedBytes(Type.initTag(.const_slice_u8), sema.arena, target),
- {},
- );
+ const kv = try sema.mod.getErrorValue(name_str);
+ names.putAssumeCapacityNoClobber(kv.key, {});
}
// names must be sorted