aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-07-10 21:39:11 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2024-07-10 21:39:55 -0400
commitc2316c52285b1319d7b44a7f7135d9e79786fd77 (patch)
tree966c3af5bb0ede2e3f1e7ec69a3bf920c0122914 /src/codegen/c.zig
parent98f3a262a7aec25e0a7f0872dc7fafc9008be1d2 (diff)
downloadzig-c2316c52285b1319d7b44a7f7135d9e79786fd77.tar.gz
zig-c2316c52285b1319d7b44a7f7135d9e79786fd77.zip
InternPool: make `global_error_set` thread-safe
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 6b723967a5..60b07f0e3f 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -2622,10 +2622,11 @@ pub fn genErrDecls(o: *Object) !void {
var max_name_len: usize = 0;
// do not generate an invalid empty enum when the global error set is empty
- if (zcu.global_error_set.keys().len > 1) {
+ const names = ip.global_error_set.getNamesFromMainThread();
+ if (names.len > 0) {
try writer.writeAll("enum {\n");
o.indent_writer.pushIndent();
- for (zcu.global_error_set.keys()[1..], 1..) |name_nts, value| {
+ for (names, 1..) |name_nts, value| {
const name = name_nts.toSlice(ip);
max_name_len = @max(name.len, max_name_len);
const err_val = try pt.intern(.{ .err = .{
@@ -2644,7 +2645,7 @@ pub fn genErrDecls(o: *Object) !void {
defer o.dg.gpa.free(name_buf);
@memcpy(name_buf[0..name_prefix.len], name_prefix);
- for (zcu.global_error_set.keys()) |name| {
+ for (names) |name| {
const name_slice = name.toSlice(ip);
@memcpy(name_buf[name_prefix.len..][0..name_slice.len], name_slice);
const identifier = name_buf[0 .. name_prefix.len + name_slice.len];
@@ -2674,7 +2675,7 @@ pub fn genErrDecls(o: *Object) !void {
}
const name_array_ty = try pt.arrayType(.{
- .len = zcu.global_error_set.count(),
+ .len = 1 + names.len,
.child = .slice_const_u8_sentinel_0_type,
});
@@ -2688,9 +2689,9 @@ pub fn genErrDecls(o: *Object) !void {
.complete,
);
try writer.writeAll(" = {");
- for (zcu.global_error_set.keys(), 0..) |name_nts, value| {
+ for (names, 1..) |name_nts, val| {
const name = name_nts.toSlice(ip);
- if (value != 0) try writer.writeByte(',');
+ if (val > 1) try writer.writeAll(", ");
try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{
fmtIdent(name),
try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, name.len), .StaticInitializer),
@@ -6873,7 +6874,7 @@ fn airErrorName(f: *Function, inst: Air.Inst.Index) !CValue {
try writer.writeAll(" = zig_errorName[");
try f.writeCValue(writer, operand, .Other);
- try writer.writeAll("];\n");
+ try writer.writeAll(" - 1];\n");
return local;
}