authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-03-15 19:11:46+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-03-15 19:11:46+01:00
log5ae400fb393b4a7fb4af15b89a4101de9255b26d
tree131a0c614e32b59babb8cee443d3829652a9bd75
parenta77b2a0810bd835aa1adcfc18d32bc66ba8f1914

fixed void cast and added the last tests


2 files changed, 59 insertions(+), 10 deletions(-)

src/translate_c.cpp+5-1
......@@ -2784,7 +2784,11 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
27842784 if (sub_expr_node == nullptr)
27852785 return nullptr;
27862786
2787 return trans_c_cast(c, stmt->getLocStart(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
2787 AstNode *cast = trans_c_cast(c, stmt->getLocStart(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
2788 if (cast == nullptr)
2789 return nullptr;
2790
2791 return maybe_suppress_result(c, result_used, cast);
27882792}
27892793
27902794static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, TransScope *scope,
test/translate_c.zig+54-9
......@@ -59,7 +59,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
5959 );
6060 }
6161
62 cases.add("for loop with var init but empty body",
62 cases.add("predefined expressions",
6363 \\void foo(void) {
6464 \\ __func__;
6565 \\ __FUNCTION__;
......@@ -526,11 +526,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
526526 \\ return b;
527527 \\ else
528528 \\ return a;
529 \\
530 \\ if (a < b) ; else ;
529531 \\}
530532 ,
531533 \\pub export fn max(a: c_int, b: c_int) c_int {
532534 \\ if (a < b) return b;
533535 \\ if (a < b) return b else return a;
536 \\ if (a < b) {} else {}
534537 \\}
535538 );
536539
......@@ -772,6 +775,16 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
772775 \\}
773776 );
774777
778 cases.addC("void cast",
779 \\void foo(int a) {
780 \\ (void) a;
781 \\}
782 ,
783 \\pub export fn foo(a: c_int) void {
784 \\ _ = a;
785 \\}
786 );
787
775788 cases.addC("implicit cast to void *",
776789 \\void *foo(unsigned short *x) {
777790 \\ return x;
......@@ -1472,21 +1485,53 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
14721485 \\pub export fn bar() void {}
14731486 );
14741487
1475 cases.addC("u integer suffix after 0 (zero) in macro definition", "#define ZERO 0U", "pub const ZERO = c_uint(0);");
1488 cases.addC(
1489 "u integer suffix after 0 (zero) in macro definition",
1490 "#define ZERO 0U",
1491 "pub const ZERO = c_uint(0);",
1492 );
14761493
1477 cases.addC("l integer suffix after 0 (zero) in macro definition", "#define ZERO 0L", "pub const ZERO = c_long(0);");
1494 cases.addC(
1495 "l integer suffix after 0 (zero) in macro definition",
1496 "#define ZERO 0L",
1497 "pub const ZERO = c_long(0);",
1498 );
14781499
1479 cases.addC("ul integer suffix after 0 (zero) in macro definition", "#define ZERO 0UL", "pub const ZERO = c_ulong(0);");
1500 cases.addC(
1501 "ul integer suffix after 0 (zero) in macro definition",
1502 "#define ZERO 0UL",
1503 "pub const ZERO = c_ulong(0);",
1504 );
14801505
1481 cases.addC("lu integer suffix after 0 (zero) in macro definition", "#define ZERO 0LU", "pub const ZERO = c_ulong(0);");
1506 cases.addC(
1507 "lu integer suffix after 0 (zero) in macro definition",
1508 "#define ZERO 0LU",
1509 "pub const ZERO = c_ulong(0);",
1510 );
14821511
1483 cases.addC("ll integer suffix after 0 (zero) in macro definition", "#define ZERO 0LL", "pub const ZERO = c_longlong(0);");
1512 cases.addC(
1513 "ll integer suffix after 0 (zero) in macro definition",
1514 "#define ZERO 0LL",
1515 "pub const ZERO = c_longlong(0);",
1516 );
14841517
1485 cases.addC("ull integer suffix after 0 (zero) in macro definition", "#define ZERO 0ULL", "pub const ZERO = c_ulonglong(0);");
1518 cases.addC(
1519 "ull integer suffix after 0 (zero) in macro definition",
1520 "#define ZERO 0ULL",
1521 "pub const ZERO = c_ulonglong(0);",
1522 );
14861523
1487 cases.addC("llu integer suffix after 0 (zero) in macro definition", "#define ZERO 0LLU", "pub const ZERO = c_ulonglong(0);");
1524 cases.addC(
1525 "llu integer suffix after 0 (zero) in macro definition",
1526 "#define ZERO 0LLU",
1527 "pub const ZERO = c_ulonglong(0);",
1528 );
14881529
1489 cases.addC("bitwise not on u-suffixed 0 (zero) in macro definition", "#define NOT_ZERO (~0U)", "pub const NOT_ZERO = ~c_uint(0);");
1530 cases.addC(
1531 "bitwise not on u-suffixed 0 (zero) in macro definition",
1532 "#define NOT_ZERO (~0U)",
1533 "pub const NOT_ZERO = ~c_uint(0);",
1534 );
14901535
14911536 // cases.add("empty array with initializer",
14921537 // "int a[4] = {};"