Commit 5a971bbeea

Daniele Cocca <jmc-88@users.noreply.github.com>
2022-03-13 21:36:15
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 parent d0277a3
Changed files (1)
src
codegen
src/codegen/c.zig
@@ -839,13 +839,11 @@ pub const DeclGen = struct {
         try w.writeAll("(");
         const param_len = dg.decl.ty.fnParamLen();
 
-        const target = dg.module.getTarget();
         var index: usize = 0;
         var params_written: usize = 0;
         while (index < param_len) : (index += 1) {
             const param_type = dg.decl.ty.fnParamType(index);
-            if (param_type.zigTypeTag() == .Void) continue;
-            if (param_type.isInt() and param_type.intInfo(target).bits == 0) continue;
+            if (!param_type.hasRuntimeBitsIgnoreComptime()) continue;
             if (params_written > 0) {
                 try w.writeAll(", ");
             }
@@ -885,7 +883,7 @@ pub const DeclGen = struct {
         var params_written: usize = 0;
         var index: usize = 0;
         while (index < param_len) : (index += 1) {
-            if (fn_info.param_types[index].zigTypeTag() == .Void) continue;
+            if (!fn_info.param_types[index].hasRuntimeBitsIgnoreComptime()) continue;
             if (params_written > 0) {
                 try bw.writeAll(", ");
             }
@@ -2628,8 +2626,11 @@ fn airCall(
     }
 
     try writer.writeAll("(");
-    for (args) |arg, i| {
-        if (i != 0) {
+    var args_written: usize = 0;
+    for (args) |arg| {
+        const ty = f.air.typeOf(arg);
+        if (!ty.hasRuntimeBitsIgnoreComptime()) continue;
+        if (args_written != 0) {
             try writer.writeAll(", ");
         }
         if (f.air.value(arg)) |val| {
@@ -2638,6 +2639,7 @@ fn airCall(
             const val = try f.resolveInst(arg);
             try f.writeCValue(writer, val);
         }
+        args_written += 1;
     }
     try writer.writeAll(");\n");
     return result_local;