authorgravatar for jmc-88@users.noreply.github.comDaniele Cocca <jmc-88@users.noreply.github.com> 2022-03-13 20:36:15+00:00
committergravatar for daniele.cocca@gmail.comDaniele Cocca <daniele.cocca@gmail.com> 2022-03-14 00:52:20+00:00
log5a971bbeeaa58e66e5a10243a9716aabac72bdd0
tree0cb5530a32c86caf525855c842275c83f2c52b33
parentd0277a3d17f738036a951a44f367839597dcaee4

Review suggestion: use hasRuntimeBitsIgnoreComptime()

This should cover not only integers, as done in 87744a7ea9a2449764a110da4210d7750e3938ee, but also void, enums with a single field, etc... Co-authored-by: Andrew Kelley <andrew@ziglang.org>

1 files changed, 8 insertions(+), 6 deletions(-)

src/codegen/c.zig+8-6
...@@ -839,13 +839,11 @@ pub const DeclGen = struct {...@@ -839,13 +839,11 @@ pub const DeclGen = struct {
839 try w.writeAll("(");839 try w.writeAll("(");
840 const param_len = dg.decl.ty.fnParamLen();840 const param_len = dg.decl.ty.fnParamLen();
841841
842 const target = dg.module.getTarget();
843 var index: usize = 0;842 var index: usize = 0;
844 var params_written: usize = 0;843 var params_written: usize = 0;
845 while (index < param_len) : (index += 1) {844 while (index < param_len) : (index += 1) {
846 const param_type = dg.decl.ty.fnParamType(index);845 const param_type = dg.decl.ty.fnParamType(index);
847 if (param_type.zigTypeTag() == .Void) continue;846 if (!param_type.hasRuntimeBitsIgnoreComptime()) continue;
848 if (param_type.isInt() and param_type.intInfo(target).bits == 0) continue;
849 if (params_written > 0) {847 if (params_written > 0) {
850 try w.writeAll(", ");848 try w.writeAll(", ");
851 }849 }
...@@ -885,7 +883,7 @@ pub const DeclGen = struct {...@@ -885,7 +883,7 @@ pub const DeclGen = struct {
885 var params_written: usize = 0;883 var params_written: usize = 0;
886 var index: usize = 0;884 var index: usize = 0;
887 while (index < param_len) : (index += 1) {885 while (index < param_len) : (index += 1) {
888 if (fn_info.param_types[index].zigTypeTag() == .Void) continue;886 if (!fn_info.param_types[index].hasRuntimeBitsIgnoreComptime()) continue;
889 if (params_written > 0) {887 if (params_written > 0) {
890 try bw.writeAll(", ");888 try bw.writeAll(", ");
891 }889 }
...@@ -2628,8 +2626,11 @@ fn airCall(...@@ -2628,8 +2626,11 @@ fn airCall(
2628 }2626 }
26292627
2630 try writer.writeAll("(");2628 try writer.writeAll("(");
2631 for (args) |arg, i| {2629 var args_written: usize = 0;
2632 if (i != 0) {2630 for (args) |arg| {
2631 const ty = f.air.typeOf(arg);
2632 if (!ty.hasRuntimeBitsIgnoreComptime()) continue;
2633 if (args_written != 0) {
2633 try writer.writeAll(", ");2634 try writer.writeAll(", ");
2634 }2635 }
2635 if (f.air.value(arg)) |val| {2636 if (f.air.value(arg)) |val| {
...@@ -2638,6 +2639,7 @@ fn airCall(...@@ -2638,6 +2639,7 @@ fn airCall(
2638 const val = try f.resolveInst(arg);2639 const val = try f.resolveInst(arg);
2639 try f.writeCValue(writer, val);2640 try f.writeCValue(writer, val);
2640 }2641 }
2642 args_written += 1;
2641 }2643 }
2642 try writer.writeAll(");\n");2644 try writer.writeAll(");\n");
2643 return result_local;2645 return result_local;