authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-13 18:55:34+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-13 19:06:32+02:00
log45abfa9e7189e5d87d4d49763399531973c2f899
treee0e9796f3267e802a3ab15a28a8f0886c22a97a5
parent41a67126a50e3cfab67c749bfc52ac242694774b
signature Commit is signed but in an unrecognized format.

revert removal of translate mode in stage 1


6 files changed, 119 insertions(+), 79 deletions(-)

src/codegen.cpp+6-2
...@@ -9020,6 +9020,10 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us...@@ -9020,6 +9020,10 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us
90209020
9021 init(g);9021 init(g);
90229022
9023 TranslateMode trans_mode = buf_ends_with_str(full_path, ".h") ?
9024 TranslateModeImport : TranslateModeTranslate;
9025
9026
9023 ZigList<const char *> clang_argv = {0};9027 ZigList<const char *> clang_argv = {0};
9024 add_cc_args(g, clang_argv, nullptr, true);9028 add_cc_args(g, clang_argv, nullptr, true);
90259029
...@@ -9045,8 +9049,8 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us...@@ -9045,8 +9049,8 @@ void codegen_translate_c(CodeGen *g, Buf *full_path, FILE *out_file, bool use_us
9045 err = stage2_translate_c(&ast, &errors_ptr, &errors_len,9049 err = stage2_translate_c(&ast, &errors_ptr, &errors_len,
9046 &clang_argv.at(0), &clang_argv.last(), resources_path);9050 &clang_argv.at(0), &clang_argv.last(), resources_path);
9047 } else {9051 } else {
9048 err = parse_h_file(g, &root_node, &errors_ptr, &errors_len, &clang_argv.at(0),9052 err = parse_h_file(g, &root_node, &errors_ptr, &errors_len, &clang_argv.at(0), &clang_argv.last(),
9049 &clang_argv.last(), resources_path);9053 trans_mode, resources_path);
9050 }9054 }
90519055
9052 if (err == ErrorCCompileErrors && errors_len > 0) {9056 if (err == ErrorCCompileErrors && errors_len > 0) {
src/ir.cpp+1-1
...@@ -23343,7 +23343,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct...@@ -23343,7 +23343,7 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
23343 const char *resources_path = buf_ptr(ira->codegen->zig_c_headers_dir);23343 const char *resources_path = buf_ptr(ira->codegen->zig_c_headers_dir);
2334423344
23345 if ((err = parse_h_file(ira->codegen, &root_node, &errors_ptr, &errors_len,23345 if ((err = parse_h_file(ira->codegen, &root_node, &errors_ptr, &errors_len,
23346 &clang_argv.at(0), &clang_argv.last(), resources_path)))23346 &clang_argv.at(0), &clang_argv.last(), TranslateModeImport, resources_path)))
23347 {23347 {
23348 if (err != ErrorCCompileErrors) {23348 if (err != ErrorCCompileErrors) {
23349 ir_add_error_node(ira, node, buf_sprintf("C import failed: %s", err_str(err)));23349 ir_add_error_node(ira, node, buf_sprintf("C import failed: %s", err_str(err)));
src/translate_c.cpp+8-2
...@@ -64,6 +64,7 @@ struct TransScopeWhile {...@@ -64,6 +64,7 @@ struct TransScopeWhile {
6464
65struct Context {65struct Context {
66 AstNode *root;66 AstNode *root;
67 bool want_export;
67 HashMap<const void *, AstNode *, ptr_hash, ptr_eq> decl_table;68 HashMap<const void *, AstNode *, ptr_hash, ptr_eq> decl_table;
68 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> macro_table;69 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> macro_table;
69 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> global_table;70 HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> global_table;
...@@ -4090,7 +4091,7 @@ static void visit_fn_decl(Context *c, const ZigClangFunctionDecl *fn_decl) {...@@ -4090,7 +4091,7 @@ static void visit_fn_decl(Context *c, const ZigClangFunctionDecl *fn_decl) {
4090 ZigClangStorageClass sc = ZigClangFunctionDecl_getStorageClass(fn_decl);4091 ZigClangStorageClass sc = ZigClangFunctionDecl_getStorageClass(fn_decl);
4091 if (sc == ZigClangStorageClass_None) {4092 if (sc == ZigClangStorageClass_None) {
4092 proto_node->data.fn_proto.visib_mod = VisibModPub;4093 proto_node->data.fn_proto.visib_mod = VisibModPub;
4093 proto_node->data.fn_proto.is_export = ZigClangFunctionDecl_hasBody(fn_decl);4094 proto_node->data.fn_proto.is_export = ZigClangFunctionDecl_hasBody(fn_decl) ? c->want_export : false;
4094 } else if (sc == ZigClangStorageClass_Extern || sc == ZigClangStorageClass_Static) {4095 } else if (sc == ZigClangStorageClass_Extern || sc == ZigClangStorageClass_Static) {
4095 proto_node->data.fn_proto.visib_mod = VisibModPub;4096 proto_node->data.fn_proto.visib_mod = VisibModPub;
4096 } else if (sc == ZigClangStorageClass_PrivateExtern) {4097 } else if (sc == ZigClangStorageClass_PrivateExtern) {
...@@ -5111,11 +5112,16 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *unit) {...@@ -5111,11 +5112,16 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *unit) {
5111Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,5112Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,
5112 Stage2ErrorMsg **errors_ptr, size_t *errors_len,5113 Stage2ErrorMsg **errors_ptr, size_t *errors_len,
5113 const char **args_begin, const char **args_end,5114 const char **args_begin, const char **args_end,
5114 const char *resources_path)5115 TranslateMode mode, const char *resources_path)
5115{5116{
5116 Context context = {0};5117 Context context = {0};
5117 Context *c = &context;5118 Context *c = &context;
5118 c->warnings_on = codegen->verbose_cimport;5119 c->warnings_on = codegen->verbose_cimport;
5120 if (mode == TranslateModeImport) {
5121 c->want_export = false;
5122 } else {
5123 c->want_export = true;
5124 }
5119 c->decl_table.init(8);5125 c->decl_table.init(8);
5120 c->macro_table.init(8);5126 c->macro_table.init(8);
5121 c->global_table.init(8);5127 c->global_table.init(8);
src/translate_c.hpp+6-1
...@@ -11,9 +11,14 @@...@@ -11,9 +11,14 @@
1111
12#include "all_types.hpp"12#include "all_types.hpp"
1313
14enum TranslateMode {
15 TranslateModeImport,
16 TranslateModeTranslate,
17};
18
14Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,19Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,
15 Stage2ErrorMsg **errors_ptr, size_t *errors_len,20 Stage2ErrorMsg **errors_ptr, size_t *errors_len,
16 const char **args_begin, const char **args_end,21 const char **args_begin, const char **args_end,
17 const char *resources_path);22 TranslateMode mode, const char *resources_path);
1823
19#endif24#endif
test/tests.zig+23
...@@ -1604,6 +1604,16 @@ pub const TranslateCContext = struct {...@@ -1604,6 +1604,16 @@ pub const TranslateCContext = struct {
1604 self.addCase(tc);1604 self.addCase(tc);
1605 }1605 }
16061606
1607 pub fn addC(
1608 self: *TranslateCContext,
1609 name: []const u8,
1610 source: []const u8,
1611 expected_lines: []const []const u8,
1612 ) void {
1613 const tc = self.create(false, "source.c", name, source, expected_lines);
1614 self.addCase(tc);
1615 }
1616
1607 pub fn add_both(1617 pub fn add_both(
1608 self: *TranslateCContext,1618 self: *TranslateCContext,
1609 name: []const u8,1619 name: []const u8,
...@@ -1617,6 +1627,19 @@ pub const TranslateCContext = struct {...@@ -1617,6 +1627,19 @@ pub const TranslateCContext = struct {
1617 }1627 }
1618 }1628 }
16191629
1630 pub fn addC_both(
1631 self: *TranslateCContext,
1632 name: []const u8,
1633 source: []const u8,
1634 expected_lines: []const []const u8,
1635 ) void {
1636 for ([_]bool{ false, true }) |stage2| {
1637 const tc = self.create(false, "source.c", name, source, expected_lines);
1638 tc.stage2 = stage2;
1639 self.addCase(tc);
1640 }
1641 }
1642
1620 pub fn add_2(1643 pub fn add_2(
1621 self: *TranslateCContext,1644 self: *TranslateCContext,
1622 name: []const u8,1645 name: []const u8,
test/translate_c.zig+75-73
...@@ -1,9 +1,11 @@...@@ -1,9 +1,11 @@
1const tests = @import("tests.zig");1const tests = @import("tests.zig");
2const builtin = @import("builtin");2const builtin = @import("builtin");
33
4// add_both - test for stage1 and stage24// add_both - test for stage1 and stage2, in #include mode
5// add - test stage1 only5// add - test stage1 only, in #include mode
6// add_2 - test stage2 only6// add_2 - test stage2 only
7// addC_both - test for stage1 and stage2, in -c mode
8// addC - test stage1 only, in -c mode
79
8pub fn addCases(cases: *tests.TranslateCContext) void {10pub fn addCases(cases: *tests.TranslateCContext) void {
9 /////////////// Cases that pass for both stage1/stage2 ////////////////11 /////////////// Cases that pass for both stage1/stage2 ////////////////
...@@ -15,7 +17,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -15,7 +17,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
15 \\pub extern fn bar() c_int;17 \\pub extern fn bar() c_int;
16 });18 });
1719
18 cases.add_both("simple var decls",20 cases.addC_both("simple var decls",
19 \\void foo(void) {21 \\void foo(void) {
20 \\ int a;22 \\ int a;
21 \\ char b = 123;23 \\ char b = 123;
...@@ -31,7 +33,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -31,7 +33,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
31 \\}33 \\}
32 });34 });
3335
34 cases.add_both("ignore result, explicit function arguments",36 cases.addC_both("ignore result, explicit function arguments",
35 \\void foo(void) {37 \\void foo(void) {
36 \\ int a;38 \\ int a;
37 \\ 1;39 \\ 1;
...@@ -51,7 +53,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -51,7 +53,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
51 \\}53 \\}
52 });54 });
5355
54 cases.add_both("variables",56 cases.addC_both("variables",
55 \\extern int extern_var;57 \\extern int extern_var;
56 \\static const int int_var = 13;58 \\static const int int_var = 13;
57 , &[_][]const u8{59 , &[_][]const u8{
...@@ -66,7 +68,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -66,7 +68,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
66 \\pub var v0: [*c]const u8 = "0.0.0";68 \\pub var v0: [*c]const u8 = "0.0.0";
67 });69 });
6870
69 cases.add_both("static incomplete array inside function",71 cases.addC_both("static incomplete array inside function",
70 \\void foo(void) {72 \\void foo(void) {
71 \\ static const char v2[] = "2.2.2";73 \\ static const char v2[] = "2.2.2";
72 \\}74 \\}
...@@ -76,7 +78,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -76,7 +78,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
76 \\}78 \\}
77 });79 });
7880
79 cases.add_both("simple function definition",81 cases.addC_both("simple function definition",
80 \\void foo(void) {}82 \\void foo(void) {}
81 \\static void bar(void) {}83 \\static void bar(void) {}
82 , &[_][]const u8{84 , &[_][]const u8{
...@@ -104,7 +106,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -104,7 +106,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
104 \\pub const baz = c_int;106 \\pub const baz = c_int;
105 });107 });
106108
107 cases.add_both("casting pointers to ints and ints to pointers",109 cases.addC_both("casting pointers to ints and ints to pointers",
108 \\void foo(void);110 \\void foo(void);
109 \\void bar(void) {111 \\void bar(void) {
110 \\ void *func_ptr = foo;112 \\ void *func_ptr = foo;
...@@ -124,7 +126,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -124,7 +126,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
124 \\pub extern fn foo() noreturn;126 \\pub extern fn foo() noreturn;
125 });127 });
126128
127 cases.add_both("add, sub, mul, div, rem",129 cases.addC_both("add, sub, mul, div, rem",
128 \\int s(int a, int b) {130 \\int s(int a, int b) {
129 \\ int c;131 \\ int c;
130 \\ c = a + b;132 \\ c = a + b;
...@@ -284,7 +286,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -284,7 +286,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
284 \\ __PRETTY_FUNCTION__;286 \\ __PRETTY_FUNCTION__;
285 \\}287 \\}
286 , &[_][]const u8{288 , &[_][]const u8{
287 \\pub export fn foo() void {289 \\pub fn foo() void {
288 \\ _ = "foo";290 \\ _ = "foo";
289 \\ _ = "foo";291 \\ _ = "foo";
290 \\ _ = "void foo(void)";292 \\ _ = "void foo(void)";
...@@ -301,7 +303,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -301,7 +303,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
301 \\ a = 1;303 \\ a = 1;
302 \\}304 \\}
303 , &[_][]const u8{305 , &[_][]const u8{
304 \\pub export fn foo() void {306 \\pub fn foo() void {
305 \\ var a: c_int = undefined;307 \\ var a: c_int = undefined;
306 \\ _ = 1;308 \\ _ = 1;
307 \\ _ = "hey";309 \\ _ = "hey";
...@@ -316,7 +318,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -316,7 +318,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
316 \\ for (int x = 0; x < 10; x++);318 \\ for (int x = 0; x < 10; x++);
317 \\}319 \\}
318 , &[_][]const u8{320 , &[_][]const u8{
319 \\pub export fn foo() void {321 \\pub fn foo() void {
320 \\ {322 \\ {
321 \\ var x: c_int = 0;323 \\ var x: c_int = 0;
322 \\ while (x < 10) : (x += 1) {}324 \\ while (x < 10) : (x += 1) {}
...@@ -329,7 +331,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -329,7 +331,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
329 \\ do ; while (1);331 \\ do ; while (1);
330 \\}332 \\}
331 , &[_][]const u8{ // TODO this should be if (1 != 0) break333 , &[_][]const u8{ // TODO this should be if (1 != 0) break
332 \\pub export fn foo() void {334 \\pub fn foo() void {
333 \\ while (true) {335 \\ while (true) {
334 \\ {}336 \\ {}
335 \\ if (!1) break;337 \\ if (!1) break;
...@@ -342,7 +344,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -342,7 +344,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
342 \\ for (;;);344 \\ for (;;);
343 \\}345 \\}
344 , &[_][]const u8{346 , &[_][]const u8{
345 \\pub export fn foo() void {347 \\pub fn foo() void {
346 \\ while (true) {}348 \\ while (true) {}
347 \\}349 \\}
348 });350 });
...@@ -352,7 +354,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -352,7 +354,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
352 \\ while (1);354 \\ while (1);
353 \\}355 \\}
354 , &[_][]const u8{356 , &[_][]const u8{
355 \\pub export fn foo() void {357 \\pub fn foo() void {
356 \\ while (1 != 0) {}358 \\ while (1 != 0) {}
357 \\}359 \\}
358 });360 });
...@@ -392,7 +394,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -392,7 +394,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
392 \\pub extern fn baz(a: i8, b: i16, c: i32, d: i64) void;394 \\pub extern fn baz(a: i8, b: i16, c: i32, d: i64) void;
393 });395 });
394396
395 cases.add("simple function",397 cases.addC("simple function",
396 \\int abs(int a) {398 \\int abs(int a) {
397 \\ return a < 0 ? -a : a;399 \\ return a < 0 ? -a : a;
398 \\}400 \\}
...@@ -690,7 +692,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -690,7 +692,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
690 \\pub const LUA_GLOBALSINDEX = -10002;692 \\pub const LUA_GLOBALSINDEX = -10002;
691 });693 });
692694
693 cases.add("post increment",695 cases.addC("post increment",
694 \\unsigned foo1(unsigned a) {696 \\unsigned foo1(unsigned a) {
695 \\ a++;697 \\ a++;
696 \\ return a;698 \\ return a;
...@@ -712,7 +714,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -712,7 +714,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
712 \\}714 \\}
713 });715 });
714716
715 cases.add("shift right assign",717 cases.addC("shift right assign",
716 \\int log2(unsigned a) {718 \\int log2(unsigned a) {
717 \\ int i = 0;719 \\ int i = 0;
718 \\ while (a > 0) {720 \\ while (a > 0) {
...@@ -731,7 +733,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -731,7 +733,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
731 \\}733 \\}
732 });734 });
733735
734 cases.add("if statement",736 cases.addC("if statement",
735 \\int max(int a, int b) {737 \\int max(int a, int b) {
736 \\ if (a < b)738 \\ if (a < b)
737 \\ return b;739 \\ return b;
...@@ -751,7 +753,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -751,7 +753,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
751 \\}753 \\}
752 });754 });
753755
754 cases.add("==, !=",756 cases.addC("==, !=",
755 \\int max(int a, int b) {757 \\int max(int a, int b) {
756 \\ if (a == b)758 \\ if (a == b)
757 \\ return a;759 \\ return a;
...@@ -767,7 +769,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -767,7 +769,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
767 \\}769 \\}
768 });770 });
769771
770 cases.add("bitwise binary operators",772 cases.addC("bitwise binary operators",
771 \\int max(int a, int b) {773 \\int max(int a, int b) {
772 \\ return (a & b) ^ (a | b);774 \\ return (a & b) ^ (a | b);
773 \\}775 \\}
...@@ -777,7 +779,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -777,7 +779,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
777 \\}779 \\}
778 });780 });
779781
780 cases.add("logical and, logical or",782 cases.addC("logical and, logical or",
781 \\int max(int a, int b) {783 \\int max(int a, int b) {
782 \\ if (a < b || a == b)784 \\ if (a < b || a == b)
783 \\ return b;785 \\ return b;
...@@ -793,7 +795,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -793,7 +795,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
793 \\}795 \\}
794 });796 });
795797
796 cases.add("logical and, logical or on none bool values",798 cases.addC("logical and, logical or on none bool values",
797 \\int and_or_none_bool(int a, float b, void *c) {799 \\int and_or_none_bool(int a, float b, void *c) {
798 \\ if (a && b) return 0;800 \\ if (a && b) return 0;
799 \\ if (b && c) return 1;801 \\ if (b && c) return 1;
...@@ -815,7 +817,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -815,7 +817,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
815 \\}817 \\}
816 });818 });
817819
818 cases.add("assign",820 cases.addC("assign",
819 \\int max(int a) {821 \\int max(int a) {
820 \\ int tmp;822 \\ int tmp;
821 \\ tmp = a;823 \\ tmp = a;
...@@ -830,7 +832,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -830,7 +832,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
830 \\}832 \\}
831 });833 });
832834
833 cases.add("chaining assign",835 cases.addC("chaining assign",
834 \\void max(int a) {836 \\void max(int a) {
835 \\ int b, c;837 \\ int b, c;
836 \\ c = b = a;838 \\ c = b = a;
...@@ -847,7 +849,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -847,7 +849,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
847 \\}849 \\}
848 });850 });
849851
850 cases.add("shift right assign with a fixed size type",852 cases.addC("shift right assign with a fixed size type",
851 \\#include <stdint.h>853 \\#include <stdint.h>
852 \\int log2(uint32_t a) {854 \\int log2(uint32_t a) {
853 \\ int i = 0;855 \\ int i = 0;
...@@ -877,7 +879,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -877,7 +879,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
877 \\pub const Two = 1;879 \\pub const Two = 1;
878 });880 });
879881
880 cases.add("function call",882 cases.addC("function call",
881 \\static void bar(void) { }883 \\static void bar(void) { }
882 \\static int baz(void) { return 0; }884 \\static int baz(void) { return 0; }
883 \\void foo(void) {885 \\void foo(void) {
...@@ -895,7 +897,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -895,7 +897,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
895 \\}897 \\}
896 });898 });
897899
898 cases.add("field access expression",900 cases.addC("field access expression",
899 \\struct Foo {901 \\struct Foo {
900 \\ int field;902 \\ int field;
901 \\};903 \\};
...@@ -911,7 +913,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -911,7 +913,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
911 \\}913 \\}
912 });914 });
913915
914 cases.add("null statements",916 cases.addC("null statements",
915 \\void foo(void) {917 \\void foo(void) {
916 \\ ;;;;;918 \\ ;;;;;
917 \\}919 \\}
...@@ -931,7 +933,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -931,7 +933,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
931 \\pub var array: [100]c_int = undefined;933 \\pub var array: [100]c_int = undefined;
932 });934 });
933935
934 cases.add("array access",936 cases.addC("array access",
935 \\int array[100];937 \\int array[100];
936 \\int foo(int index) {938 \\int foo(int index) {
937 \\ return array[index];939 \\ return array[index];
...@@ -943,7 +945,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -943,7 +945,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
943 \\}945 \\}
944 });946 });
945947
946 cases.add("c style cast",948 cases.addC("c style cast",
947 \\int float_to_int(float a) {949 \\int float_to_int(float a) {
948 \\ return (int)a;950 \\ return (int)a;
949 \\}951 \\}
...@@ -953,7 +955,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -953,7 +955,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
953 \\}955 \\}
954 });956 });
955957
956 cases.add("void cast",958 cases.addC("void cast",
957 \\void foo(int a) {959 \\void foo(int a) {
958 \\ (void) a;960 \\ (void) a;
959 \\}961 \\}
...@@ -963,7 +965,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -963,7 +965,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
963 \\}965 \\}
964 });966 });
965967
966 cases.add("implicit cast to void *",968 cases.addC("implicit cast to void *",
967 \\void *foo(unsigned short *x) {969 \\void *foo(unsigned short *x) {
968 \\ return x;970 \\ return x;
969 \\}971 \\}
...@@ -973,7 +975,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -973,7 +975,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
973 \\}975 \\}
974 });976 });
975977
976 cases.add("sizeof",978 cases.addC("sizeof",
977 \\#include <stddef.h>979 \\#include <stddef.h>
978 \\size_t size_of(void) {980 \\size_t size_of(void) {
979 \\ return sizeof(int);981 \\ return sizeof(int);
...@@ -984,7 +986,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -984,7 +986,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
984 \\}986 \\}
985 });987 });
986988
987 cases.add("null pointer implicit cast",989 cases.addC("null pointer implicit cast",
988 \\int* foo(void) {990 \\int* foo(void) {
989 \\ return 0;991 \\ return 0;
990 \\}992 \\}
...@@ -994,7 +996,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -994,7 +996,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
994 \\}996 \\}
995 });997 });
996998
997 cases.add("comma operator",999 cases.addC("comma operator",
998 \\int foo(void) {1000 \\int foo(void) {
999 \\ return 1, 2;1001 \\ return 1, 2;
1000 \\}1002 \\}
...@@ -1007,7 +1009,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1007,7 +1009,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1007 \\}1009 \\}
1008 });1010 });
10091011
1010 cases.add("statement expression",1012 cases.addC("statement expression",
1011 \\int foo(void) {1013 \\int foo(void) {
1012 \\ return ({1014 \\ return ({
1013 \\ int a = 1;1015 \\ int a = 1;
...@@ -1023,7 +1025,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1023,7 +1025,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1023 \\}1025 \\}
1024 });1026 });
10251027
1026 cases.add("__extension__ cast",1028 cases.addC("__extension__ cast",
1027 \\int foo(void) {1029 \\int foo(void) {
1028 \\ return __extension__ 1;1030 \\ return __extension__ 1;
1029 \\}1031 \\}
...@@ -1033,7 +1035,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1033,7 +1035,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1033 \\}1035 \\}
1034 });1036 });
10351037
1036 cases.add("bitshift",1038 cases.addC("bitshift",
1037 \\int foo(void) {1039 \\int foo(void) {
1038 \\ return (1 << 2) >> 1;1040 \\ return (1 << 2) >> 1;
1039 \\}1041 \\}
...@@ -1043,7 +1045,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1043,7 +1045,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1043 \\}1045 \\}
1044 });1046 });
10451047
1046 cases.add("compound assignment operators",1048 cases.addC("compound assignment operators",
1047 \\void foo(void) {1049 \\void foo(void) {
1048 \\ int a = 0;1050 \\ int a = 0;
1049 \\ a += (a += 1);1051 \\ a += (a += 1);
...@@ -1101,7 +1103,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1101,7 +1103,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1101 \\}1103 \\}
1102 });1104 });
11031105
1104 cases.add("compound assignment operators unsigned",1106 cases.addC("compound assignment operators unsigned",
1105 \\void foo(void) {1107 \\void foo(void) {
1106 \\ unsigned a = 0;1108 \\ unsigned a = 0;
1107 \\ a += (a += 1);1109 \\ a += (a += 1);
...@@ -1159,7 +1161,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1159,7 +1161,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1159 \\}1161 \\}
1160 });1162 });
11611163
1162 cases.add("post increment/decrement",1164 cases.addC("post increment/decrement",
1163 \\void foo(void) {1165 \\void foo(void) {
1164 \\ int i = 0;1166 \\ int i = 0;
1165 \\ unsigned u = 0;1167 \\ unsigned u = 0;
...@@ -1207,7 +1209,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1207,7 +1209,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1207 \\}1209 \\}
1208 });1210 });
12091211
1210 cases.add("pre increment/decrement",1212 cases.addC("pre increment/decrement",
1211 \\void foo(void) {1213 \\void foo(void) {
1212 \\ int i = 0;1214 \\ int i = 0;
1213 \\ unsigned u = 0;1215 \\ unsigned u = 0;
...@@ -1251,7 +1253,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1251,7 +1253,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1251 \\}1253 \\}
1252 });1254 });
12531255
1254 cases.add("do loop",1256 cases.addC("do loop",
1255 \\void foo(void) {1257 \\void foo(void) {
1256 \\ int a = 2;1258 \\ int a = 2;
1257 \\ do {1259 \\ do {
...@@ -1278,7 +1280,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1278,7 +1280,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1278 \\}1280 \\}
1279 });1281 });
12801282
1281 cases.add("deref function pointer",1283 cases.addC("deref function pointer",
1282 \\void foo(void) {}1284 \\void foo(void) {}
1283 \\int baz(void) { return 0; }1285 \\int baz(void) { return 0; }
1284 \\void bar(void) {1286 \\void bar(void) {
...@@ -1308,7 +1310,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1308,7 +1310,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1308 \\}1310 \\}
1309 });1311 });
13101312
1311 cases.add("normal deref",1313 cases.addC("normal deref",
1312 \\void foo(int *x) {1314 \\void foo(int *x) {
1313 \\ *x = 1;1315 \\ *x = 1;
1314 \\}1316 \\}
...@@ -1339,7 +1341,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1339,7 +1341,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1339 \\ return *ptr;1341 \\ return *ptr;
1340 \\}1342 \\}
1341 , &[_][]const u8{1343 , &[_][]const u8{
1342 \\pub export fn foo() c_int {1344 \\pub fn foo() c_int {
1343 \\ var x: c_int = 1234;1345 \\ var x: c_int = 1234;
1344 \\ var ptr: [*c]c_int = &x;1346 \\ var ptr: [*c]c_int = &x;
1345 \\ return ptr.?.*;1347 \\ return ptr.?.*;
...@@ -1351,7 +1353,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1351,7 +1353,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1351 \\ return "bar";1353 \\ return "bar";
1352 \\}1354 \\}
1353 , &[_][]const u8{1355 , &[_][]const u8{
1354 \\pub export fn foo() [*c]const u8 {1356 \\pub fn foo() [*c]const u8 {
1355 \\ return "bar";1357 \\ return "bar";
1356 \\}1358 \\}
1357 });1359 });
...@@ -1361,7 +1363,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1361,7 +1363,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1361 \\ return;1363 \\ return;
1362 \\}1364 \\}
1363 , &[_][]const u8{1365 , &[_][]const u8{
1364 \\pub export fn foo() void {1366 \\pub fn foo() void {
1365 \\ return;1367 \\ return;
1366 \\}1368 \\}
1367 });1369 });
...@@ -1371,7 +1373,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1371,7 +1373,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1371 \\ for (int i = 0; i < 10; i += 1) { }1373 \\ for (int i = 0; i < 10; i += 1) { }
1372 \\}1374 \\}
1373 , &[_][]const u8{1375 , &[_][]const u8{
1374 \\pub export fn foo() void {1376 \\pub fn foo() void {
1375 \\ {1377 \\ {
1376 \\ var i: c_int = 0;1378 \\ var i: c_int = 0;
1377 \\ while (i < 10) : (i += 1) {}1379 \\ while (i < 10) : (i += 1) {}
...@@ -1384,7 +1386,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1384,7 +1386,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1384 \\ for (;;) { }1386 \\ for (;;) { }
1385 \\}1387 \\}
1386 , &[_][]const u8{1388 , &[_][]const u8{
1387 \\pub export fn foo() void {1389 \\pub fn foo() void {
1388 \\ while (true) {}1390 \\ while (true) {}
1389 \\}1391 \\}
1390 });1392 });
...@@ -1396,7 +1398,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1396,7 +1398,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1396 \\ }1398 \\ }
1397 \\}1399 \\}
1398 , &[_][]const u8{1400 , &[_][]const u8{
1399 \\pub export fn foo() void {1401 \\pub fn foo() void {
1400 \\ while (true) {1402 \\ while (true) {
1401 \\ break;1403 \\ break;
1402 \\ }1404 \\ }
...@@ -1410,7 +1412,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1410,7 +1412,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1410 \\ }1412 \\ }
1411 \\}1413 \\}
1412 , &[_][]const u8{1414 , &[_][]const u8{
1413 \\pub export fn foo() void {1415 \\pub fn foo() void {
1414 \\ while (true) {1416 \\ while (true) {
1415 \\ continue;1417 \\ continue;
1416 \\ }1418 \\ }
...@@ -1465,7 +1467,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1465,7 +1467,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1465 \\ return x;1467 \\ return x;
1466 \\}1468 \\}
1467 , &[_][]const u8{1469 , &[_][]const u8{
1468 \\pub export fn foo() c_int {1470 \\pub fn foo() c_int {
1469 \\ var x: c_int = 1;1471 \\ var x: c_int = 1;
1470 \\ {1472 \\ {
1471 \\ var x_0: c_int = 2;1473 \\ var x_0: c_int = 2;
...@@ -1490,7 +1492,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1490,7 +1492,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1490 \\ return ~x;1492 \\ return ~x;
1491 \\}1493 \\}
1492 , &[_][]const u8{1494 , &[_][]const u8{
1493 \\pub export fn foo(x: c_int) c_int {1495 \\pub fn foo(x: c_int) c_int {
1494 \\ return ~x;1496 \\ return ~x;
1495 \\}1497 \\}
1496 });1498 });
...@@ -1503,7 +1505,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1503,7 +1505,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1503 \\ return !c;1505 \\ return !c;
1504 \\}1506 \\}
1505 , &[_][]const u8{1507 , &[_][]const u8{
1506 \\pub export fn foo(a: c_int, b: f32, c: ?*c_void) c_int {1508 \\pub fn foo(a: c_int, b: f32, c: ?*c_void) c_int {
1507 \\ return !(a == 0);1509 \\ return !(a == 0);
1508 \\ return !(a != 0);1510 \\ return !(a != 0);
1509 \\ return !(b != 0);1511 \\ return !(b != 0);
...@@ -1516,7 +1518,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1516,7 +1518,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1516 \\ return u32;1518 \\ return u32;
1517 \\}1519 \\}
1518 , &[_][]const u8{1520 , &[_][]const u8{
1519 \\pub export fn foo(u32_0: c_int) c_int {1521 \\pub fn foo(u32_0: c_int) c_int {
1520 \\ return u32_0;1522 \\ return u32_0;
1521 \\}1523 \\}
1522 });1524 });
...@@ -1545,7 +1547,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1545,7 +1547,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1545 \\ B,1547 \\ B,
1546 \\ C,1548 \\ C,
1547 \\};1549 \\};
1548 \\pub export fn if_none_bool(a: c_int, b: f32, c: ?*c_void, d: enum_SomeEnum) c_int {1550 \\pub fn if_none_bool(a: c_int, b: f32, c: ?*c_void, d: enum_SomeEnum) c_int {
1549 \\ if (a != 0) return 0;1551 \\ if (a != 0) return 0;
1550 \\ if (b != 0) return 1;1552 \\ if (b != 0) return 1;
1551 \\ if (c != null) return 2;1553 \\ if (c != null) return 2;
...@@ -1562,7 +1564,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1562,7 +1564,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1562 \\ return 3;1564 \\ return 3;
1563 \\}1565 \\}
1564 , &[_][]const u8{1566 , &[_][]const u8{
1565 \\pub export fn while_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {1567 \\pub fn while_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {
1566 \\ while (a != 0) return 0;1568 \\ while (a != 0) return 0;
1567 \\ while (b != 0) return 1;1569 \\ while (b != 0) return 1;
1568 \\ while (c != null) return 2;1570 \\ while (c != null) return 2;
...@@ -1578,7 +1580,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1578,7 +1580,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1578 \\ return 3;1580 \\ return 3;
1579 \\}1581 \\}
1580 , &[_][]const u8{1582 , &[_][]const u8{
1581 \\pub export fn for_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {1583 \\pub fn for_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {
1582 \\ while (a != 0) return 0;1584 \\ while (a != 0) return 0;
1583 \\ while (b != 0) return 1;1585 \\ while (b != 0) return 1;
1584 \\ while (c != null) return 2;1586 \\ while (c != null) return 2;
...@@ -1602,7 +1604,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1602,7 +1604,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1602 \\ }1604 \\ }
1603 \\}1605 \\}
1604 , &[_][]const u8{1606 , &[_][]const u8{
1605 \\pub export fn switch_fn(i: c_int) c_int {1607 \\pub fn switch_fn(i: c_int) c_int {
1606 \\ var res: c_int = 0;1608 \\ var res: c_int = 0;
1607 \\ __switch: {1609 \\ __switch: {
1608 \\ __case_2: {1610 \\ __case_2: {
...@@ -1628,7 +1630,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1628,7 +1630,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1628 \\}1630 \\}
1629 });1631 });
16301632
1631 cases.add(1633 cases.addC(
1632 "u integer suffix after 0 (zero) in macro definition",1634 "u integer suffix after 0 (zero) in macro definition",
1633 "#define ZERO 0U",1635 "#define ZERO 0U",
1634 &[_][]const u8{1636 &[_][]const u8{
...@@ -1636,7 +1638,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1636,7 +1638,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1636 },1638 },
1637 );1639 );
16381640
1639 cases.add(1641 cases.addC(
1640 "l integer suffix after 0 (zero) in macro definition",1642 "l integer suffix after 0 (zero) in macro definition",
1641 "#define ZERO 0L",1643 "#define ZERO 0L",
1642 &[_][]const u8{1644 &[_][]const u8{
...@@ -1644,7 +1646,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1644,7 +1646,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1644 },1646 },
1645 );1647 );
16461648
1647 cases.add(1649 cases.addC(
1648 "ul integer suffix after 0 (zero) in macro definition",1650 "ul integer suffix after 0 (zero) in macro definition",
1649 "#define ZERO 0UL",1651 "#define ZERO 0UL",
1650 &[_][]const u8{1652 &[_][]const u8{
...@@ -1652,7 +1654,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1652,7 +1654,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1652 },1654 },
1653 );1655 );
16541656
1655 cases.add(1657 cases.addC(
1656 "lu integer suffix after 0 (zero) in macro definition",1658 "lu integer suffix after 0 (zero) in macro definition",
1657 "#define ZERO 0LU",1659 "#define ZERO 0LU",
1658 &[_][]const u8{1660 &[_][]const u8{
...@@ -1660,7 +1662,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1660,7 +1662,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1660 },1662 },
1661 );1663 );
16621664
1663 cases.add(1665 cases.addC(
1664 "ll integer suffix after 0 (zero) in macro definition",1666 "ll integer suffix after 0 (zero) in macro definition",
1665 "#define ZERO 0LL",1667 "#define ZERO 0LL",
1666 &[_][]const u8{1668 &[_][]const u8{
...@@ -1668,7 +1670,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1668,7 +1670,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1668 },1670 },
1669 );1671 );
16701672
1671 cases.add(1673 cases.addC(
1672 "ull integer suffix after 0 (zero) in macro definition",1674 "ull integer suffix after 0 (zero) in macro definition",
1673 "#define ZERO 0ULL",1675 "#define ZERO 0ULL",
1674 &[_][]const u8{1676 &[_][]const u8{
...@@ -1676,7 +1678,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1676,7 +1678,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1676 },1678 },
1677 );1679 );
16781680
1679 cases.add(1681 cases.addC(
1680 "llu integer suffix after 0 (zero) in macro definition",1682 "llu integer suffix after 0 (zero) in macro definition",
1681 "#define ZERO 0LLU",1683 "#define ZERO 0LLU",
1682 &[_][]const u8{1684 &[_][]const u8{
...@@ -1684,7 +1686,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1684,7 +1686,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1684 },1686 },
1685 );1687 );
16861688
1687 cases.add(1689 cases.addC(
1688 "bitwise not on u-suffixed 0 (zero) in macro definition",1690 "bitwise not on u-suffixed 0 (zero) in macro definition",
1689 "#define NOT_ZERO (~0U)",1691 "#define NOT_ZERO (~0U)",
1690 &[_][]const u8{1692 &[_][]const u8{
...@@ -1692,7 +1694,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1692,7 +1694,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1692 },1694 },
1693 );1695 );
16941696
1695 cases.add("implicit casts",1697 cases.addC("implicit casts",
1696 \\#include <stdbool.h>1698 \\#include <stdbool.h>
1697 \\1699 \\
1698 \\void fn_int(int x);1700 \\void fn_int(int x);
...@@ -1747,7 +1749,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1747,7 +1749,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1747 \\}1749 \\}
1748 });1750 });
17491751
1750 cases.add("pointer conversion with different alignment",1752 cases.addC("pointer conversion with different alignment",
1751 \\void test_ptr_cast() {1753 \\void test_ptr_cast() {
1752 \\ void *p;1754 \\ void *p;
1753 \\ {1755 \\ {
...@@ -1781,7 +1783,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1781,7 +1783,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1781 \\}1783 \\}
1782 });1784 });
17831785
1784 cases.add("escape sequences",1786 cases.addC("escape sequences",
1785 \\const char *escapes() {1787 \\const char *escapes() {
1786 \\char a = '\'',1788 \\char a = '\'',
1787 \\ b = '\\',1789 \\ b = '\\',
...@@ -1825,7 +1827,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1825,7 +1827,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1825 }1827 }
18261828
1827 /////////////// Cases for only stage1 because stage2 behavior is better ////////////////1829 /////////////// Cases for only stage1 because stage2 behavior is better ////////////////
1828 cases.add("Parameterless function prototypes",1830 cases.addC("Parameterless function prototypes",
1829 \\void foo() {}1831 \\void foo() {}
1830 \\void bar(void) {}1832 \\void bar(void) {}
1831 , &[_][]const u8{1833 , &[_][]const u8{