diff options
| author | Vexu <git@vexu.eu> | 2019-12-29 11:45:39 +0200 |
|---|---|---|
| committer | Vexu <git@vexu.eu> | 2019-12-29 14:01:59 +0200 |
| commit | f5e7d2d00c0bfdbdf95c57b8b5528f945fcf00c2 (patch) | |
| tree | 3993982b1875e38b132173aa536fe13814333121 | |
| parent | 59cc7072e22d03ba40456a58eaf3b37b239b420e (diff) | |
| download | zig-f5e7d2d00c0bfdbdf95c57b8b5528f945fcf00c2.tar.gz zig-f5e7d2d00c0bfdbdf95c57b8b5528f945fcf00c2.zip | |
translate-c fix bugs
Thanks @daurnimator
| -rw-r--r-- | lib/std/zig/render.zig | 2 | ||||
| -rw-r--r-- | src-self-hosted/translate_c.zig | 80 | ||||
| -rw-r--r-- | test/translate_c.zig | 210 |
3 files changed, 151 insertions, 141 deletions
diff --git a/lib/std/zig/render.zig b/lib/std/zig/render.zig index d65d9bfc57..6e1ee4a601 100644 --- a/lib/std/zig/render.zig +++ b/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); diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index eb3be0bfa0..34c90a34d6 100644 --- a/src-self-hosted/translate_c.zig +++ b/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 { diff --git a/test/translate_c.zig b/test/translate_c.zig index f2404753b2..625ecb53a0 100644 --- a/test/translate_c.zig +++ b/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.?(); \\} }); |
