| ... | ... | @@ -12,9 +12,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 12 | 12 | , &[_][]const u8{ |
| 13 | 13 | \\pub export fn foo(arg_x: c_ulong) c_ulong { |
| 14 | 14 | \\ var x = arg_x; |
| 15 | \\ _ = x; |
| 15 | 16 | \\ const union_unnamed_1 = extern union { |
| 16 | 17 | \\ _x: c_ulong, |
| 17 | 18 | \\ }; |
| 19 | \\ _ = union_unnamed_1; |
| 18 | 20 | \\ return (union_unnamed_1{ |
| 19 | 21 | \\ ._x = x, |
| 20 | 22 | \\ })._x; |
| ... | ... | @@ -54,8 +56,10 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 54 | 56 | \\pub export fn foo() void { |
| 55 | 57 | \\ while (true) if (true) { |
| 56 | 58 | \\ var a: c_int = 1; |
| 59 | \\ _ = a; |
| 57 | 60 | \\ } else { |
| 58 | 61 | \\ var b: c_int = 2; |
| 62 | \\ _ = b; |
| 59 | 63 | \\ }; |
| 60 | 64 | \\ if (true) if (true) {}; |
| 61 | 65 | \\} |
| ... | ... | @@ -71,6 +75,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 71 | 75 | \\pub extern fn bar(...) c_int; |
| 72 | 76 | \\pub export fn foo() void { |
| 73 | 77 | \\ var a: c_int = undefined; |
| 78 | \\ _ = a; |
| 74 | 79 | \\ if (a != 0) a = 2 else _ = bar(); |
| 75 | 80 | \\} |
| 76 | 81 | }); |
| ... | ... | @@ -123,22 +128,26 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 123 | 128 | \\ B: c_int, |
| 124 | 129 | \\ C: c_int, |
| 125 | 130 | \\ }; |
| 131 | \\ _ = struct_Foo; |
| 126 | 132 | \\ var a: struct_Foo = struct_Foo{ |
| 127 | 133 | \\ .A = @as(c_int, 0), |
| 128 | 134 | \\ .B = 0, |
| 129 | 135 | \\ .C = 0, |
| 130 | 136 | \\ }; |
| 137 | \\ _ = a; |
| 131 | 138 | \\ { |
| 132 | 139 | \\ const struct_Foo_1 = extern struct { |
| 133 | 140 | \\ A: c_int, |
| 134 | 141 | \\ B: c_int, |
| 135 | 142 | \\ C: c_int, |
| 136 | 143 | \\ }; |
| 144 | \\ _ = struct_Foo_1; |
| 137 | 145 | \\ var a_2: struct_Foo_1 = struct_Foo_1{ |
| 138 | 146 | \\ .A = @as(c_int, 0), |
| 139 | 147 | \\ .B = 0, |
| 140 | 148 | \\ .C = 0, |
| 141 | 149 | \\ }; |
| 150 | \\ _ = a_2; |
| 142 | 151 | \\ } |
| 143 | 152 | \\} |
| 144 | 153 | }); |
| ... | ... | @@ -167,20 +176,26 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 167 | 176 | \\ B: c_int, |
| 168 | 177 | \\ C: c_int, |
| 169 | 178 | \\ }; |
| 179 | \\ _ = union_unnamed_1; |
| 170 | 180 | \\ const Foo = union_unnamed_1; |
| 181 | \\ _ = Foo; |
| 171 | 182 | \\ var a: Foo = Foo{ |
| 172 | 183 | \\ .A = @as(c_int, 0), |
| 173 | 184 | \\ }; |
| 185 | \\ _ = a; |
| 174 | 186 | \\ { |
| 175 | 187 | \\ const union_unnamed_2 = extern union { |
| 176 | 188 | \\ A: c_int, |
| 177 | 189 | \\ B: c_int, |
| 178 | 190 | \\ C: c_int, |
| 179 | 191 | \\ }; |
| 192 | \\ _ = union_unnamed_2; |
| 180 | 193 | \\ const Foo_1 = union_unnamed_2; |
| 194 | \\ _ = Foo_1; |
| 181 | 195 | \\ var a_2: Foo_1 = Foo_1{ |
| 182 | 196 | \\ .A = @as(c_int, 0), |
| 183 | 197 | \\ }; |
| 198 | \\ _ = a_2; |
| 184 | 199 | \\ } |
| 185 | 200 | \\} |
| 186 | 201 | }); |
| ... | ... | @@ -190,6 +205,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 190 | 205 | \\#define MEM_PHYSICAL_TO_K0(x) (void*)((uint32_t)(x) + SYS_BASE_CACHED) |
| 191 | 206 | , &[_][]const u8{ |
| 192 | 207 | \\pub inline fn MEM_PHYSICAL_TO_K0(x: anytype) ?*c_void { |
| 208 | \\ _ = x; |
| 193 | 209 | \\ return @import("std").zig.c_translation.cast(?*c_void, @import("std").zig.c_translation.cast(u32, x) + SYS_BASE_CACHED); |
| 194 | 210 | \\} |
| 195 | 211 | }); |
| ... | ... | @@ -231,6 +247,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 231 | 247 | \\pub const VALUE = ((((@as(c_int, 1) + (@as(c_int, 2) * @as(c_int, 3))) + (@as(c_int, 4) * @as(c_int, 5))) + @as(c_int, 6)) << @as(c_int, 7)) | @boolToInt(@as(c_int, 8) == @as(c_int, 9)); |
| 232 | 248 | , |
| 233 | 249 | \\pub inline fn _AL_READ3BYTES(p: anytype) @TypeOf((@import("std").zig.c_translation.cast([*c]u8, p).* | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 1)).* << @as(c_int, 8))) | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 2)).* << @as(c_int, 16))) { |
| 250 | \\ _ = p; |
| 234 | 251 | \\ return (@import("std").zig.c_translation.cast([*c]u8, p).* | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 1)).* << @as(c_int, 8))) | ((@import("std").zig.c_translation.cast([*c]u8, p) + @as(c_int, 2)).* << @as(c_int, 16)); |
| 235 | 252 | \\} |
| 236 | 253 | }); |
| ... | ... | @@ -246,6 +263,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 246 | 263 | \\ const bar_1 = struct { |
| 247 | 264 | \\ threadlocal var static: c_int = 2; |
| 248 | 265 | \\ }; |
| 266 | \\ _ = bar_1; |
| 249 | 267 | \\ return 0; |
| 250 | 268 | \\} |
| 251 | 269 | }); |
| ... | ... | @@ -264,6 +282,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 264 | 282 | \\} |
| 265 | 283 | \\pub export fn bar() c_int { |
| 266 | 284 | \\ var a: c_int = 2; |
| 285 | \\ _ = a; |
| 267 | 286 | \\ return 0; |
| 268 | 287 | \\} |
| 269 | 288 | \\pub export fn baz() c_int { |
| ... | ... | @@ -278,6 +297,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 278 | 297 | , &[_][]const u8{ |
| 279 | 298 | \\pub export fn main() void { |
| 280 | 299 | \\ var a: c_int = @bitCast(c_int, @truncate(c_uint, @alignOf(c_int))); |
| 300 | \\ _ = a; |
| 281 | 301 | \\} |
| 282 | 302 | }); |
| 283 | 303 | |
| ... | ... | @@ -308,6 +328,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 308 | 328 | \\pub const Color = struct_Color; |
| 309 | 329 | , |
| 310 | 330 | \\pub inline fn CLITERAL(type_1: anytype) @TypeOf(type_1) { |
| 331 | \\ _ = type_1; |
| 311 | 332 | \\ return type_1; |
| 312 | 333 | \\} |
| 313 | 334 | , |
| ... | ... | @@ -325,6 +346,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 325 | 346 | \\}; |
| 326 | 347 | , |
| 327 | 348 | \\pub inline fn A(_x: anytype) MyCStruct { |
| 349 | \\ _ = _x; |
| 328 | 350 | \\ return @import("std").mem.zeroInit(MyCStruct, .{ |
| 329 | 351 | \\ .x = _x, |
| 330 | 352 | \\ }); |
| ... | ... | @@ -355,6 +377,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 355 | 377 | \\#define __ferror_unlocked_body(_fp) (((_fp)->_flags & _IO_ERR_SEEN) != 0) |
| 356 | 378 | , &[_][]const u8{ |
| 357 | 379 | \\pub inline fn __ferror_unlocked_body(_fp: anytype) @TypeOf((_fp.*._flags & _IO_ERR_SEEN) != @as(c_int, 0)) { |
| 380 | \\ _ = _fp; |
| 358 | 381 | \\ return (_fp.*._flags & _IO_ERR_SEEN) != @as(c_int, 0); |
| 359 | 382 | \\} |
| 360 | 383 | }); |
| ... | ... | @@ -364,6 +387,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 364 | 387 | \\#define BAR 1 && 2 > 4 |
| 365 | 388 | , &[_][]const u8{ |
| 366 | 389 | \\pub inline fn FOO(x: anytype) @TypeOf(@boolToInt(x >= @as(c_int, 0)) + @boolToInt(x >= @as(c_int, 0))) { |
| 390 | \\ _ = x; |
| 367 | 391 | \\ return @boolToInt(x >= @as(c_int, 0)) + @boolToInt(x >= @as(c_int, 0)); |
| 368 | 392 | \\} |
| 369 | 393 | , |
| ... | ... | @@ -426,6 +450,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 426 | 450 | \\}; |
| 427 | 451 | , |
| 428 | 452 | \\pub inline fn bar(x: anytype) @TypeOf(baz(@as(c_int, 1), @as(c_int, 2))) { |
| 453 | \\ _ = x; |
| 429 | 454 | \\ return blk: { |
| 430 | 455 | \\ _ = &x; |
| 431 | 456 | \\ _ = @as(c_int, 3); |
| ... | ... | @@ -555,6 +580,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 555 | 580 | \\}; |
| 556 | 581 | \\pub export fn foo(arg_x: [*c]outer) void { |
| 557 | 582 | \\ var x = arg_x; |
| 583 | \\ _ = x; |
| 558 | 584 | \\ x.*.unnamed_0.unnamed_0.y = @bitCast(c_int, @as(c_uint, x.*.unnamed_0.x)); |
| 559 | 585 | \\} |
| 560 | 586 | }); |
| ... | ... | @@ -641,7 +667,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 641 | 667 | \\pub const struct_opaque_2 = opaque {}; |
| 642 | 668 | \\pub export fn function(arg_opaque_1: ?*struct_opaque) void { |
| 643 | 669 | \\ var opaque_1 = arg_opaque_1; |
| 670 | \\ _ = opaque_1; |
| 644 | 671 | \\ var cast: ?*struct_opaque_2 = @ptrCast(?*struct_opaque_2, opaque_1); |
| 672 | \\ _ = cast; |
| 645 | 673 | \\} |
| 646 | 674 | }); |
| 647 | 675 | |
| ... | ... | @@ -673,6 +701,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 673 | 701 | \\pub export fn my_fn() align(128) void {} |
| 674 | 702 | \\pub export fn other_fn() void { |
| 675 | 703 | \\ var ARR: [16]u8 align(16) = undefined; |
| 704 | \\ _ = ARR; |
| 676 | 705 | \\} |
| 677 | 706 | }); |
| 678 | 707 | |
| ... | ... | @@ -708,11 +737,17 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 708 | 737 | , &[_][]const u8{ |
| 709 | 738 | \\pub export fn foo() void { |
| 710 | 739 | \\ var a: c_int = undefined; |
| 740 | \\ _ = a; |
| 711 | 741 | \\ var b: u8 = 123; |
| 742 | \\ _ = b; |
| 712 | 743 | \\ const c: c_int = undefined; |
| 744 | \\ _ = c; |
| 713 | 745 | \\ const d: c_uint = @bitCast(c_uint, @as(c_int, 440)); |
| 746 | \\ _ = d; |
| 714 | 747 | \\ var e: c_int = 10; |
| 748 | \\ _ = e; |
| 715 | 749 | \\ var f: c_uint = 10; |
| 750 | \\ _ = f; |
| 716 | 751 | \\} |
| 717 | 752 | }); |
| 718 | 753 | |
| ... | ... | @@ -728,6 +763,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 728 | 763 | , &[_][]const u8{ |
| 729 | 764 | \\pub export fn foo() void { |
| 730 | 765 | \\ var a: c_int = undefined; |
| 766 | \\ _ = a; |
| 731 | 767 | \\ _ = @as(c_int, 1); |
| 732 | 768 | \\ _ = "hey"; |
| 733 | 769 | \\ _ = @as(c_int, 1) + @as(c_int, 1); |
| ... | ... | @@ -771,6 +807,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 771 | 807 | \\ const v2 = struct { |
| 772 | 808 | \\ const static: [5:0]u8 = "2.2.2".*; |
| 773 | 809 | \\ }; |
| 810 | \\ _ = v2; |
| 774 | 811 | \\} |
| 775 | 812 | }); |
| 776 | 813 | |
| ... | ... | @@ -812,7 +849,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 812 | 849 | \\pub extern fn foo() void; |
| 813 | 850 | \\pub export fn bar() void { |
| 814 | 851 | \\ var func_ptr: ?*c_void = @ptrCast(?*c_void, foo); |
| 852 | \\ _ = func_ptr; |
| 815 | 853 | \\ var typed_func_ptr: ?fn () callconv(.C) void = @intToPtr(?fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr))); |
| 854 | \\ _ = typed_func_ptr; |
| 816 | 855 | \\} |
| 817 | 856 | }); |
| 818 | 857 | |
| ... | ... | @@ -842,8 +881,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 842 | 881 | , &[_][]const u8{ |
| 843 | 882 | \\pub export fn s() c_int { |
| 844 | 883 | \\ var a: c_int = undefined; |
| 884 | \\ _ = a; |
| 845 | 885 | \\ var b: c_int = undefined; |
| 886 | \\ _ = b; |
| 846 | 887 | \\ var c: c_int = undefined; |
| 888 | \\ _ = c; |
| 847 | 889 | \\ c = a + b; |
| 848 | 890 | \\ c = a - b; |
| 849 | 891 | \\ c = a * b; |
| ... | ... | @@ -853,8 +895,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 853 | 895 | \\} |
| 854 | 896 | \\pub export fn u() c_uint { |
| 855 | 897 | \\ var a: c_uint = undefined; |
| 898 | \\ _ = a; |
| 856 | 899 | \\ var b: c_uint = undefined; |
| 900 | \\ _ = b; |
| 857 | 901 | \\ var c: c_uint = undefined; |
| 902 | \\ _ = c; |
| 858 | 903 | \\ c = a +% b; |
| 859 | 904 | \\ c = a -% b; |
| 860 | 905 | \\ c = a *% b; |
| ... | ... | @@ -1218,6 +1263,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1218 | 1263 | \\pub export fn foo() void { |
| 1219 | 1264 | \\ var a: c_int = undefined; |
| 1220 | 1265 | \\ _ = a; |
| 1266 | \\ _ = a; |
| 1221 | 1267 | \\} |
| 1222 | 1268 | }); |
| 1223 | 1269 | |
| ... | ... | @@ -1229,6 +1275,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1229 | 1275 | , &[_][]const u8{ |
| 1230 | 1276 | \\pub export fn foo() ?*c_void { |
| 1231 | 1277 | \\ var x: [*c]c_ushort = undefined; |
| 1278 | \\ _ = x; |
| 1232 | 1279 | \\ return @ptrCast(?*c_void, x); |
| 1233 | 1280 | \\} |
| 1234 | 1281 | }); |
| ... | ... | @@ -1285,6 +1332,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1285 | 1332 | \\pub export fn foo() void { |
| 1286 | 1333 | \\ { |
| 1287 | 1334 | \\ var i: c_int = 0; |
| 1335 | \\ _ = i; |
| 1288 | 1336 | \\ while (i != 0) : (i += 1) {} |
| 1289 | 1337 | \\ } |
| 1290 | 1338 | \\} |
| ... | ... | @@ -1308,6 +1356,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1308 | 1356 | , &[_][]const u8{ |
| 1309 | 1357 | \\pub export fn foo() void { |
| 1310 | 1358 | \\ var i: c_int = undefined; |
| 1359 | \\ _ = i; |
| 1311 | 1360 | \\ { |
| 1312 | 1361 | \\ i = 3; |
| 1313 | 1362 | \\ while (i != 0) : (i -= 1) {} |
| ... | ... | @@ -1351,6 +1400,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1351 | 1400 | , &[_][]const u8{ |
| 1352 | 1401 | \\pub export fn ptrcast() [*c]f32 { |
| 1353 | 1402 | \\ var a: [*c]c_int = undefined; |
| 1403 | \\ _ = a; |
| 1354 | 1404 | \\ return @ptrCast([*c]f32, @alignCast(@import("std").meta.alignment(f32), a)); |
| 1355 | 1405 | \\} |
| 1356 | 1406 | }); |
| ... | ... | @@ -1374,17 +1424,26 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1374 | 1424 | , &[_][]const u8{ |
| 1375 | 1425 | \\pub export fn test_ptr_cast() void { |
| 1376 | 1426 | \\ var p: ?*c_void = undefined; |
| 1427 | \\ _ = p; |
| 1377 | 1428 | \\ { |
| 1378 | 1429 | \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p)); |
| 1430 | \\ _ = to_char; |
| 1379 | 1431 | \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p)); |
| 1432 | \\ _ = to_short; |
| 1380 | 1433 | \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p)); |
| 1434 | \\ _ = to_int; |
| 1381 | 1435 | \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p)); |
| 1436 | \\ _ = to_longlong; |
| 1382 | 1437 | \\ } |
| 1383 | 1438 | \\ { |
| 1384 | 1439 | \\ var to_char: [*c]u8 = @ptrCast([*c]u8, @alignCast(@import("std").meta.alignment(u8), p)); |
| 1440 | \\ _ = to_char; |
| 1385 | 1441 | \\ var to_short: [*c]c_short = @ptrCast([*c]c_short, @alignCast(@import("std").meta.alignment(c_short), p)); |
| 1442 | \\ _ = to_short; |
| 1386 | 1443 | \\ var to_int: [*c]c_int = @ptrCast([*c]c_int, @alignCast(@import("std").meta.alignment(c_int), p)); |
| 1444 | \\ _ = to_int; |
| 1387 | 1445 | \\ var to_longlong: [*c]c_longlong = @ptrCast([*c]c_longlong, @alignCast(@import("std").meta.alignment(c_longlong), p)); |
| 1446 | \\ _ = to_longlong; |
| 1388 | 1447 | \\ } |
| 1389 | 1448 | \\} |
| 1390 | 1449 | }); |
| ... | ... | @@ -1402,8 +1461,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1402 | 1461 | , &[_][]const u8{ |
| 1403 | 1462 | \\pub export fn while_none_bool() c_int { |
| 1404 | 1463 | \\ var a: c_int = undefined; |
| 1464 | \\ _ = a; |
| 1405 | 1465 | \\ var b: f32 = undefined; |
| 1466 | \\ _ = b; |
| 1406 | 1467 | \\ var c: ?*c_void = undefined; |
| 1468 | \\ _ = c; |
| 1407 | 1469 | \\ while (a != 0) return 0; |
| 1408 | 1470 | \\ while (b != 0) return 1; |
| 1409 | 1471 | \\ while (c != null) return 2; |
| ... | ... | @@ -1424,8 +1486,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1424 | 1486 | , &[_][]const u8{ |
| 1425 | 1487 | \\pub export fn for_none_bool() c_int { |
| 1426 | 1488 | \\ var a: c_int = undefined; |
| 1489 | \\ _ = a; |
| 1427 | 1490 | \\ var b: f32 = undefined; |
| 1491 | \\ _ = b; |
| 1428 | 1492 | \\ var c: ?*c_void = undefined; |
| 1493 | \\ _ = c; |
| 1429 | 1494 | \\ while (a != 0) return 0; |
| 1430 | 1495 | \\ while (b != 0) return 1; |
| 1431 | 1496 | \\ while (c != null) return 2; |
| ... | ... | @@ -1462,6 +1527,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1462 | 1527 | , &[_][]const u8{ |
| 1463 | 1528 | \\pub export fn foo() void { |
| 1464 | 1529 | \\ var x: [*c]c_int = undefined; |
| 1530 | \\ _ = x; |
| 1465 | 1531 | \\ x.* = 1; |
| 1466 | 1532 | \\} |
| 1467 | 1533 | }); |
| ... | ... | @@ -1475,7 +1541,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1475 | 1541 | , &[_][]const u8{ |
| 1476 | 1542 | \\pub export fn foo() c_int { |
| 1477 | 1543 | \\ var x: c_int = 1234; |
| 1544 | \\ _ = x; |
| 1478 | 1545 | \\ var ptr: [*c]c_int = &x; |
| 1546 | \\ _ = ptr; |
| 1479 | 1547 | \\ return ptr.*; |
| 1480 | 1548 | \\} |
| 1481 | 1549 | }); |
| ... | ... | @@ -1488,6 +1556,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1488 | 1556 | , &[_][]const u8{ |
| 1489 | 1557 | \\pub export fn foo() c_int { |
| 1490 | 1558 | \\ var x: c_int = undefined; |
| 1559 | \\ _ = x; |
| 1491 | 1560 | \\ return ~x; |
| 1492 | 1561 | \\} |
| 1493 | 1562 | }); |
| ... | ... | @@ -1505,8 +1574,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1505 | 1574 | , &[_][]const u8{ |
| 1506 | 1575 | \\pub export fn foo() c_int { |
| 1507 | 1576 | \\ var a: c_int = undefined; |
| 1577 | \\ _ = a; |
| 1508 | 1578 | \\ var b: f32 = undefined; |
| 1579 | \\ _ = b; |
| 1509 | 1580 | \\ var c: ?*c_void = undefined; |
| 1581 | \\ _ = c; |
| 1510 | 1582 | \\ return @boolToInt(!(a == @as(c_int, 0))); |
| 1511 | 1583 | \\ return @boolToInt(!(a != 0)); |
| 1512 | 1584 | \\ return @boolToInt(!(b != 0)); |
| ... | ... | @@ -1628,9 +1700,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1628 | 1700 | \\ var arr: [10]u8 = [1]u8{ |
| 1629 | 1701 | \\ 1, |
| 1630 | 1702 | \\ } ++ [1]u8{0} ** 9; |
| 1703 | \\ _ = arr; |
| 1631 | 1704 | \\ var arr1: [10][*c]u8 = [1][*c]u8{ |
| 1632 | 1705 | \\ null, |
| 1633 | 1706 | \\ } ++ [1][*c]u8{null} ** 9; |
| 1707 | \\ _ = arr1; |
| 1634 | 1708 | \\} |
| 1635 | 1709 | }); |
| 1636 | 1710 | |
| ... | ... | @@ -1817,10 +1891,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1817 | 1891 | \\pub extern var c: c_int; |
| 1818 | 1892 | , |
| 1819 | 1893 | \\pub inline fn BASIC(c_1: anytype) @TypeOf(c_1 * @as(c_int, 2)) { |
| 1894 | \\ _ = c_1; |
| 1820 | 1895 | \\ return c_1 * @as(c_int, 2); |
| 1821 | 1896 | \\} |
| 1822 | 1897 | , |
| 1823 | 1898 | \\pub inline fn FOO(L: anytype, b: anytype) @TypeOf(L + b) { |
| 1899 | \\ _ = L; |
| 1900 | \\ _ = b; |
| 1824 | 1901 | \\ return L + b; |
| 1825 | 1902 | \\} |
| 1826 | 1903 | , |
| ... | ... | @@ -1872,13 +1949,18 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1872 | 1949 | \\pub var c: c_int = 4; |
| 1873 | 1950 | \\pub export fn foo(arg_c_1: u8) void { |
| 1874 | 1951 | \\ var c_1 = arg_c_1; |
| 1952 | \\ _ = c_1; |
| 1875 | 1953 | \\ var a_2: c_int = undefined; |
| 1954 | \\ _ = a_2; |
| 1876 | 1955 | \\ var b_3: u8 = 123; |
| 1956 | \\ _ = b_3; |
| 1877 | 1957 | \\ b_3 = @bitCast(u8, @truncate(i8, a_2)); |
| 1878 | 1958 | \\ { |
| 1879 | 1959 | \\ var d: c_int = 5; |
| 1960 | \\ _ = d; |
| 1880 | 1961 | \\ } |
| 1881 | 1962 | \\ var d: c_uint = @bitCast(c_uint, @as(c_int, 440)); |
| 1963 | \\ _ = d; |
| 1882 | 1964 | \\} |
| 1883 | 1965 | }); |
| 1884 | 1966 | |
| ... | ... | @@ -1912,7 +1994,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1912 | 1994 | , &[_][]const u8{ |
| 1913 | 1995 | \\pub export fn foo() void { |
| 1914 | 1996 | \\ var a: c_int = undefined; |
| 1997 | \\ _ = a; |
| 1915 | 1998 | \\ var b: c_int = undefined; |
| 1999 | \\ _ = b; |
| 1916 | 2000 | \\ a = blk: { |
| 1917 | 2001 | \\ const tmp = @as(c_int, 2); |
| 1918 | 2002 | \\ b = tmp; |
| ... | ... | @@ -1942,11 +2026,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1942 | 2026 | , &[_][]const u8{ |
| 1943 | 2027 | \\pub export fn foo() c_int { |
| 1944 | 2028 | \\ var a: c_int = 5; |
| 2029 | \\ _ = a; |
| 1945 | 2030 | \\ while (true) { |
| 1946 | 2031 | \\ a = 2; |
| 1947 | 2032 | \\ } |
| 1948 | 2033 | \\ while (true) { |
| 1949 | 2034 | \\ var a_1: c_int = 4; |
| 2035 | \\ _ = a_1; |
| 1950 | 2036 | \\ a_1 = 9; |
| 1951 | 2037 | \\ return blk: { |
| 1952 | 2038 | \\ _ = @as(c_int, 6); |
| ... | ... | @@ -1955,6 +2041,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1955 | 2041 | \\ } |
| 1956 | 2042 | \\ while (true) { |
| 1957 | 2043 | \\ var a_1: c_int = 2; |
| 2044 | \\ _ = a_1; |
| 1958 | 2045 | \\ a_1 = 12; |
| 1959 | 2046 | \\ } |
| 1960 | 2047 | \\ while (true) { |
| ... | ... | @@ -1976,9 +2063,12 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1976 | 2063 | \\pub export fn foo() void { |
| 1977 | 2064 | \\ { |
| 1978 | 2065 | \\ var i: c_int = 2; |
| 2066 | \\ _ = i; |
| 1979 | 2067 | \\ var b: c_int = 4; |
| 2068 | \\ _ = b; |
| 1980 | 2069 | \\ while ((i + @as(c_int, 2)) != 0) : (i = 2) { |
| 1981 | 2070 | \\ var a: c_int = 2; |
| 2071 | \\ _ = a; |
| 1982 | 2072 | \\ _ = blk: { |
| 1983 | 2073 | \\ _ = blk_1: { |
| 1984 | 2074 | \\ a = 6; |
| ... | ... | @@ -1989,6 +2079,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1989 | 2079 | \\ } |
| 1990 | 2080 | \\ } |
| 1991 | 2081 | \\ var i: u8 = 2; |
| 2082 | \\ _ = i; |
| 1992 | 2083 | \\} |
| 1993 | 2084 | }); |
| 1994 | 2085 | |
| ... | ... | @@ -2061,7 +2152,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2061 | 2152 | , &[_][]const u8{ |
| 2062 | 2153 | \\pub export fn switch_fn(arg_i: c_int) void { |
| 2063 | 2154 | \\ var i = arg_i; |
| 2155 | \\ _ = i; |
| 2064 | 2156 | \\ var res: c_int = 0; |
| 2157 | \\ _ = res; |
| 2065 | 2158 | \\ while (true) { |
| 2066 | 2159 | \\ switch (i) { |
| 2067 | 2160 | \\ @as(c_int, 0) => { |
| ... | ... | @@ -2150,7 +2243,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2150 | 2243 | , &[_][]const u8{ |
| 2151 | 2244 | \\pub export fn max(arg_a: c_int) void { |
| 2152 | 2245 | \\ var a = arg_a; |
| 2246 | \\ _ = a; |
| 2153 | 2247 | \\ var tmp: c_int = undefined; |
| 2248 | \\ _ = tmp; |
| 2154 | 2249 | \\ tmp = a; |
| 2155 | 2250 | \\ a = tmp; |
| 2156 | 2251 | \\} |
| ... | ... | @@ -2164,8 +2259,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2164 | 2259 | , &[_][]const u8{ |
| 2165 | 2260 | \\pub export fn max(arg_a: c_int) void { |
| 2166 | 2261 | \\ var a = arg_a; |
| 2262 | \\ _ = a; |
| 2167 | 2263 | \\ var b: c_int = undefined; |
| 2264 | \\ _ = b; |
| 2168 | 2265 | \\ var c: c_int = undefined; |
| 2266 | \\ _ = c; |
| 2169 | 2267 | \\ c = blk: { |
| 2170 | 2268 | \\ const tmp = a; |
| 2171 | 2269 | \\ b = tmp; |
| ... | ... | @@ -2194,6 +2292,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2194 | 2292 | , &[_][]const u8{ |
| 2195 | 2293 | \\pub export fn float_to_int(arg_a: f32) c_int { |
| 2196 | 2294 | \\ var a = arg_a; |
| 2295 | \\ _ = a; |
| 2197 | 2296 | \\ return @floatToInt(c_int, a); |
| 2198 | 2297 | \\} |
| 2199 | 2298 | }); |
| ... | ... | @@ -2217,16 +2316,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2217 | 2316 | , &[_][]const u8{ |
| 2218 | 2317 | \\pub export fn escapes() [*c]const u8 { |
| 2219 | 2318 | \\ var a: u8 = '\''; |
| 2319 | \\ _ = a; |
| 2220 | 2320 | \\ var b: u8 = '\\'; |
| 2321 | \\ _ = b; |
| 2221 | 2322 | \\ var c: u8 = '\x07'; |
| 2323 | \\ _ = c; |
| 2222 | 2324 | \\ var d: u8 = '\x08'; |
| 2325 | \\ _ = d; |
| 2223 | 2326 | \\ var e: u8 = '\x0c'; |
| 2327 | \\ _ = e; |
| 2224 | 2328 | \\ var f: u8 = '\n'; |
| 2329 | \\ _ = f; |
| 2225 | 2330 | \\ var g: u8 = '\r'; |
| 2331 | \\ _ = g; |
| 2226 | 2332 | \\ var h: u8 = '\t'; |
| 2333 | \\ _ = h; |
| 2227 | 2334 | \\ var i: u8 = '\x0b'; |
| 2335 | \\ _ = i; |
| 2228 | 2336 | \\ var j: u8 = '\x00'; |
| 2337 | \\ _ = j; |
| 2229 | 2338 | \\ var k: u8 = '"'; |
| 2339 | \\ _ = k; |
| 2230 | 2340 | \\ return "'\\\x07\x08\x0c\n\r\t\x0b\x00\""; |
| 2231 | 2341 | \\} |
| 2232 | 2342 | }); |
| ... | ... | @@ -2246,11 +2356,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2246 | 2356 | , &[_][]const u8{ |
| 2247 | 2357 | \\pub export fn foo() void { |
| 2248 | 2358 | \\ var a: c_int = 2; |
| 2359 | \\ _ = a; |
| 2249 | 2360 | \\ while (true) { |
| 2250 | 2361 | \\ a = a - @as(c_int, 1); |
| 2251 | 2362 | \\ if (!(a != 0)) break; |
| 2252 | 2363 | \\ } |
| 2253 | 2364 | \\ var b: c_int = 2; |
| 2365 | \\ _ = b; |
| 2254 | 2366 | \\ while (true) { |
| 2255 | 2367 | \\ b = b - @as(c_int, 1); |
| 2256 | 2368 | \\ if (!(b != 0)) break; |
| ... | ... | @@ -2291,21 +2403,37 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2291 | 2403 | \\pub const SomeTypedef = c_int; |
| 2292 | 2404 | \\pub export fn and_or_non_bool(arg_a: c_int, arg_b: f32, arg_c: ?*c_void) c_int { |
| 2293 | 2405 | \\ var a = arg_a; |
| 2406 | \\ _ = a; |
| 2294 | 2407 | \\ var b = arg_b; |
| 2408 | \\ _ = b; |
| 2295 | 2409 | \\ var c = arg_c; |
| 2410 | \\ _ = c; |
| 2296 | 2411 | \\ var d: enum_Foo = @bitCast(c_uint, FooA); |
| 2412 | \\ _ = d; |
| 2297 | 2413 | \\ var e: c_int = @boolToInt((a != 0) and (b != 0)); |
| 2414 | \\ _ = e; |
| 2298 | 2415 | \\ var f: c_int = @boolToInt((b != 0) and (c != null)); |
| 2416 | \\ _ = f; |
| 2299 | 2417 | \\ var g: c_int = @boolToInt((a != 0) and (c != null)); |
| 2418 | \\ _ = g; |
| 2300 | 2419 | \\ var h: c_int = @boolToInt((a != 0) or (b != 0)); |
| 2420 | \\ _ = h; |
| 2301 | 2421 | \\ var i: c_int = @boolToInt((b != 0) or (c != null)); |
| 2422 | \\ _ = i; |
| 2302 | 2423 | \\ var j: c_int = @boolToInt((a != 0) or (c != null)); |
| 2424 | \\ _ = j; |
| 2303 | 2425 | \\ var k: c_int = @boolToInt((a != 0) or (@bitCast(c_int, d) != 0)); |
| 2426 | \\ _ = k; |
| 2304 | 2427 | \\ var l: c_int = @boolToInt((@bitCast(c_int, d) != 0) and (b != 0)); |
| 2428 | \\ _ = l; |
| 2305 | 2429 | \\ var m: c_int = @boolToInt((c != null) or (d != 0)); |
| 2430 | \\ _ = m; |
| 2306 | 2431 | \\ var td: SomeTypedef = 44; |
| 2432 | \\ _ = td; |
| 2307 | 2433 | \\ var o: c_int = @boolToInt((td != 0) or (b != 0)); |
| 2434 | \\ _ = o; |
| 2308 | 2435 | \\ var p: c_int = @boolToInt((c != null) and (td != 0)); |
| 2436 | \\ _ = p; |
| 2309 | 2437 | \\ return (((((((((e + f) + g) + h) + i) + j) + k) + l) + m) + o) + p; |
| 2310 | 2438 | \\} |
| 2311 | 2439 | , |
| ... | ... | @@ -2345,7 +2473,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2345 | 2473 | , &[_][]const u8{ |
| 2346 | 2474 | \\pub export fn max(arg_a: c_int, arg_b: c_int) c_int { |
| 2347 | 2475 | \\ var a = arg_a; |
| 2476 | \\ _ = a; |
| 2348 | 2477 | \\ var b = arg_b; |
| 2478 | \\ _ = b; |
| 2349 | 2479 | \\ return (a & b) ^ (a | b); |
| 2350 | 2480 | \\} |
| 2351 | 2481 | }); |
| ... | ... | @@ -2364,14 +2494,23 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2364 | 2494 | , &[_][]const u8{ |
| 2365 | 2495 | \\pub export fn test_comparisons(arg_a: c_int, arg_b: c_int) c_int { |
| 2366 | 2496 | \\ var a = arg_a; |
| 2497 | \\ _ = a; |
| 2367 | 2498 | \\ var b = arg_b; |
| 2499 | \\ _ = b; |
| 2368 | 2500 | \\ var c: c_int = @boolToInt(a < b); |
| 2501 | \\ _ = c; |
| 2369 | 2502 | \\ var d: c_int = @boolToInt(a > b); |
| 2503 | \\ _ = d; |
| 2370 | 2504 | \\ var e: c_int = @boolToInt(a <= b); |
| 2505 | \\ _ = e; |
| 2371 | 2506 | \\ var f: c_int = @boolToInt(a >= b); |
| 2507 | \\ _ = f; |
| 2372 | 2508 | \\ var g: c_int = @boolToInt(c < d); |
| 2509 | \\ _ = g; |
| 2373 | 2510 | \\ var h: c_int = @boolToInt(e < f); |
| 2511 | \\ _ = h; |
| 2374 | 2512 | \\ var i: c_int = @boolToInt(g < h); |
| 2513 | \\ _ = i; |
| 2375 | 2514 | \\ return i; |
| 2376 | 2515 | \\} |
| 2377 | 2516 | }); |
| ... | ... | @@ -2387,7 +2526,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2387 | 2526 | , &[_][]const u8{ |
| 2388 | 2527 | \\pub export fn max(arg_a: c_int, arg_b: c_int) c_int { |
| 2389 | 2528 | \\ var a = arg_a; |
| 2529 | \\ _ = a; |
| 2390 | 2530 | \\ var b = arg_b; |
| 2531 | \\ _ = b; |
| 2391 | 2532 | \\ if (a == b) return a; |
| 2392 | 2533 | \\ if (a != b) return b; |
| 2393 | 2534 | \\ return a; |
| ... | ... | @@ -2404,6 +2545,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2404 | 2545 | \\pub const yes = [*c]u8; |
| 2405 | 2546 | \\pub export fn foo() void { |
| 2406 | 2547 | \\ var a: yes = undefined; |
| 2548 | \\ _ = a; |
| 2407 | 2549 | \\ if (a != null) { |
| 2408 | 2550 | \\ _ = @as(c_int, 2); |
| 2409 | 2551 | \\ } |
| ... | ... | @@ -2423,6 +2565,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2423 | 2565 | \\ return blk: { |
| 2424 | 2566 | \\ var a: c_int = 1; |
| 2425 | 2567 | \\ _ = a; |
| 2568 | \\ _ = a; |
| 2426 | 2569 | \\ break :blk a; |
| 2427 | 2570 | \\ }; |
| 2428 | 2571 | \\} |
| ... | ... | @@ -2448,6 +2591,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2448 | 2591 | \\pub export var b: f32 = 2.0; |
| 2449 | 2592 | \\pub export fn foo() void { |
| 2450 | 2593 | \\ var c: [*c]struct_Foo = undefined; |
| 2594 | \\ _ = c; |
| 2451 | 2595 | \\ _ = a.b; |
| 2452 | 2596 | \\ _ = c.*.b; |
| 2453 | 2597 | \\} |
| ... | ... | @@ -2467,6 +2611,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2467 | 2611 | \\pub export var array: [100]c_int = [1]c_int{0} ** 100; |
| 2468 | 2612 | \\pub export fn foo(arg_index: c_int) c_int { |
| 2469 | 2613 | \\ var index = arg_index; |
| 2614 | \\ _ = index; |
| 2470 | 2615 | \\ return array[@intCast(c_uint, index)]; |
| 2471 | 2616 | \\} |
| 2472 | 2617 | , |
| ... | ... | @@ -2481,7 +2626,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2481 | 2626 | , &[_][]const u8{ |
| 2482 | 2627 | \\pub export fn foo() void { |
| 2483 | 2628 | \\ var a: [10]c_int = undefined; |
| 2629 | \\ _ = a; |
| 2484 | 2630 | \\ var i: c_int = 0; |
| 2631 | \\ _ = i; |
| 2485 | 2632 | \\ a[@intCast(c_uint, i)] = 0; |
| 2486 | 2633 | \\} |
| 2487 | 2634 | }); |
| ... | ... | @@ -2494,7 +2641,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2494 | 2641 | , &[_][]const u8{ |
| 2495 | 2642 | \\pub export fn foo() void { |
| 2496 | 2643 | \\ var a: [10]c_longlong = undefined; |
| 2644 | \\ _ = a; |
| 2497 | 2645 | \\ var i: c_longlong = 0; |
| 2646 | \\ _ = i; |
| 2498 | 2647 | \\ a[@intCast(usize, i)] = 0; |
| 2499 | 2648 | \\} |
| 2500 | 2649 | }); |
| ... | ... | @@ -2507,7 +2656,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2507 | 2656 | , &[_][]const u8{ |
| 2508 | 2657 | \\pub export fn foo() void { |
| 2509 | 2658 | \\ var a: [10]c_uint = undefined; |
| 2659 | \\ _ = a; |
| 2510 | 2660 | \\ var i: c_uint = 0; |
| 2661 | \\ _ = i; |
| 2511 | 2662 | \\ a[i] = 0; |
| 2512 | 2663 | \\} |
| 2513 | 2664 | }); |
| ... | ... | @@ -2516,6 +2667,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2516 | 2667 | \\#define CALL(arg) bar(arg) |
| 2517 | 2668 | , &[_][]const u8{ |
| 2518 | 2669 | \\pub inline fn CALL(arg: anytype) @TypeOf(bar(arg)) { |
| 2670 | \\ _ = arg; |
| 2519 | 2671 | \\ return bar(arg); |
| 2520 | 2672 | \\} |
| 2521 | 2673 | }); |
| ... | ... | @@ -2524,6 +2676,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2524 | 2676 | \\#define CALL(arg) bar() |
| 2525 | 2677 | , &[_][]const u8{ |
| 2526 | 2678 | \\pub inline fn CALL(arg: anytype) @TypeOf(bar()) { |
| 2679 | \\ _ = arg; |
| 2527 | 2680 | \\ return bar(); |
| 2528 | 2681 | \\} |
| 2529 | 2682 | }); |
| ... | ... | @@ -2539,7 +2692,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2539 | 2692 | , &[_][]const u8{ |
| 2540 | 2693 | \\pub export fn max(arg_a: c_int, arg_b: c_int) c_int { |
| 2541 | 2694 | \\ var a = arg_a; |
| 2695 | \\ _ = a; |
| 2542 | 2696 | \\ var b = arg_b; |
| 2697 | \\ _ = b; |
| 2543 | 2698 | \\ if ((a < b) or (a == b)) return b; |
| 2544 | 2699 | \\ if ((a >= b) and (a == b)) return a; |
| 2545 | 2700 | \\ return a; |
| ... | ... | @@ -2561,7 +2716,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2561 | 2716 | , &[_][]const u8{ |
| 2562 | 2717 | \\pub export fn max(arg_a: c_int, arg_b: c_int) c_int { |
| 2563 | 2718 | \\ var a = arg_a; |
| 2719 | \\ _ = a; |
| 2564 | 2720 | \\ var b = arg_b; |
| 2721 | \\ _ = b; |
| 2565 | 2722 | \\ if (a < b) return b; |
| 2566 | 2723 | \\ if (a < b) return b else return a; |
| 2567 | 2724 | \\ if (a < b) {} else {} |
| ... | ... | @@ -2582,12 +2739,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2582 | 2739 | \\pub export fn foo() void { |
| 2583 | 2740 | \\ if (true) { |
| 2584 | 2741 | \\ var a: c_int = 2; |
| 2742 | \\ _ = a; |
| 2585 | 2743 | \\ } |
| 2586 | 2744 | \\ if ((blk: { |
| 2587 | 2745 | \\ _ = @as(c_int, 2); |
| 2588 | 2746 | \\ break :blk @as(c_int, 5); |
| 2589 | 2747 | \\ }) != 0) { |
| 2590 | 2748 | \\ var a: c_int = 2; |
| 2749 | \\ _ = a; |
| 2591 | 2750 | \\ } |
| 2592 | 2751 | \\} |
| 2593 | 2752 | }); |
| ... | ... | @@ -2610,9 +2769,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2610 | 2769 | \\; |
| 2611 | 2770 | \\pub export fn if_none_bool(arg_a: c_int, arg_b: f32, arg_c: ?*c_void, arg_d: enum_SomeEnum) c_int { |
| 2612 | 2771 | \\ var a = arg_a; |
| 2772 | \\ _ = a; |
| 2613 | 2773 | \\ var b = arg_b; |
| 2774 | \\ _ = b; |
| 2614 | 2775 | \\ var c = arg_c; |
| 2776 | \\ _ = c; |
| 2615 | 2777 | \\ var d = arg_d; |
| 2778 | \\ _ = d; |
| 2616 | 2779 | \\ if (a != 0) return 0; |
| 2617 | 2780 | \\ if (b != 0) return 1; |
| 2618 | 2781 | \\ if (c != null) return 2; |
| ... | ... | @@ -2640,6 +2803,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2640 | 2803 | , &[_][]const u8{ |
| 2641 | 2804 | \\pub export fn abs(arg_a: c_int) c_int { |
| 2642 | 2805 | \\ var a = arg_a; |
| 2806 | \\ _ = a; |
| 2643 | 2807 | \\ return if (a < @as(c_int, 0)) -a else a; |
| 2644 | 2808 | \\} |
| 2645 | 2809 | }); |
| ... | ... | @@ -2660,16 +2824,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2660 | 2824 | , &[_][]const u8{ |
| 2661 | 2825 | \\pub export fn foo1(arg_a: c_uint) c_uint { |
| 2662 | 2826 | \\ var a = arg_a; |
| 2827 | \\ _ = a; |
| 2663 | 2828 | \\ a +%= 1; |
| 2664 | 2829 | \\ return a; |
| 2665 | 2830 | \\} |
| 2666 | 2831 | \\pub export fn foo2(arg_a: c_int) c_int { |
| 2667 | 2832 | \\ var a = arg_a; |
| 2833 | \\ _ = a; |
| 2668 | 2834 | \\ a += 1; |
| 2669 | 2835 | \\ return a; |
| 2670 | 2836 | \\} |
| 2671 | 2837 | \\pub export fn foo3(arg_a: [*c]c_int) [*c]c_int { |
| 2672 | 2838 | \\ var a = arg_a; |
| 2839 | \\ _ = a; |
| 2673 | 2840 | \\ a += 1; |
| 2674 | 2841 | \\ return a; |
| 2675 | 2842 | \\} |
| ... | ... | @@ -2695,7 +2862,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2695 | 2862 | \\} |
| 2696 | 2863 | \\pub export fn bar() void { |
| 2697 | 2864 | \\ var f: ?fn () callconv(.C) void = foo; |
| 2865 | \\ _ = f; |
| 2698 | 2866 | \\ var b: ?fn () callconv(.C) c_int = baz; |
| 2867 | \\ _ = b; |
| 2699 | 2868 | \\ f.?(); |
| 2700 | 2869 | \\ f.?(); |
| 2701 | 2870 | \\ foo(); |
| ... | ... | @@ -2721,7 +2890,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2721 | 2890 | , &[_][]const u8{ |
| 2722 | 2891 | \\pub export fn foo() void { |
| 2723 | 2892 | \\ var i: c_int = 0; |
| 2893 | \\ _ = i; |
| 2724 | 2894 | \\ var u: c_uint = 0; |
| 2895 | \\ _ = u; |
| 2725 | 2896 | \\ i += 1; |
| 2726 | 2897 | \\ i -= 1; |
| 2727 | 2898 | \\ u +%= 1; |
| ... | ... | @@ -2760,7 +2931,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2760 | 2931 | , &[_][]const u8{ |
| 2761 | 2932 | \\pub export fn log2(arg_a: c_uint) c_int { |
| 2762 | 2933 | \\ var a = arg_a; |
| 2934 | \\ _ = a; |
| 2763 | 2935 | \\ var i: c_int = 0; |
| 2936 | \\ _ = i; |
| 2764 | 2937 | \\ while (a > @bitCast(c_uint, @as(c_int, 0))) { |
| 2765 | 2938 | \\ a >>= @intCast(@import("std").math.Log2Int(c_int), @as(c_int, 1)); |
| 2766 | 2939 | \\ } |
| ... | ... | @@ -2780,7 +2953,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2780 | 2953 | , &[_][]const u8{ |
| 2781 | 2954 | \\pub export fn log2(arg_a: u32) c_int { |
| 2782 | 2955 | \\ var a = arg_a; |
| 2956 | \\ _ = a; |
| 2783 | 2957 | \\ var i: c_int = 0; |
| 2958 | \\ _ = i; |
| 2784 | 2959 | \\ while (a > @bitCast(c_uint, @as(c_int, 0))) { |
| 2785 | 2960 | \\ a >>= @intCast(@import("std").math.Log2Int(c_int), @as(c_int, 1)); |
| 2786 | 2961 | \\ } |
| ... | ... | @@ -2808,7 +2983,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2808 | 2983 | , &[_][]const u8{ |
| 2809 | 2984 | \\pub export fn foo() void { |
| 2810 | 2985 | \\ var a: c_int = 0; |
| 2986 | \\ _ = a; |
| 2811 | 2987 | \\ var b: c_uint = 0; |
| 2988 | \\ _ = b; |
| 2812 | 2989 | \\ a += blk: { |
| 2813 | 2990 | \\ const ref = &a; |
| 2814 | 2991 | \\ ref.* += @as(c_int, 1); |
| ... | ... | @@ -2887,6 +3064,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2887 | 3064 | , &[_][]const u8{ |
| 2888 | 3065 | \\pub export fn foo() void { |
| 2889 | 3066 | \\ var a: c_uint = 0; |
| 3067 | \\ _ = a; |
| 2890 | 3068 | \\ a +%= blk: { |
| 2891 | 3069 | \\ const ref = &a; |
| 2892 | 3070 | \\ ref.* +%= @bitCast(c_uint, @as(c_int, 1)); |
| ... | ... | @@ -2946,7 +3124,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 2946 | 3124 | , &[_][]const u8{ |
| 2947 | 3125 | \\pub export fn foo() void { |
| 2948 | 3126 | \\ var i: c_int = 0; |
| 3127 | \\ _ = i; |
| 2949 | 3128 | \\ var u: c_uint = 0; |
| 3129 | \\ _ = u; |
| 2950 | 3130 | \\ i += 1; |
| 2951 | 3131 | \\ i -= 1; |
| 2952 | 3132 | \\ u +%= 1; |
| ... | ... | @@ -3041,6 +3221,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3041 | 3221 | \\pub fn bar() callconv(.C) void {} |
| 3042 | 3222 | \\pub export fn foo(arg_baz: ?fn () callconv(.C) [*c]c_int) void { |
| 3043 | 3223 | \\ var baz = arg_baz; |
| 3224 | \\ _ = baz; |
| 3044 | 3225 | \\ bar(); |
| 3045 | 3226 | \\ _ = baz.?(); |
| 3046 | 3227 | \\} |
| ... | ... | @@ -3082,6 +3263,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3082 | 3263 | \\#define BAZ (uint32_t)(2) |
| 3083 | 3264 | , &[_][]const u8{ |
| 3084 | 3265 | \\pub inline fn FOO(bar: anytype) @TypeOf(baz(@import("std").zig.c_translation.cast(?*c_void, baz))) { |
| 3266 | \\ _ = bar; |
| 3085 | 3267 | \\ return baz(@import("std").zig.c_translation.cast(?*c_void, baz)); |
| 3086 | 3268 | \\} |
| 3087 | 3269 | , |
| ... | ... | @@ -3122,10 +3304,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3122 | 3304 | \\#define MAX(a, b) ((b) > (a) ? (b) : (a)) |
| 3123 | 3305 | , &[_][]const u8{ |
| 3124 | 3306 | \\pub inline fn MIN(a: anytype, b: anytype) @TypeOf(if (b < a) b else a) { |
| 3307 | \\ _ = a; |
| 3308 | \\ _ = b; |
| 3125 | 3309 | \\ return if (b < a) b else a; |
| 3126 | 3310 | \\} |
| 3127 | 3311 | , |
| 3128 | 3312 | \\pub inline fn MAX(a: anytype, b: anytype) @TypeOf(if (b > a) b else a) { |
| 3313 | \\ _ = a; |
| 3314 | \\ _ = b; |
| 3129 | 3315 | \\ return if (b > a) b else a; |
| 3130 | 3316 | \\} |
| 3131 | 3317 | }); |
| ... | ... | @@ -3137,7 +3323,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3137 | 3323 | , &[_][]const u8{ |
| 3138 | 3324 | \\pub export fn foo(arg_p: [*c]c_int, arg_x: c_int) c_int { |
| 3139 | 3325 | \\ var p = arg_p; |
| 3326 | \\ _ = p; |
| 3140 | 3327 | \\ var x = arg_x; |
| 3328 | \\ _ = x; |
| 3141 | 3329 | \\ return blk: { |
| 3142 | 3330 | \\ const tmp = x; |
| 3143 | 3331 | \\ (blk_1: { |
| ... | ... | @@ -3164,6 +3352,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3164 | 3352 | \\} |
| 3165 | 3353 | \\pub export fn bar(arg_x: c_long) c_ushort { |
| 3166 | 3354 | \\ var x = arg_x; |
| 3355 | \\ _ = x; |
| 3167 | 3356 | \\ return @bitCast(c_ushort, @truncate(c_short, x)); |
| 3168 | 3357 | \\} |
| 3169 | 3358 | }); |
| ... | ... | @@ -3176,6 +3365,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3176 | 3365 | , &[_][]const u8{ |
| 3177 | 3366 | \\pub export fn foo(arg_bar_1: c_int) void { |
| 3178 | 3367 | \\ var bar_1 = arg_bar_1; |
| 3368 | \\ _ = bar_1; |
| 3179 | 3369 | \\ bar_1 = 2; |
| 3180 | 3370 | \\} |
| 3181 | 3371 | \\pub export var bar: c_int = 4; |
| ... | ... | @@ -3189,6 +3379,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3189 | 3379 | , &[_][]const u8{ |
| 3190 | 3380 | \\pub export fn foo(arg_bar_1: c_int) void { |
| 3191 | 3381 | \\ var bar_1 = arg_bar_1; |
| 3382 | \\ _ = bar_1; |
| 3192 | 3383 | \\ bar_1 = 2; |
| 3193 | 3384 | \\} |
| 3194 | 3385 | , |
| ... | ... | @@ -3218,13 +3409,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3218 | 3409 | , &[_][]const u8{ |
| 3219 | 3410 | \\pub export fn foo(arg_a: [*c]c_int) void { |
| 3220 | 3411 | \\ var a = arg_a; |
| 3412 | \\ _ = a; |
| 3221 | 3413 | \\} |
| 3222 | 3414 | \\pub export fn bar(arg_a: [*c]const c_int) void { |
| 3223 | 3415 | \\ var a = arg_a; |
| 3416 | \\ _ = a; |
| 3224 | 3417 | \\ foo(@intToPtr([*c]c_int, @ptrToInt(a))); |
| 3225 | 3418 | \\} |
| 3226 | 3419 | \\pub export fn baz(arg_a: [*c]volatile c_int) void { |
| 3227 | 3420 | \\ var a = arg_a; |
| 3421 | \\ _ = a; |
| 3228 | 3422 | \\ foo(@intToPtr([*c]c_int, @ptrToInt(a))); |
| 3229 | 3423 | \\} |
| 3230 | 3424 | }); |
| ... | ... | @@ -3239,9 +3433,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3239 | 3433 | , &[_][]const u8{ |
| 3240 | 3434 | \\pub export fn foo(arg_x: bool) bool { |
| 3241 | 3435 | \\ var x = arg_x; |
| 3436 | \\ _ = x; |
| 3242 | 3437 | \\ var a: bool = @as(c_int, @boolToInt(x)) != @as(c_int, 1); |
| 3438 | \\ _ = a; |
| 3243 | 3439 | \\ var b: bool = @as(c_int, @boolToInt(a)) != @as(c_int, 0); |
| 3440 | \\ _ = b; |
| 3244 | 3441 | \\ var c: bool = @ptrToInt(foo) != 0; |
| 3442 | \\ _ = c; |
| 3245 | 3443 | \\ return foo(@as(c_int, @boolToInt(c)) != @as(c_int, @boolToInt(b))); |
| 3246 | 3444 | \\} |
| 3247 | 3445 | }); |
| ... | ... | @@ -3252,7 +3450,9 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3252 | 3450 | \\} |
| 3253 | 3451 | , &[_][]const u8{ |
| 3254 | 3452 | \\pub export fn max(x: c_int, arg_y: c_int) c_int { |
| 3453 | \\ _ = x; |
| 3255 | 3454 | \\ var y = arg_y; |
| 3455 | \\ _ = y; |
| 3256 | 3456 | \\ return if (x > y) x else y; |
| 3257 | 3457 | \\} |
| 3258 | 3458 | }); |
| ... | ... | @@ -3313,6 +3513,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3313 | 3513 | \\ |
| 3314 | 3514 | , &[_][]const u8{ |
| 3315 | 3515 | \\pub inline fn DefaultScreen(dpy: anytype) @TypeOf(@import("std").zig.c_translation.cast(_XPrivDisplay, dpy).*.default_screen) { |
| 3516 | \\ _ = dpy; |
| 3316 | 3517 | \\ return @import("std").zig.c_translation.cast(_XPrivDisplay, dpy).*.default_screen; |
| 3317 | 3518 | \\} |
| 3318 | 3519 | }); |
| ... | ... | @@ -3532,6 +3733,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3532 | 3733 | \\ const foo = struct { |
| 3533 | 3734 | \\ var static: struct_FOO = @import("std").mem.zeroes(struct_FOO); |
| 3534 | 3735 | \\ }; |
| 3736 | \\ _ = foo; |
| 3535 | 3737 | \\ return foo.static.x; |
| 3536 | 3738 | \\} |
| 3537 | 3739 | }); |
| ... | ... | @@ -3544,4 +3746,31 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 3544 | 3746 | \\pub const MAP_FAILED = @import("std").zig.c_translation.cast(?*c_void, -@as(c_int, 1)); |
| 3545 | 3747 | \\pub const INVALID_HANDLE_VALUE = @import("std").zig.c_translation.cast(?*c_void, @import("std").zig.c_translation.cast(LONG_PTR, -@as(c_int, 1))); |
| 3546 | 3748 | }); |
| 3749 | |
| 3750 | cases.add("discard local variables and function parameters", |
| 3751 | \\#define FOO(A, B) (A) + (B) |
| 3752 | \\int bar(int x, int y) { |
| 3753 | \\ return x; |
| 3754 | \\} |
| 3755 | , &[_][]const u8{ |
| 3756 | \\pub export fn bar(arg_x: c_int, arg_y: c_int) c_int { |
| 3757 | \\ var x = arg_x; |
| 3758 | \\ _ = x; |
| 3759 | \\ var y = arg_y; |
| 3760 | \\ _ = y; |
| 3761 | \\ return x; |
| 3762 | \\} |
| 3763 | , |
| 3764 | \\pub inline fn FOO(A: anytype, B: anytype) @TypeOf(A + B) { |
| 3765 | \\ _ = A; |
| 3766 | \\ _ = B; |
| 3767 | \\ return A + B; |
| 3768 | \\} |
| 3769 | }); |
| 3770 | |
| 3771 | cases.add("Don't allow underscore identifier in macros", |
| 3772 | \\#define FOO _ |
| 3773 | , &[_][]const u8{ |
| 3774 | \\pub const FOO = @compileError("unable to translate C expr: illegal identifier _"); |
| 3775 | }); |
| 3547 | 3776 | } |