| ... | ... | @@ -4,11 +4,8 @@ const builtin = @import("builtin"); |
| 4 | 4 | // add_both - test for stage1 and stage2, in #include mode |
| 5 | 5 | // add - test stage1 only, in #include mode |
| 6 | 6 | // add_2 - test stage2 only, in #include mode |
| 7 | | // addC_both - test for stage1 and stage2, in -c mode |
| 8 | | // addC - test stage1 only, in -c mode |
| 9 | | // addC_2 - test stage2 only, in -c mode |
| 10 | 7 | |
| 11 | | pub fn addCases(cases: *tests.TranslateCContext) void { |
| 8 | pub export fn addCases(cases: *tests.TranslateCContext) void { |
| 12 | 9 | /////////////// Cases that pass for both stage1/stage2 //////////////// |
| 13 | 10 | cases.add_both("simple function prototypes", |
| 14 | 11 | \\void __attribute__((noreturn)) foo(void); |
| ... | ... | @@ -26,7 +23,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 26 | 23 | \\ const unsigned d = 440; |
| 27 | 24 | \\} |
| 28 | 25 | , &[_][]const u8{ |
| 29 | | \\pub fn foo() void { |
| 26 | \\pub export fn foo() void { |
| 30 | 27 | \\ var a: c_int = undefined; |
| 31 | 28 | \\ var b: u8 = @as(u8, 123); |
| 32 | 29 | \\ const c: c_int = undefined; |
| ... | ... | @@ -44,7 +41,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 44 | 41 | \\ a = 1; |
| 45 | 42 | \\} |
| 46 | 43 | , &[_][]const u8{ |
| 47 | | \\pub fn foo() void { |
| 44 | \\pub export fn foo() void { |
| 48 | 45 | \\ var a: c_int = undefined; |
| 49 | 46 | \\ _ = 1; |
| 50 | 47 | \\ _ = "hey"; |
| ... | ... | @@ -54,29 +51,42 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 54 | 51 | \\} |
| 55 | 52 | }); |
| 56 | 53 | |
| 54 | cases.add_both("variables", |
| 55 | \\extern int extern_var; |
| 56 | \\static const int int_var = 13; |
| 57 | , &[_][]const u8{ |
| 58 | \\pub extern var extern_var: c_int; |
| 59 | , |
| 60 | \\pub const int_var: c_int = 13; |
| 61 | }); |
| 62 | |
| 63 | cases.add_both("const ptr initializer", |
| 64 | \\static const char *v0 = "0.0.0"; |
| 65 | , &[_][]const u8{ |
| 66 | \\pub var v0: [*c]const u8 = "0.0.0"; |
| 67 | }); |
| 68 | |
| 57 | 69 | /////////////// Cases that pass for only stage2 //////////////// |
| 58 | | // TODO: restore these tests after removing "import mode" concept |
| 59 | | // https://github.com/ziglang/zig/issues/2780 |
| 60 | | |
| 61 | | // cases.add_2("Parameterless function prototypes", |
| 62 | | // \\void a() {} |
| 63 | | // \\void b(void) {} |
| 64 | | // \\void c(); |
| 65 | | // \\void d(void); |
| 66 | | // , |
| 67 | | // \\pub export fn a() void {} |
| 68 | | // \\pub export fn b() void {} |
| 69 | | // \\pub extern fn c(...) void; |
| 70 | | // \\pub extern fn d() void; |
| 71 | | // ); |
| 72 | | |
| 73 | | // cases.add_2("simple function definition", |
| 74 | | // \\void foo(void) {} |
| 75 | | // \\static void bar(void) {} |
| 76 | | // , |
| 77 | | // \\pub export fn foo() void {} |
| 78 | | // \\pub extern fn bar() void {} |
| 79 | | // ); |
| 70 | |
| 71 | cases.add_2("Parameterless function prototypes", |
| 72 | \\void a() {} |
| 73 | \\void b(void) {} |
| 74 | \\void c(); |
| 75 | \\void d(void); |
| 76 | , &[_][]const u8{ |
| 77 | \\pub export fn a() void {} |
| 78 | \\pub export fn b() void {} |
| 79 | \\pub extern fn c(...) void; |
| 80 | \\pub extern fn d() void; |
| 81 | }); |
| 82 | |
| 83 | cases.add_2("simple function definition", |
| 84 | \\void foo(void) {} |
| 85 | \\static void bar(void) {} |
| 86 | , &[_][]const u8{ |
| 87 | \\pub export fn foo() void {} |
| 88 | \\pub fn bar() void {} |
| 89 | }); |
| 80 | 90 | |
| 81 | 91 | cases.add_2("parameterless function prototypes", |
| 82 | 92 | \\void a() {} |
| ... | ... | @@ -84,8 +94,8 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 84 | 94 | \\void c(); |
| 85 | 95 | \\void d(void); |
| 86 | 96 | , &[_][]const u8{ |
| 87 | | \\pub fn a(...) void {} |
| 88 | | \\pub fn b() void {} |
| 97 | \\pub export fn a() void {} |
| 98 | \\pub export fn b() void {} |
| 89 | 99 | \\pub extern fn c(...) void; |
| 90 | 100 | \\pub extern fn d() void; |
| 91 | 101 | }); |
| ... | ... | @@ -124,7 +134,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 124 | 134 | \\void foo(void) {} |
| 125 | 135 | \\static void bar(void) {} |
| 126 | 136 | , &[_][]const u8{ |
| 127 | | \\pub fn foo() void {} |
| 137 | \\pub export fn foo() void {} |
| 128 | 138 | \\pub fn bar() void {} |
| 129 | 139 | }); |
| 130 | 140 | |
| ... | ... | @@ -142,7 +152,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 142 | 152 | \\} |
| 143 | 153 | , &[_][]const u8{ |
| 144 | 154 | \\pub extern fn foo() void; |
| 145 | | \\pub fn bar() void { |
| 155 | \\pub export fn bar() void { |
| 146 | 156 | \\ var func_ptr: ?*c_void = @ptrCast(?*c_void, foo); |
| 147 | 157 | \\ var typed_func_ptr: ?extern fn () void = @intToPtr(?extern fn () void, @as(c_ulong, @ptrToInt(func_ptr))); |
| 148 | 158 | \\} |
| ... | ... | @@ -212,7 +222,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 212 | 222 | \\ __PRETTY_FUNCTION__; |
| 213 | 223 | \\} |
| 214 | 224 | , &[_][]const u8{ |
| 215 | | \\pub fn foo() void { |
| 225 | \\pub export fn foo() void { |
| 216 | 226 | \\ _ = "foo"; |
| 217 | 227 | \\ _ = "foo"; |
| 218 | 228 | \\ _ = "void foo(void)"; |
| ... | ... | @@ -229,7 +239,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 229 | 239 | \\ a = 1; |
| 230 | 240 | \\} |
| 231 | 241 | , &[_][]const u8{ |
| 232 | | \\pub fn foo() void { |
| 242 | \\pub export fn foo() void { |
| 233 | 243 | \\ var a: c_int = undefined; |
| 234 | 244 | \\ _ = 1; |
| 235 | 245 | \\ _ = "hey"; |
| ... | ... | @@ -244,7 +254,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 244 | 254 | \\ for (int x = 0; x < 10; x++); |
| 245 | 255 | \\} |
| 246 | 256 | , &[_][]const u8{ |
| 247 | | \\pub fn foo() void { |
| 257 | \\pub export fn foo() void { |
| 248 | 258 | \\ { |
| 249 | 259 | \\ var x: c_int = 0; |
| 250 | 260 | \\ while (x < 10) : (x += 1) {} |
| ... | ... | @@ -257,7 +267,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 257 | 267 | \\ do ; while (1); |
| 258 | 268 | \\} |
| 259 | 269 | , &[_][]const u8{ // TODO this should be if (1 != 0) break |
| 260 | | \\pub fn foo() void { |
| 270 | \\pub export fn foo() void { |
| 261 | 271 | \\ while (true) { |
| 262 | 272 | \\ {} |
| 263 | 273 | \\ if (!1) break; |
| ... | ... | @@ -270,7 +280,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 270 | 280 | \\ for (;;); |
| 271 | 281 | \\} |
| 272 | 282 | , &[_][]const u8{ |
| 273 | | \\pub fn foo() void { |
| 283 | \\pub export fn foo() void { |
| 274 | 284 | \\ while (true) {} |
| 275 | 285 | \\} |
| 276 | 286 | }); |
| ... | ... | @@ -280,7 +290,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 280 | 290 | \\ while (1); |
| 281 | 291 | \\} |
| 282 | 292 | , &[_][]const u8{ |
| 283 | | \\pub fn foo() void { |
| 293 | \\pub export fn foo() void { |
| 284 | 294 | \\ while (1 != 0) {} |
| 285 | 295 | \\} |
| 286 | 296 | }); |
| ... | ... | @@ -326,7 +336,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 326 | 336 | \\pub extern fn foo() noreturn; |
| 327 | 337 | }); |
| 328 | 338 | |
| 329 | | cases.addC("simple function", |
| 339 | cases.add("simple function", |
| 330 | 340 | \\int abs(int a) { |
| 331 | 341 | \\ return a < 0 ? -a : a; |
| 332 | 342 | \\} |
| ... | ... | @@ -482,15 +492,6 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 482 | 492 | \\pub const THING2 = THING1; |
| 483 | 493 | }); |
| 484 | 494 | |
| 485 | | cases.add("variables", |
| 486 | | \\extern int extern_var; |
| 487 | | \\static const int int_var = 13; |
| 488 | | , &[_][]const u8{ |
| 489 | | \\pub extern var extern_var: c_int; |
| 490 | | , |
| 491 | | \\pub const int_var: c_int = 13; |
| 492 | | }); |
| 493 | | |
| 494 | 495 | cases.add("circular struct definitions", |
| 495 | 496 | \\struct Bar; |
| 496 | 497 | \\ |
| ... | ... | @@ -642,7 +643,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 642 | 643 | \\pub const LUA_GLOBALSINDEX = -10002; |
| 643 | 644 | }); |
| 644 | 645 | |
| 645 | | cases.addC("post increment", |
| 646 | cases.add("post increment", |
| 646 | 647 | \\unsigned foo1(unsigned a) { |
| 647 | 648 | \\ a++; |
| 648 | 649 | \\ return a; |
| ... | ... | @@ -664,7 +665,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 664 | 665 | \\} |
| 665 | 666 | }); |
| 666 | 667 | |
| 667 | | cases.addC("shift right assign", |
| 668 | cases.add("shift right assign", |
| 668 | 669 | \\int log2(unsigned a) { |
| 669 | 670 | \\ int i = 0; |
| 670 | 671 | \\ while (a > 0) { |
| ... | ... | @@ -683,7 +684,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 683 | 684 | \\} |
| 684 | 685 | }); |
| 685 | 686 | |
| 686 | | cases.addC("if statement", |
| 687 | cases.add("if statement", |
| 687 | 688 | \\int max(int a, int b) { |
| 688 | 689 | \\ if (a < b) |
| 689 | 690 | \\ return b; |
| ... | ... | @@ -703,7 +704,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 703 | 704 | \\} |
| 704 | 705 | }); |
| 705 | 706 | |
| 706 | | cases.addC("==, !=", |
| 707 | cases.add("==, !=", |
| 707 | 708 | \\int max(int a, int b) { |
| 708 | 709 | \\ if (a == b) |
| 709 | 710 | \\ return a; |
| ... | ... | @@ -719,7 +720,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 719 | 720 | \\} |
| 720 | 721 | }); |
| 721 | 722 | |
| 722 | | cases.addC_both("add, sub, mul, div, rem", |
| 723 | cases.add_both("add, sub, mul, div, rem", |
| 723 | 724 | \\int s(int a, int b) { |
| 724 | 725 | \\ int c; |
| 725 | 726 | \\ c = a + b; |
| ... | ... | @@ -755,7 +756,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 755 | 756 | \\} |
| 756 | 757 | }); |
| 757 | 758 | |
| 758 | | cases.addC("bitwise binary operators", |
| 759 | cases.add("bitwise binary operators", |
| 759 | 760 | \\int max(int a, int b) { |
| 760 | 761 | \\ return (a & b) ^ (a | b); |
| 761 | 762 | \\} |
| ... | ... | @@ -765,7 +766,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 765 | 766 | \\} |
| 766 | 767 | }); |
| 767 | 768 | |
| 768 | | cases.addC("logical and, logical or", |
| 769 | cases.add("logical and, logical or", |
| 769 | 770 | \\int max(int a, int b) { |
| 770 | 771 | \\ if (a < b || a == b) |
| 771 | 772 | \\ return b; |
| ... | ... | @@ -781,7 +782,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 781 | 782 | \\} |
| 782 | 783 | }); |
| 783 | 784 | |
| 784 | | cases.addC("logical and, logical or on none bool values", |
| 785 | cases.add("logical and, logical or on none bool values", |
| 785 | 786 | \\int and_or_none_bool(int a, float b, void *c) { |
| 786 | 787 | \\ if (a && b) return 0; |
| 787 | 788 | \\ if (b && c) return 1; |
| ... | ... | @@ -803,7 +804,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 803 | 804 | \\} |
| 804 | 805 | }); |
| 805 | 806 | |
| 806 | | cases.addC("assign", |
| 807 | cases.add("assign", |
| 807 | 808 | \\int max(int a) { |
| 808 | 809 | \\ int tmp; |
| 809 | 810 | \\ tmp = a; |
| ... | ... | @@ -818,7 +819,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 818 | 819 | \\} |
| 819 | 820 | }); |
| 820 | 821 | |
| 821 | | cases.addC("chaining assign", |
| 822 | cases.add("chaining assign", |
| 822 | 823 | \\void max(int a) { |
| 823 | 824 | \\ int b, c; |
| 824 | 825 | \\ c = b = a; |
| ... | ... | @@ -835,7 +836,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 835 | 836 | \\} |
| 836 | 837 | }); |
| 837 | 838 | |
| 838 | | cases.addC("shift right assign with a fixed size type", |
| 839 | cases.add("shift right assign with a fixed size type", |
| 839 | 840 | \\#include <stdint.h> |
| 840 | 841 | \\int log2(uint32_t a) { |
| 841 | 842 | \\ int i = 0; |
| ... | ... | @@ -865,7 +866,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 865 | 866 | \\pub const Two = 1; |
| 866 | 867 | }); |
| 867 | 868 | |
| 868 | | cases.addC("function call", |
| 869 | cases.add("function call", |
| 869 | 870 | \\static void bar(void) { } |
| 870 | 871 | \\static int baz(void) { return 0; } |
| 871 | 872 | \\void foo(void) { |
| ... | ... | @@ -883,7 +884,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 883 | 884 | \\} |
| 884 | 885 | }); |
| 885 | 886 | |
| 886 | | cases.addC("field access expression", |
| 887 | cases.add("field access expression", |
| 887 | 888 | \\struct Foo { |
| 888 | 889 | \\ int field; |
| 889 | 890 | \\}; |
| ... | ... | @@ -899,7 +900,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 899 | 900 | \\} |
| 900 | 901 | }); |
| 901 | 902 | |
| 902 | | cases.addC("null statements", |
| 903 | cases.add("null statements", |
| 903 | 904 | \\void foo(void) { |
| 904 | 905 | \\ ;;;;; |
| 905 | 906 | \\} |
| ... | ... | @@ -919,7 +920,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 919 | 920 | \\pub var array: [100]c_int = undefined; |
| 920 | 921 | }); |
| 921 | 922 | |
| 922 | | cases.addC("array access", |
| 923 | cases.add("array access", |
| 923 | 924 | \\int array[100]; |
| 924 | 925 | \\int foo(int index) { |
| 925 | 926 | \\ return array[index]; |
| ... | ... | @@ -931,7 +932,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 931 | 932 | \\} |
| 932 | 933 | }); |
| 933 | 934 | |
| 934 | | cases.addC("c style cast", |
| 935 | cases.add("c style cast", |
| 935 | 936 | \\int float_to_int(float a) { |
| 936 | 937 | \\ return (int)a; |
| 937 | 938 | \\} |
| ... | ... | @@ -941,7 +942,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 941 | 942 | \\} |
| 942 | 943 | }); |
| 943 | 944 | |
| 944 | | cases.addC("void cast", |
| 945 | cases.add("void cast", |
| 945 | 946 | \\void foo(int a) { |
| 946 | 947 | \\ (void) a; |
| 947 | 948 | \\} |
| ... | ... | @@ -951,7 +952,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 951 | 952 | \\} |
| 952 | 953 | }); |
| 953 | 954 | |
| 954 | | cases.addC("implicit cast to void *", |
| 955 | cases.add("implicit cast to void *", |
| 955 | 956 | \\void *foo(unsigned short *x) { |
| 956 | 957 | \\ return x; |
| 957 | 958 | \\} |
| ... | ... | @@ -961,7 +962,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 961 | 962 | \\} |
| 962 | 963 | }); |
| 963 | 964 | |
| 964 | | cases.addC("sizeof", |
| 965 | cases.add("sizeof", |
| 965 | 966 | \\#include <stddef.h> |
| 966 | 967 | \\size_t size_of(void) { |
| 967 | 968 | \\ return sizeof(int); |
| ... | ... | @@ -972,7 +973,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 972 | 973 | \\} |
| 973 | 974 | }); |
| 974 | 975 | |
| 975 | | cases.addC("null pointer implicit cast", |
| 976 | cases.add("null pointer implicit cast", |
| 976 | 977 | \\int* foo(void) { |
| 977 | 978 | \\ return 0; |
| 978 | 979 | \\} |
| ... | ... | @@ -982,7 +983,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 982 | 983 | \\} |
| 983 | 984 | }); |
| 984 | 985 | |
| 985 | | cases.addC("comma operator", |
| 986 | cases.add("comma operator", |
| 986 | 987 | \\int foo(void) { |
| 987 | 988 | \\ return 1, 2; |
| 988 | 989 | \\} |
| ... | ... | @@ -995,7 +996,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 995 | 996 | \\} |
| 996 | 997 | }); |
| 997 | 998 | |
| 998 | | cases.addC("statement expression", |
| 999 | cases.add("statement expression", |
| 999 | 1000 | \\int foo(void) { |
| 1000 | 1001 | \\ return ({ |
| 1001 | 1002 | \\ int a = 1; |
| ... | ... | @@ -1011,7 +1012,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1011 | 1012 | \\} |
| 1012 | 1013 | }); |
| 1013 | 1014 | |
| 1014 | | cases.addC("__extension__ cast", |
| 1015 | cases.add("__extension__ cast", |
| 1015 | 1016 | \\int foo(void) { |
| 1016 | 1017 | \\ return __extension__ 1; |
| 1017 | 1018 | \\} |
| ... | ... | @@ -1021,7 +1022,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1021 | 1022 | \\} |
| 1022 | 1023 | }); |
| 1023 | 1024 | |
| 1024 | | cases.addC("bitshift", |
| 1025 | cases.add("bitshift", |
| 1025 | 1026 | \\int foo(void) { |
| 1026 | 1027 | \\ return (1 << 2) >> 1; |
| 1027 | 1028 | \\} |
| ... | ... | @@ -1031,7 +1032,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1031 | 1032 | \\} |
| 1032 | 1033 | }); |
| 1033 | 1034 | |
| 1034 | | cases.addC("compound assignment operators", |
| 1035 | cases.add("compound assignment operators", |
| 1035 | 1036 | \\void foo(void) { |
| 1036 | 1037 | \\ int a = 0; |
| 1037 | 1038 | \\ a += (a += 1); |
| ... | ... | @@ -1089,7 +1090,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1089 | 1090 | \\} |
| 1090 | 1091 | }); |
| 1091 | 1092 | |
| 1092 | | cases.addC("compound assignment operators unsigned", |
| 1093 | cases.add("compound assignment operators unsigned", |
| 1093 | 1094 | \\void foo(void) { |
| 1094 | 1095 | \\ unsigned a = 0; |
| 1095 | 1096 | \\ a += (a += 1); |
| ... | ... | @@ -1147,7 +1148,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1147 | 1148 | \\} |
| 1148 | 1149 | }); |
| 1149 | 1150 | |
| 1150 | | cases.addC("duplicate typedef", |
| 1151 | cases.add("duplicate typedef", |
| 1151 | 1152 | \\typedef long foo; |
| 1152 | 1153 | \\typedef int bar; |
| 1153 | 1154 | \\typedef long foo; |
| ... | ... | @@ -1158,7 +1159,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1158 | 1159 | \\pub const baz = c_int; |
| 1159 | 1160 | }); |
| 1160 | 1161 | |
| 1161 | | cases.addC("post increment/decrement", |
| 1162 | cases.add("post increment/decrement", |
| 1162 | 1163 | \\void foo(void) { |
| 1163 | 1164 | \\ int i = 0; |
| 1164 | 1165 | \\ unsigned u = 0; |
| ... | ... | @@ -1206,7 +1207,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1206 | 1207 | \\} |
| 1207 | 1208 | }); |
| 1208 | 1209 | |
| 1209 | | cases.addC("pre increment/decrement", |
| 1210 | cases.add("pre increment/decrement", |
| 1210 | 1211 | \\void foo(void) { |
| 1211 | 1212 | \\ int i = 0; |
| 1212 | 1213 | \\ unsigned u = 0; |
| ... | ... | @@ -1250,7 +1251,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1250 | 1251 | \\} |
| 1251 | 1252 | }); |
| 1252 | 1253 | |
| 1253 | | cases.addC("do loop", |
| 1254 | cases.add("do loop", |
| 1254 | 1255 | \\void foo(void) { |
| 1255 | 1256 | \\ int a = 2; |
| 1256 | 1257 | \\ do { |
| ... | ... | @@ -1277,7 +1278,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1277 | 1278 | \\} |
| 1278 | 1279 | }); |
| 1279 | 1280 | |
| 1280 | | cases.addC("deref function pointer", |
| 1281 | cases.add("deref function pointer", |
| 1281 | 1282 | \\void foo(void) {} |
| 1282 | 1283 | \\int baz(void) { return 0; } |
| 1283 | 1284 | \\void bar(void) { |
| ... | ... | @@ -1307,7 +1308,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1307 | 1308 | \\} |
| 1308 | 1309 | }); |
| 1309 | 1310 | |
| 1310 | | cases.addC("normal deref", |
| 1311 | cases.add("normal deref", |
| 1311 | 1312 | \\void foo(int *x) { |
| 1312 | 1313 | \\ *x = 1; |
| 1313 | 1314 | \\} |
| ... | ... | @@ -1338,7 +1339,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1338 | 1339 | \\ return *ptr; |
| 1339 | 1340 | \\} |
| 1340 | 1341 | , &[_][]const u8{ |
| 1341 | | \\pub fn foo() c_int { |
| 1342 | \\pub export fn foo() c_int { |
| 1342 | 1343 | \\ var x: c_int = 1234; |
| 1343 | 1344 | \\ var ptr: [*c]c_int = &x; |
| 1344 | 1345 | \\ return ptr.?.*; |
| ... | ... | @@ -1350,7 +1351,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1350 | 1351 | \\ return "bar"; |
| 1351 | 1352 | \\} |
| 1352 | 1353 | , &[_][]const u8{ |
| 1353 | | \\pub fn foo() [*c]const u8 { |
| 1354 | \\pub export fn foo() [*c]const u8 { |
| 1354 | 1355 | \\ return "bar"; |
| 1355 | 1356 | \\} |
| 1356 | 1357 | }); |
| ... | ... | @@ -1360,7 +1361,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1360 | 1361 | \\ return; |
| 1361 | 1362 | \\} |
| 1362 | 1363 | , &[_][]const u8{ |
| 1363 | | \\pub fn foo() void { |
| 1364 | \\pub export fn foo() void { |
| 1364 | 1365 | \\ return; |
| 1365 | 1366 | \\} |
| 1366 | 1367 | }); |
| ... | ... | @@ -1370,7 +1371,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1370 | 1371 | \\ for (int i = 0; i < 10; i += 1) { } |
| 1371 | 1372 | \\} |
| 1372 | 1373 | , &[_][]const u8{ |
| 1373 | | \\pub fn foo() void { |
| 1374 | \\pub export fn foo() void { |
| 1374 | 1375 | \\ { |
| 1375 | 1376 | \\ var i: c_int = 0; |
| 1376 | 1377 | \\ while (i < 10) : (i += 1) {} |
| ... | ... | @@ -1383,7 +1384,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1383 | 1384 | \\ for (;;) { } |
| 1384 | 1385 | \\} |
| 1385 | 1386 | , &[_][]const u8{ |
| 1386 | | \\pub fn foo() void { |
| 1387 | \\pub export fn foo() void { |
| 1387 | 1388 | \\ while (true) {} |
| 1388 | 1389 | \\} |
| 1389 | 1390 | }); |
| ... | ... | @@ -1395,7 +1396,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1395 | 1396 | \\ } |
| 1396 | 1397 | \\} |
| 1397 | 1398 | , &[_][]const u8{ |
| 1398 | | \\pub fn foo() void { |
| 1399 | \\pub export fn foo() void { |
| 1399 | 1400 | \\ while (true) { |
| 1400 | 1401 | \\ break; |
| 1401 | 1402 | \\ } |
| ... | ... | @@ -1409,7 +1410,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1409 | 1410 | \\ } |
| 1410 | 1411 | \\} |
| 1411 | 1412 | , &[_][]const u8{ |
| 1412 | | \\pub fn foo() void { |
| 1413 | \\pub export fn foo() void { |
| 1413 | 1414 | \\ while (true) { |
| 1414 | 1415 | \\ continue; |
| 1415 | 1416 | \\ } |
| ... | ... | @@ -1464,7 +1465,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1464 | 1465 | \\ return x; |
| 1465 | 1466 | \\} |
| 1466 | 1467 | , &[_][]const u8{ |
| 1467 | | \\pub fn foo() c_int { |
| 1468 | \\pub export fn foo() c_int { |
| 1468 | 1469 | \\ var x: c_int = 1; |
| 1469 | 1470 | \\ { |
| 1470 | 1471 | \\ var x_0: c_int = 2; |
| ... | ... | @@ -1489,7 +1490,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1489 | 1490 | \\ return ~x; |
| 1490 | 1491 | \\} |
| 1491 | 1492 | , &[_][]const u8{ |
| 1492 | | \\pub fn foo(x: c_int) c_int { |
| 1493 | \\pub export fn foo(x: c_int) c_int { |
| 1493 | 1494 | \\ return ~x; |
| 1494 | 1495 | \\} |
| 1495 | 1496 | }); |
| ... | ... | @@ -1502,7 +1503,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1502 | 1503 | \\ return !c; |
| 1503 | 1504 | \\} |
| 1504 | 1505 | , &[_][]const u8{ |
| 1505 | | \\pub fn foo(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1506 | \\pub export fn foo(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1506 | 1507 | \\ return !(a == 0); |
| 1507 | 1508 | \\ return !(a != 0); |
| 1508 | 1509 | \\ return !(b != 0); |
| ... | ... | @@ -1515,23 +1516,17 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1515 | 1516 | \\ return u32; |
| 1516 | 1517 | \\} |
| 1517 | 1518 | , &[_][]const u8{ |
| 1518 | | \\pub fn foo(u32_0: c_int) c_int { |
| 1519 | \\pub export fn foo(u32_0: c_int) c_int { |
| 1519 | 1520 | \\ return u32_0; |
| 1520 | 1521 | \\} |
| 1521 | 1522 | }); |
| 1522 | 1523 | |
| 1523 | | cases.add("const ptr initializer", |
| 1524 | | \\static const char *v0 = "0.0.0"; |
| 1525 | | , &[_][]const u8{ |
| 1526 | | \\pub var v0: [*c]const u8 = "0.0.0"; |
| 1527 | | }); |
| 1528 | | |
| 1529 | 1524 | cases.add("static incomplete array inside function", |
| 1530 | 1525 | \\void foo(void) { |
| 1531 | 1526 | \\ static const char v2[] = "2.2.2"; |
| 1532 | 1527 | \\} |
| 1533 | 1528 | , &[_][]const u8{ |
| 1534 | | \\pub fn foo() void { |
| 1529 | \\pub export fn foo() void { |
| 1535 | 1530 | \\ const v2: [*c]const u8 = "2.2.2"; |
| 1536 | 1531 | \\} |
| 1537 | 1532 | }); |
| ... | ... | @@ -1560,7 +1555,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1560 | 1555 | \\ B, |
| 1561 | 1556 | \\ C, |
| 1562 | 1557 | \\}; |
| 1563 | | \\pub fn if_none_bool(a: c_int, b: f32, c: ?*c_void, d: enum_SomeEnum) c_int { |
| 1558 | \\pub export fn if_none_bool(a: c_int, b: f32, c: ?*c_void, d: enum_SomeEnum) c_int { |
| 1564 | 1559 | \\ if (a != 0) return 0; |
| 1565 | 1560 | \\ if (b != 0) return 1; |
| 1566 | 1561 | \\ if (c != null) return 2; |
| ... | ... | @@ -1577,7 +1572,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1577 | 1572 | \\ return 3; |
| 1578 | 1573 | \\} |
| 1579 | 1574 | , &[_][]const u8{ |
| 1580 | | \\pub fn while_none_bool(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1575 | \\pub export fn while_none_bool(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1581 | 1576 | \\ while (a != 0) return 0; |
| 1582 | 1577 | \\ while (b != 0) return 1; |
| 1583 | 1578 | \\ while (c != null) return 2; |
| ... | ... | @@ -1593,7 +1588,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1593 | 1588 | \\ return 3; |
| 1594 | 1589 | \\} |
| 1595 | 1590 | , &[_][]const u8{ |
| 1596 | | \\pub fn for_none_bool(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1591 | \\pub export fn for_none_bool(a: c_int, b: f32, c: ?*c_void) c_int { |
| 1597 | 1592 | \\ while (a != 0) return 0; |
| 1598 | 1593 | \\ while (b != 0) return 1; |
| 1599 | 1594 | \\ while (c != null) return 2; |
| ... | ... | @@ -1617,7 +1612,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1617 | 1612 | \\ } |
| 1618 | 1613 | \\} |
| 1619 | 1614 | , &[_][]const u8{ |
| 1620 | | \\pub fn switch_fn(i: c_int) c_int { |
| 1615 | \\pub export fn switch_fn(i: c_int) c_int { |
| 1621 | 1616 | \\ var res: c_int = 0; |
| 1622 | 1617 | \\ __switch: { |
| 1623 | 1618 | \\ __case_2: { |
| ... | ... | @@ -1643,7 +1638,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1643 | 1638 | \\} |
| 1644 | 1639 | }); |
| 1645 | 1640 | |
| 1646 | | cases.addC( |
| 1641 | cases.add( |
| 1647 | 1642 | "u integer suffix after 0 (zero) in macro definition", |
| 1648 | 1643 | "#define ZERO 0U", |
| 1649 | 1644 | &[_][]const u8{ |
| ... | ... | @@ -1651,7 +1646,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1651 | 1646 | }, |
| 1652 | 1647 | ); |
| 1653 | 1648 | |
| 1654 | | cases.addC( |
| 1649 | cases.add( |
| 1655 | 1650 | "l integer suffix after 0 (zero) in macro definition", |
| 1656 | 1651 | "#define ZERO 0L", |
| 1657 | 1652 | &[_][]const u8{ |
| ... | ... | @@ -1659,7 +1654,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1659 | 1654 | }, |
| 1660 | 1655 | ); |
| 1661 | 1656 | |
| 1662 | | cases.addC( |
| 1657 | cases.add( |
| 1663 | 1658 | "ul integer suffix after 0 (zero) in macro definition", |
| 1664 | 1659 | "#define ZERO 0UL", |
| 1665 | 1660 | &[_][]const u8{ |
| ... | ... | @@ -1667,7 +1662,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1667 | 1662 | }, |
| 1668 | 1663 | ); |
| 1669 | 1664 | |
| 1670 | | cases.addC( |
| 1665 | cases.add( |
| 1671 | 1666 | "lu integer suffix after 0 (zero) in macro definition", |
| 1672 | 1667 | "#define ZERO 0LU", |
| 1673 | 1668 | &[_][]const u8{ |
| ... | ... | @@ -1675,7 +1670,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1675 | 1670 | }, |
| 1676 | 1671 | ); |
| 1677 | 1672 | |
| 1678 | | cases.addC( |
| 1673 | cases.add( |
| 1679 | 1674 | "ll integer suffix after 0 (zero) in macro definition", |
| 1680 | 1675 | "#define ZERO 0LL", |
| 1681 | 1676 | &[_][]const u8{ |
| ... | ... | @@ -1683,7 +1678,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1683 | 1678 | }, |
| 1684 | 1679 | ); |
| 1685 | 1680 | |
| 1686 | | cases.addC( |
| 1681 | cases.add( |
| 1687 | 1682 | "ull integer suffix after 0 (zero) in macro definition", |
| 1688 | 1683 | "#define ZERO 0ULL", |
| 1689 | 1684 | &[_][]const u8{ |
| ... | ... | @@ -1691,7 +1686,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1691 | 1686 | }, |
| 1692 | 1687 | ); |
| 1693 | 1688 | |
| 1694 | | cases.addC( |
| 1689 | cases.add( |
| 1695 | 1690 | "llu integer suffix after 0 (zero) in macro definition", |
| 1696 | 1691 | "#define ZERO 0LLU", |
| 1697 | 1692 | &[_][]const u8{ |
| ... | ... | @@ -1699,7 +1694,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1699 | 1694 | }, |
| 1700 | 1695 | ); |
| 1701 | 1696 | |
| 1702 | | cases.addC( |
| 1697 | cases.add( |
| 1703 | 1698 | "bitwise not on u-suffixed 0 (zero) in macro definition", |
| 1704 | 1699 | "#define NOT_ZERO (~0U)", |
| 1705 | 1700 | &[_][]const u8{ |
| ... | ... | @@ -1707,7 +1702,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1707 | 1702 | }, |
| 1708 | 1703 | ); |
| 1709 | 1704 | |
| 1710 | | cases.addC("implicit casts", |
| 1705 | cases.add("implicit casts", |
| 1711 | 1706 | \\#include <stdbool.h> |
| 1712 | 1707 | \\ |
| 1713 | 1708 | \\void fn_int(int x); |
| ... | ... | @@ -1762,7 +1757,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1762 | 1757 | \\} |
| 1763 | 1758 | }); |
| 1764 | 1759 | |
| 1765 | | cases.addC("pointer conversion with different alignment", |
| 1760 | cases.add("pointer conversion with different alignment", |
| 1766 | 1761 | \\void test_ptr_cast() { |
| 1767 | 1762 | \\ void *p; |
| 1768 | 1763 | \\ { |
| ... | ... | @@ -1796,7 +1791,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1796 | 1791 | \\} |
| 1797 | 1792 | }); |
| 1798 | 1793 | |
| 1799 | | cases.addC("escape sequences", |
| 1794 | cases.add("escape sequences", |
| 1800 | 1795 | \\const char *escapes() { |
| 1801 | 1796 | \\char a = '\'', |
| 1802 | 1797 | \\ b = '\\', |
| ... | ... | @@ -1840,7 +1835,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void { |
| 1840 | 1835 | } |
| 1841 | 1836 | |
| 1842 | 1837 | /////////////// Cases for only stage1 because stage2 behavior is better //////////////// |
| 1843 | | cases.addC("Parameterless function prototypes", |
| 1838 | cases.add("Parameterless function prototypes", |
| 1844 | 1839 | \\void foo() {} |
| 1845 | 1840 | \\void bar(void) {} |
| 1846 | 1841 | , &[_][]const u8{ |