diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-07-20 02:47:26 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-20 02:47:26 -0400 |
| commit | 17255bed41a4b2c31a3f4342d51aa80a6f9d6b0b (patch) | |
| tree | fc98a4630e04378699dbf7c51513e59f385524f0 /src/codegen | |
| parent | 996eb01746498e0ec5e162ed40d1f3c913891150 (diff) | |
| parent | e7ea7d3480bd015053d34474a23cdf407a6a545f (diff) | |
| download | zig-17255bed41a4b2c31a3f4342d51aa80a6f9d6b0b.tar.gz zig-17255bed41a4b2c31a3f4342d51aa80a6f9d6b0b.zip | |
Merge pull request #16443 from notcancername/cbe-empty-enum
cbe: fix bug where empty enum would be generated
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/c.zig | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 1ab5a976cd..1ec331de43 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -2406,22 +2406,24 @@ pub fn genErrDecls(o: *Object) !void { const mod = o.dg.module; const writer = o.writer(); - try writer.writeAll("enum {\n"); - o.indent_writer.pushIndent(); var max_name_len: usize = 0; - for (mod.global_error_set.keys()[1..], 1..) |name_nts, value| { - const name = mod.intern_pool.stringToSlice(name_nts); - max_name_len = @max(name.len, max_name_len); - const err_val = try mod.intern(.{ .err = .{ - .ty = .anyerror_type, - .name = name_nts, - } }); - try o.dg.renderValue(writer, Type.anyerror, err_val.toValue(), .Other); - try writer.print(" = {d}u,\n", .{value}); + // do not generate an invalid empty enum when the global error set is empty + if (mod.global_error_set.keys().len > 1) { + try writer.writeAll("enum {\n"); + o.indent_writer.pushIndent(); + for (mod.global_error_set.keys()[1..], 1..) |name_nts, value| { + const name = mod.intern_pool.stringToSlice(name_nts); + max_name_len = @max(name.len, max_name_len); + const err_val = try mod.intern(.{ .err = .{ + .ty = .anyerror_type, + .name = name_nts, + } }); + try o.dg.renderValue(writer, Type.anyerror, err_val.toValue(), .Other); + try writer.print(" = {d}u,\n", .{value}); + } + o.indent_writer.popIndent(); + try writer.writeAll("};\n"); } - o.indent_writer.popIndent(); - try writer.writeAll("};\n"); - const array_identifier = "zig_errorName"; const name_prefix = array_identifier ++ "_"; const name_buf = try o.dg.gpa.alloc(u8, name_prefix.len + max_name_len); |
