Commit f5e7d2d00c

Vexu <git@vexu.eu>
2019-12-29 10:45:39
translate-c fix bugs
Thanks @daurnimator
1 parent 59cc707
Changed files (3)
lib
std
src-self-hosted
test
lib/std/zig/render.zig
@@ -643,7 +643,7 @@ fn renderExpression(
                 },
 
                 .ArrayAccess => |index_expr| {
-                    const lbracket = tree.prevToken(index_expr.firstToken());
+                    const lbracket = tree.nextToken(suffix_op.lhs.node.lastToken());
                     const rbracket = tree.nextToken(index_expr.lastToken());
 
                     try renderExpression(allocator, stream, tree, indent, start_col, suffix_op.lhs.node, Space.None);
src-self-hosted/translate_c.zig
@@ -410,11 +410,17 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
         const param_name = tokenSlice(c, param.name_token orelse
             return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name}));
 
-        const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {
-            try block_scope.variables.push(.{ .name = param_name, .alias = a });
-            break :blk a;
-        } else param_name;
-        const arg_name = try std.fmt.allocPrint(c.a(), "_arg_{}", .{checked_param_name});
+        // in Zig top level declarations are order-independent so this might be shadowed later
+        const checked_param_name = try std.fmt.allocPrint(c.a(), "{}_{}", .{ param_name, c.getMangle() });
+        try block_scope.variables.push(.{ .name = param_name, .alias = checked_param_name });
+
+        const arg_name = blk: {
+            const bare_arg_name = try std.fmt.allocPrint(c.a(), "_arg_{}", .{checked_param_name});
+            break :blk if (try scope.createAlias(rp.c, bare_arg_name)) |a|
+                a
+            else
+                bare_arg_name;
+        };
 
         const node = try transCreateNodeVarDecl(c, false, false, checked_param_name);
         node.eq_token = try appendToken(c, .Equal, "=");
@@ -533,49 +539,53 @@ fn transTypeDef(c: *Context, typedef_decl: *const ZigClangTypedefNameDecl) Error
 
     const typedef_name = try c.str(ZigClangDecl_getName_bytes_begin(@ptrCast(*const ZigClangDecl, typedef_decl)));
 
