authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-08 19:21:54-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-08 19:21:54-04:00
loge3542196c0b0121fb52d9af599b549cf490e47a8
tree52cf53f210e547b5e96f441a80fe5be8bd8d034e
parent9c12237d2d0643fcf34ad6d027ce78d285e40271
signaturelock-open Commit is signed but in an unrecognized format.

translate-c: NULL pointers translate to `null`

See #1967

2 files changed, 15 insertions(+), 16 deletions(-)

src/translate_c.cpp+3-4
......@@ -1914,7 +1914,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
19141914 return trans_c_cast(c, bitcast(stmt->getBeginLoc()), dest_type, src_type, target_node);
19151915 }
19161916 case ZigClangCK_NullToPointer:
1917 return trans_create_node_unsigned(c, 0);
1917 return trans_create_node(c, NodeTypeNullLiteral);
19181918 case ZigClangCK_NoOp:
19191919 return trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
19201920 case ZigClangCK_Dependent:
......@@ -2721,7 +2721,7 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
27212721 return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq, trans_create_node_unsigned_negative(c, 0, false));
27222722 case clang::BuiltinType::NullPtr:
27232723 return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq,
2724 trans_create_node_unsigned(c, 0));
2724 trans_create_node(c, NodeTypeNullLiteral));
27252725
27262726 case clang::BuiltinType::Void:
27272727 case clang::BuiltinType::Half:
......@@ -2818,8 +2818,7 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
28182818 break;
28192819 }
28202820 case ZigClangType_Pointer:
2821 return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq,
2822 trans_create_node_unsigned(c, 0));
2821 return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq, trans_create_node(c, NodeTypeNullLiteral));
28232822
28242823 case ZigClangType_Typedef:
28252824 {
test/translate_c.zig+12-12
......@@ -72,7 +72,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
7272 \\ _ = c"void foo(void)";
7373 \\}
7474 );
75
75
7676 cases.add("ignore result",
7777 \\void foo() {
7878 \\ int a;
......@@ -648,11 +648,11 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
648648 ,
649649 \\pub export fn and_or_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {
650650 \\ if ((a != 0) and (b != 0)) return 0;
651 \\ if ((b != 0) and (c != 0)) return 1;
652 \\ if ((a != 0) and (c != 0)) return 2;
651 \\ if ((b != 0) and (c != null)) return 1;
652 \\ if ((a != 0) and (c != null)) return 2;
653653 \\ if ((a != 0) or (b != 0)) return 3;
654 \\ if ((b != 0) or (c != 0)) return 4;
655 \\ if ((a != 0) or (c != 0)) return 5;
654 \\ if ((b != 0) or (c != null)) return 4;
655 \\ if ((a != 0) or (c != null)) return 5;
656656 \\ return 6;
657657 \\}
658658 );
......@@ -832,7 +832,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
832832 \\}
833833 ,
834834 \\pub export fn foo() [*c]c_int {
835 \\ return 0;
835 \\ return null;
836836 \\}
837837 );
838838
......@@ -1360,7 +1360,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
13601360 \\ return !(a == 0);
13611361 \\ return !(a != 0);
13621362 \\ return !(b != 0);
1363 \\ return !(c != 0);
1363 \\ return !(c != null);
13641364 \\}
13651365 );
13661366
......@@ -1417,7 +1417,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
14171417 \\pub fn if_none_bool(a: c_int, b: f32, c: ?*c_void, d: enum_SomeEnum) c_int {
14181418 \\ if (a != 0) return 0;
14191419 \\ if (b != 0) return 1;
1420 \\ if (c != 0) return 2;
1420 \\ if (c != null) return 2;
14211421 \\ if (d != @bitCast(enum_SomeEnum, @TagType(enum_SomeEnum)(0))) return 3;
14221422 \\ return 4;
14231423 \\}
......@@ -1434,7 +1434,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
14341434 \\pub fn while_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {
14351435 \\ while (a != 0) return 0;
14361436 \\ while (b != 0) return 1;
1437 \\ while (c != 0) return 2;
1437 \\ while (c != null) return 2;
14381438 \\ return 3;
14391439 \\}
14401440 );
......@@ -1450,7 +1450,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
14501450 \\pub fn for_none_bool(a: c_int, b: f32, c: ?*c_void) c_int {
14511451 \\ while (a != 0) return 0;
14521452 \\ while (b != 0) return 1;
1453 \\ while (c != 0) return 2;
1453 \\ while (c != null) return 2;
14541454 \\ return 3;
14551455 \\}
14561456 );
......@@ -1581,7 +1581,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
15811581 \\ fn_int(&fn_int);
15821582 \\ fn_ptr(42);
15831583 \\}
1584 ,
1584 ,
15851585 \\pub extern fn fn_int(x: c_int) void;
15861586 \\pub extern fn fn_f32(x: f32) void;
15871587 \\pub extern fn fn_f64(x: f64) void;
......@@ -1624,7 +1624,7 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
16241624 \\ long long *to_longlong = p;
16251625 \\ }
16261626 \\}
1627 ,
1627 ,
16281628 \\pub export fn test_ptr_cast() void {
16291629 \\ var p: ?*c_void = undefined;
16301630 \\ {