From 1f28fcdec5210762e1ebcf5d5d386d1427f82126 Mon Sep 17 00:00:00 2001 From: Josh Wolfe Date: Mon, 13 Nov 2017 19:39:46 -0700 Subject: [PATCH] parsec supports C NULL to pointer implicit cast --- src/parsec.cpp | 5 ++--- test/parsec.zig | 10 ++++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/parsec.cpp b/src/parsec.cpp index 09f5be0fa7..a3c2456bb1 100644 --- a/src/parsec.cpp +++ b/src/parsec.cpp @@ -1267,6 +1267,8 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas node->data.fn_call_expr.params.append(target_node); return node; } + case CK_NullToPointer: + return trans_create_node(c, NodeTypeNullLiteral); case CK_Dependent: emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_Dependent"); return nullptr; @@ -1291,9 +1293,6 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas case CK_ToUnion: emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_ToUnion"); return nullptr; - case CK_NullToPointer: - emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_NullToPointer"); - return nullptr; case CK_NullToMemberPointer: emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_NullToMemberPointer"); return nullptr; diff --git a/test/parsec.zig b/test/parsec.zig index d47ea2e33e..c3f4ab5412 100644 --- a/test/parsec.zig +++ b/test/parsec.zig @@ -596,6 +596,16 @@ pub fn addCases(cases: &tests.ParseCContext) { \\ return @sizeOf(c_int); \\} ); + + cases.addC("null pointer implicit cast", + \\int* foo(void) { + \\ return 0; + \\} + , + \\export fn foo() -> ?&c_int { + \\ return null; + \\} + ); }