-    if (mem.eql(u8, typedef_name, "uint8_t"))
+    // TODO https://github.com/ziglang/zig/issues/3756
+    // TODO https://github.com/ziglang/zig/issues/1802
+    const checked_name = if (isZigPrimitiveType(typedef_name)) try std.fmt.allocPrint(c.a(), "_{}", .{typedef_name}) else typedef_name;
+
+    if (mem.eql(u8, checked_name, "uint8_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "u8")
-    else if (mem.eql(u8, typedef_name, "int8_t"))
+    else if (mem.eql(u8, checked_name, "int8_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "i8")
-    else if (mem.eql(u8, typedef_name, "uint16_t"))
+    else if (mem.eql(u8, checked_name, "uint16_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "u16")
-    else if (mem.eql(u8, typedef_name, "int16_t"))
+    else if (mem.eql(u8, checked_name, "int16_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "i16")
-    else if (mem.eql(u8, typedef_name, "uint32_t"))
+    else if (mem.eql(u8, checked_name, "uint32_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "u32")
-    else if (mem.eql(u8, typedef_name, "int32_t"))
+    else if (mem.eql(u8, checked_name, "int32_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "i32")
-    else if (mem.eql(u8, typedef_name, "uint64_t"))
+    else if (mem.eql(u8, checked_name, "uint64_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "u64")
-    else if (mem.eql(u8, typedef_name, "int64_t"))
+    else if (mem.eql(u8, checked_name, "int64_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "i64")
-    else if (mem.eql(u8, typedef_name, "intptr_t"))
+    else if (mem.eql(u8, checked_name, "intptr_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "isize")
-    else if (mem.eql(u8, typedef_name, "uintptr_t"))
+    else if (mem.eql(u8, checked_name, "uintptr_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "usize")
-    else if (mem.eql(u8, typedef_name, "ssize_t"))
+    else if (mem.eql(u8, checked_name, "ssize_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "isize")
-    else if (mem.eql(u8, typedef_name, "size_t"))
+    else if (mem.eql(u8, checked_name, "size_t"))
         return transTypeDefAsBuiltin(c, typedef_decl, "usize");
 
-    _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), typedef_name);
+    _ = try c.decl_table.put(@ptrToInt(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)), checked_name);
     const visib_tok = try appendToken(c, .Keyword_pub, "pub");
     const const_tok = try appendToken(c, .Keyword_const, "const");
-    const node = try transCreateNodeVarDecl(c, true, true, typedef_name);
+    const node = try transCreateNodeVarDecl(c, true, true, checked_name);
     node.eq_token = try appendToken(c, .Equal, "=");
 
     const child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);
     const typedef_loc = ZigClangTypedefNameDecl_getLocation(typedef_decl);
     node.init_node = transQualType(rp, child_qt, typedef_loc) catch |err| switch (err) {
         error.UnsupportedType => {
-            try failDecl(c, typedef_loc, typedef_name, "unable to resolve typedef child type", .{});
+            try failDecl(c, typedef_loc, checked_name, "unable to resolve typedef child type", .{});
             return null;
         },
         error.OutOfMemory => |e| return e,
     };
     node.semicolon_token = try appendToken(c, .Semicolon, ";");
-    try addTopLevelDecl(c, typedef_name, &node.base);
-    return transCreateNodeIdentifier(c, typedef_name);
+    try addTopLevelDecl(c, checked_name, &node.base);
+    return transCreateNodeIdentifier(c, checked_name);
 }
 
 fn transRecordDecl(c: *Context, record_decl: *const ZigClangRecordDecl) Error!?*ast.Node {
@@ -4226,7 +4236,7 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u
     _ = try appendToken(c, .RParen, ")");
 
     const type_of = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
-    type_of.rparen_token = try appendToken(c, .LParen, ")");
+    type_of.rparen_token = try appendToken(c, .RParen, ")");
 
     const fn_proto = try c.a().create(ast.Node.FnProto);
     fn_proto.* = .{
@@ -4383,8 +4393,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
             const type_of_1 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
             try type_id_1.params.push(&type_of_1.base);
             try type_of_1.params.push(node_to_cast);
-            type_of_1.rparen_token = try appendToken(c, .LParen, ")");
-            type_id_1.rparen_token = try appendToken(c, .LParen, ")");
+            type_of_1.rparen_token = try appendToken(c, .RParen, ")");
+            type_id_1.rparen_token = try appendToken(c, .RParen, ")");
 
             const cmp_1 = try c.a().create(ast.Node.InfixOp);
             cmp_1.* = .{
@@ -4394,12 +4404,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
                 .rhs = try transCreateNodeEnumLiteral(c, "Pointer"),
             };
             if_1.condition = &cmp_1.base;
-            _ = try appendToken(c, .LParen, ")");
+            _ = try appendToken(c, .RParen, ")");
 
             const ptr_cast = try transCreateNodeBuiltinFnCall(c, "@ptrCast");
             try ptr_cast.params.push(inner_node);
             try ptr_cast.params.push(node_to_cast);
-            ptr_cast.rparen_token = try appendToken(c, .LParen, ")");
+            ptr_cast.rparen_token = try appendToken(c, .RParen, ")");
             if_1.body = &ptr_cast.base;
 
             const else_1 = try transCreateNodeElse(c);
@@ -4410,8 +4420,8 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
             const type_of_2 = try transCreateNodeBuiltinFnCall(c, "@TypeOf");
             try type_id_2.params.push(&type_of_2.base);
             try type_of_2.params.push(node_to_cast);
-            type_of_2.rparen_token = try appendToken(c, .LParen, ")");
-            type_id_2.rparen_token = try appendToken(c, .LParen, ")");
+            type_of_2.rparen_token = try appendToken(c, .RParen, ")");
+            type_id_2.rparen_token = try appendToken(c, .RParen, ")");
 
             const cmp_2 = try c.a().create(ast.Node.InfixOp);
             cmp_2.* = .{
@@ -4422,12 +4432,12 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
             };
             if_2.condition = &cmp_2.base;
             else_1.body = &if_2.base;
-            _ = try appendToken(c, .LParen, ")");
+            _ = try appendToken(c, .RParen, ")");
 
             const int_to_ptr = try transCreateNodeBuiltinFnCall(c, "@intToPtr");
             try int_to_ptr.params.push(inner_node);
             try int_to_ptr.params.push(node_to_cast);
-            int_to_ptr.rparen_token = try appendToken(c, .LParen, ")");
+            int_to_ptr.rparen_token = try appendToken(c, .RParen, ")");
             if_2.body = &int_to_ptr.base;
 
             const else_2 = try transCreateNodeElse(c);
@@ -4436,7 +4446,7 @@ fn parseCPrimaryExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: ZigC
             const as = try transCreateNodeBuiltinFnCall(c, "@as");
             try as.params.push(inner_node);
             try as.params.push(node_to_cast);
-            as.rparen_token = try appendToken(c, .LParen, ")");
+            as.rparen_token = try appendToken(c, .RParen, ")");
             else_2.body = &as.base;
 
             return &if_1.base;
@@ -4638,7 +4648,11 @@ fn parseCPrefixOpExpr(c: *Context, it: *ctok.TokenList.Iterator, source_loc: Zig
 
 fn tokenSlice(c: *Context, token: ast.TokenIndex) []u8 {
     const tok = c.tree.tokens.at(token);
-    return c.source_buffer.toSlice()[tok.start..tok.end];
+    const slice = c.source_buffer.toSlice()[tok.start..tok.end];
+    return if (mem.startsWith(u8, slice, "@\""))
+        slice[2 .. slice.len - 1]
+    else
+        slice;
 }
 
 fn getContainer(c: *Context, node: *ast.Node) ?*ast.Node {
test/translate_c.zig
@@ -1098,13 +1098,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
     });
 
     cases.add("comma operator",
-        \\int foo(char c) {
+        \\int foo() {
         \\    2, 4;
         \\    return 2, 4, 6;
         \\}
     , &[_][]const u8{
-        \\pub export fn foo(_arg_c: u8) c_int {
-        \\    var c = _arg_c;
+        \\pub export fn foo() c_int {
         \\    _ = 2;
         \\    _ = 4;
         \\    _ = 2;
@@ -1113,15 +1112,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\}
     });
 
-    cases.add("wors-case assign",
-        \\int foo(char c) {
+    cases.add("worst-case assign",
+        \\int foo() {
         \\    int a;
         \\    int b;
         \\    a = b = 2;
         \\}
     , &[_][]const u8{
-        \\pub export fn foo(_arg_c: u8) c_int {
-        \\    var c = _arg_c;
+        \\pub export fn foo() c_int {
         \\    var a: c_int = undefined;
         \\    var b: c_int = undefined;
         \\    a = blk: {
@@ -1133,7 +1131,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
     });
 
     cases.add("if statements",
-        \\int foo(char c) {
+        \\int foo() {
         \\    if (2) {
         \\        int a = 2;
         \\    }
@@ -1142,8 +1140,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    }
         \\}
     , &[_][]const u8{
-        \\pub export fn foo(_arg_c: u8) c_int {
-        \\    var c = _arg_c;
+        \\pub export fn foo() c_int {
         \\    if (2 != 0) {
         \\        var a: c_int = 2;
         \\    }
@@ -1266,15 +1263,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    }
         \\}
     , &[_][]const u8{
-        \\pub export fn switch_fn(_arg_i: c_int) c_int {
-        \\    var i = _arg_i;
+        \\pub export fn switch_fn(_arg_i_1: c_int) c_int {
+        \\    var i_1 = _arg_i_1;
         \\    var res: c_int = 0;
         \\    __switch: {
         \\        __case_2: {
         \\            __default: {
         \\                __case_1: {
         \\                    __case_0: {
-        \\                        switch (i) {
+        \\                        switch (i_1) {
         \\                            0 => break :__case_0,
         \\                            1...3 => break :__case_1,
         \\                            else => break :__default,
@@ -1285,7 +1282,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\                }
         \\                res = 2;
         \\            }
-        \\            res = (3 * i);
+        \\            res = (3 * i_1);
         \\            break :__switch;
         \\        }
         \\        res = 5;
@@ -1328,11 +1325,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    a = tmp;
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int) c_int {
-        \\    var a = _arg_a;
+        \\pub export fn max(_arg_a_1: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
         \\    var tmp: c_int = undefined;
-        \\    tmp = a;
-        \\    a = tmp;
+        \\    tmp = a_1;
+        \\    a_1 = tmp;
         \\}
     });
 
@@ -1342,14 +1339,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    c = b = a;
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int) void {
-        \\    var a = _arg_a;
+        \\pub export fn max(_arg_a_1: c_int) void {
+        \\    var a_1 = _arg_a_1;
         \\    var b: c_int = undefined;
         \\    var c: c_int = undefined;
         \\    c = blk: {
-        \\        const _tmp_1 = a;
-        \\        b = _tmp_1;
-        \\        break :blk _tmp_1;
+        \\        const _tmp_2 = a_1;
+        \\        b = _tmp_2;
+        \\        break :blk _tmp_2;
         \\    };
         \\}
     });
@@ -1373,9 +1370,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return (int)a;
         \\}
     , &[_][]const u8{
-        \\pub export fn float_to_int(_arg_a: f32) c_int {
-        \\    var a = _arg_a;
-        \\    return @floatToInt(c_int, a);
+        \\pub export fn float_to_int(_arg_a_1: f32) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    return @floatToInt(c_int, a_1);
         \\}
     });
 
@@ -1469,23 +1466,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    C,
         \\};
         \\pub const SomeTypedef = c_int;
-        \\pub export fn and_or_non_bool(_arg_a: c_int, _arg_b: f32, _arg_c: ?*c_void) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    var c = _arg_c;
+        \\pub export fn and_or_non_bool(_arg_a_1: c_int, _arg_b_2: f32, _arg_c_3: ?*c_void) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    var c_3 = _arg_c_3;
         \\    var d: enum_Foo = @intToEnum(enum_Foo, FooA);
-        \\    var e: c_int = @boolToInt(((a != 0) and (b != 0)));
-        \\    var f: c_int = @boolToInt(((b != 0) and (c != null)));
-        \\    var g: c_int = @boolToInt(((a != 0) and (c != null)));
-        \\    var h: c_int = @boolToInt(((a != 0) or (b != 0)));
-        \\    var i: c_int = @boolToInt(((b != 0) or (c != null)));
-        \\    var j: c_int = @boolToInt(((a != 0) or (c != null)));
-        \\    var k: c_int = @boolToInt(((a != 0) or (@enumToInt(d) != 0)));
-        \\    var l: c_int = @boolToInt(((@enumToInt(d) != 0) and (b != 0)));
-        \\    var m: c_int = @boolToInt(((c != null) or (@enumToInt(d) != 0)));
+        \\    var e: c_int = @boolToInt(((a_1 != 0) and (b_2 != 0)));
+        \\    var f: c_int = @boolToInt(((b_2 != 0) and (c_3 != null)));
+        \\    var g: c_int = @boolToInt(((a_1 != 0) and (c_3 != null)));
+        \\    var h: c_int = @boolToInt(((a_1 != 0) or (b_2 != 0)));
+        \\    var i: c_int = @boolToInt(((b_2 != 0) or (c_3 != null)));
+        \\    var j: c_int = @boolToInt(((a_1 != 0) or (c_3 != null)));
+        \\    var k: c_int = @boolToInt(((a_1 != 0) or (@enumToInt(d) != 0)));
+        \\    var l: c_int = @boolToInt(((@enumToInt(d) != 0) and (b_2 != 0)));
+        \\    var m: c_int = @boolToInt(((c_3 != null) or (@enumToInt(d) != 0)));
         \\    var td: SomeTypedef = 44;
-        \\    var o: c_int = @boolToInt(((td != 0) or (b != 0)));
-        \\    var p: c_int = @boolToInt(((c != null) and (td != 0)));
+        \\    var o: c_int = @boolToInt(((td != 0) or (b_2 != 0)));
+        \\    var p: c_int = @boolToInt(((c_3 != null) and (td != 0)));
         \\    return ((((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p);
         \\}
     ,
@@ -1523,10 +1520,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return (a & b) ^ (a | b);
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    return ((a & b) ^ (a | b));
+        \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    return ((a_1 & b_2) ^ (a_1 | b_2));
         \\}
     });
 
@@ -1542,13 +1539,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return i;
         \\}
     , &[_][]const u8{
-        \\pub export fn test_comparisons(_arg_a: c_int, _arg_b: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    var c: c_int = @boolToInt((a < b));
-        \\    var d: c_int = @boolToInt((a > b));
-        \\    var e: c_int = @boolToInt((a <= b));
-        \\    var f: c_int = @boolToInt((a >= b));
+        \\pub export fn test_comparisons(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    var c: c_int = @boolToInt((a_1 < b_2));
+        \\    var d: c_int = @boolToInt((a_1 > b_2));
+        \\    var e: c_int = @boolToInt((a_1 <= b_2));
+        \\    var f: c_int = @boolToInt((a_1 >= b_2));
         \\    var g: c_int = @boolToInt((c < d));
         \\    var h: c_int = @boolToInt((e < f));
         \\    var i: c_int = @boolToInt((g < h));
@@ -1565,12 +1562,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return a;
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    if (a == b) return a;
-        \\    if (a != b) return b;
-        \\    return a;
+        \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    if (a_1 == b_2) return a_1;
+        \\    if (a_1 != b_2) return b_2;
+        \\    return a_1;
         \\}
     });
 
@@ -1643,9 +1640,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\}
     , &[_][]const u8{
         \\pub export var array: [100]c_int = .{0} ** 100;
-        \\pub export fn foo(_arg_index: c_int) c_int {
-        \\    var index = _arg_index;
-        \\    return array[index];
+        \\pub export fn foo(_arg_index_1: c_int) c_int {
+        \\    var index_1 = _arg_index_1;
+        \\    return array[index_1];
         \\}
     ,
         \\pub const ACCESS = array[2];
@@ -1668,12 +1665,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return a;
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    if ((a < b) or (a == b)) return b;
-        \\    if ((a >= b) and (a == b)) return a;
-        \\    return a;
+        \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    if ((a_1 < b_2) or (a_1 == b_2)) return b_2;
+        \\    if ((a_1 >= b_2) and (a_1 == b_2)) return a_1;
+        \\    return a_1;
         \\}
     });
 
@@ -1690,12 +1687,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    if (a < b) ; else ;
         \\}
     , &[_][]const u8{
-        \\pub export fn max(_arg_a: c_int, _arg_b: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    if (a < b) return b;
-        \\    if (a < b) return b else return a;
-        \\    if (a < b) {} else {}
+        \\pub export fn max(_arg_a_1: c_int, _arg_b_2: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    if (a_1 < b_2) return b_2;
+        \\    if (a_1 < b_2) return b_2 else return a_1;
+        \\    if (a_1 < b_2) {} else {}
         \\}
     });
 
@@ -1714,15 +1711,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    B,
         \\    C,
         \\};
-        \\pub export fn if_none_bool(_arg_a: c_int, _arg_b: f32, _arg_c: ?*c_void, _arg_d: enum_SomeEnum) c_int {
-        \\    var a = _arg_a;
-        \\    var b = _arg_b;
-        \\    var c = _arg_c;
-        \\    var d = _arg_d;
-        \\    if (a != 0) return 0;
-        \\    if (b != 0) return 1;
-        \\    if (c != null) return 2;
-        \\    if (d != 0) return 3;
+        \\pub export fn if_none_bool(_arg_a_1: c_int, _arg_b_2: f32, _arg_c_3: ?*c_void, _arg_d_4: enum_SomeEnum) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    var b_2 = _arg_b_2;
+        \\    var c_3 = _arg_c_3;
+        \\    var d_4 = _arg_d_4;
+        \\    if (a_1 != 0) return 0;
+        \\    if (b_2 != 0) return 1;
+        \\    if (c_3 != null) return 2;
+        \\    if (d_4 != 0) return 3;
         \\    return 4;
         \\}
     });
@@ -1744,9 +1741,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return a < 0 ? -a : a;
         \\}
     , &[_][]const u8{
-        \\pub export fn abs(_arg_a: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    return if (a < 0) -a else a;
+        \\pub export fn abs(_arg_a_1: c_int) c_int {
+        \\    var a_1 = _arg_a_1;
+        \\    return if (a_1 < 0) -a_1 else a_1;
         \\}
     });
 
@@ -1760,15 +1757,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return a;
         \\}
     , &[_][]const u8{
-        \\pub export fn foo1(_arg_a: c_uint) c_uint {
-        \\    var a = _arg_a;
-        \\    a +%= 1;
-        \\    return a;
+        \\pub export fn foo1(_arg_a_1: c_uint) c_uint {
+        \\    var a_1 = _arg_a_1;
+        \\    a_1 +%= 1;
+        \\    return a_1;
         \\}
-        \\pub export fn foo2(_arg_a: c_int) c_int {
-        \\    var a = _arg_a;
-        \\    a += 1;
-        \\    return a;
+        \\pub export fn foo2(_arg_a_2: c_int) c_int {
+        \\    var a_2 = _arg_a_2;
+        \\    a_2 += 1;
+        \\    return a_2;
         \\}
     });
 
@@ -1855,11 +1852,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return i;
         \\}
     , &[_][]const u8{
-        \\pub export fn log2(_arg_a: c_uint) c_int {
-        \\    var a = _arg_a;
+        \\pub export fn log2(_arg_a_1: c_uint) c_int {
+        \\    var a_1 = _arg_a_1;
         \\    var i: c_int = 0;
-        \\    while (a > @intCast(c_uint, 0)) {
-        \\        a >>= @as(@import("std").math.Log2Int(c_int), 1);
+        \\    while (a_1 > @intCast(c_uint, 0)) {
+        \\        a_1 >>= @as(@import("std").math.Log2Int(c_int), 1);
         \\    }
         \\    return i;
         \\}
@@ -1875,11 +1872,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\    return i;
         \\}
     , &[_][]const u8{
-        \\pub export fn log2(_arg_a: u32) c_int {
-        \\    var a = _arg_a;
+        \\pub export fn log2(_arg_a_1: u32) c_int {
+        \\    var a_1 = _arg_a_1;
         \\    var i: c_int = 0;
-        \\    while (a > @intCast(c_uint, 0)) {
-        \\        a >>= @as(@import("std").math.Log2Int(c_int), 1);
+        \\    while (a_1 > @intCast(c_uint, 0)) {
+        \\        a_1 >>= @as(@import("std").math.Log2Int(c_int), 1);
         \\    }
         \\    return i;
         \\}
@@ -2059,7 +2056,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\void fn_bool(bool x);
         \\void fn_ptr(void *x);
         \\
-        \\void call(int q) {
+        \\void call() {
         \\    fn_int(3.0f);
         \\    fn_int(3.0);
         \\    fn_int(3.0L);
@@ -2084,8 +2081,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\pub extern fn fn_char(x: u8) void;
         \\pub extern fn fn_bool(x: bool) void;
         \\pub extern fn fn_ptr(x: ?*c_void) void;
-        \\pub export fn call(_arg_q: c_int) void {
-        \\    var q = _arg_q;
+        \\pub export fn call() void {
         \\    fn_int(@floatToInt(c_int, 3));
         \\    fn_int(@floatToInt(c_int, 3));
         \\    fn_int(@floatToInt(c_int, 3));
@@ -2113,10 +2109,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
         \\}
     , &[_][]const u8{
         \\pub fn bar() void {}
-        \\pub export fn foo(_arg_baz: ?extern fn () [*c]c_int) void {
-        \\    var baz = _arg_baz;
+        \\pub export fn foo(_arg_baz_1: ?extern fn () [*c]c_int) void {
+        \\    var baz_1 = _arg_baz_1;
         \\    bar();
-        \\    _ = baz.?();
+        \\    _ = baz_1.?();
         \\}
     });