authorgravatar for 119271574+notcancername@users.noreply.github.comnotcancername <119271574+notcancername@users.noreply.github.com> 2023-07-19 06:44:39+02:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-07-19 23:20:25-04:00
logce859cfcb8c87b83c55209b5321ee86b9e5e80a7
tree22090be1a2cb5796a881d8ca441aaf44da151ef8
parent996eb01746498e0ec5e162ed40d1f3c913891150

cbe: fix bug where empty enum would be generated

fix a bug where an invalid empty enum would be emitted into the C source file if the global error set was empty.

1 files changed, 16 insertions(+), 14 deletions(-)

src/codegen/c.zig+16-14
...@@ -2406,22 +2406,24 @@ pub fn genErrDecls(o: *Object) !void {...@@ -2406,22 +2406,24 @@ pub fn genErrDecls(o: *Object) !void {
2406 const mod = o.dg.module;2406 const mod = o.dg.module;
2407 const writer = o.writer();2407 const writer = o.writer();
24082408
2409 try writer.writeAll("enum {\n");
2410 o.indent_writer.pushIndent();
2411 var max_name_len: usize = 0;2409 var max_name_len: usize = 0;
2412 for (mod.global_error_set.keys()[1..], 1..) |name_nts, value| {2410 // do not generate an invalid empty enum when the global error set is empty
2413 const name = mod.intern_pool.stringToSlice(name_nts);2411 if (mod.global_error_set.keys().len > 1) {
2414 max_name_len = @max(name.len, max_name_len);2412 try writer.writeAll("enum {\n");
2415 const err_val = try mod.intern(.{ .err = .{2413 o.indent_writer.pushIndent();
2416 .ty = .anyerror_type,2414 for (mod.global_error_set.keys()[1..], 1..) |name_nts, value| {
2417 .name = name_nts,2415 const name = mod.intern_pool.stringToSlice(name_nts);
2418 } });2416 max_name_len = @max(name.len, max_name_len);
2419 try o.dg.renderValue(writer, Type.anyerror, err_val.toValue(), .Other);2417 const err_val = try mod.intern(.{ .err = .{
2420 try writer.print(" = {d}u,\n", .{value});2418 .ty = .anyerror_type,
2419 .name = name_nts,
2420 } });
2421 try o.dg.renderValue(writer, Type.anyerror, err_val.toValue(), .Other);
2422 try writer.print(" = {d}u,\n", .{value});
2423 }
2424 o.indent_writer.popIndent();
2425 try writer.writeAll("};\n");
2421 }2426 }
2422 o.indent_writer.popIndent();
2423 try writer.writeAll("};\n");
2424
2425 const array_identifier = "zig_errorName";2427 const array_identifier = "zig_errorName";
2426 const name_prefix = array_identifier ++ "_";2428 const name_prefix = array_identifier ++ "_";
2427 const name_buf = try o.dg.gpa.alloc(u8, name_prefix.len + max_name_len);2429 const name_buf = try o.dg.gpa.alloc(u8, name_prefix.len + max_name_len);