Skip to content

Commit 70c2e86

Browse files
committed
Add translation from pointer to boolean
1 parent a44ad08 commit 70c2e86

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

src/translate_c.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1948,8 +1948,20 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
19481948
emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion");
19491949
return nullptr;
19501950
case ZigClangCK_PointerToBoolean:
1951-
emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_PointerToBoolean");
1952-
return nullptr;
1951+
{
1952+
const clang::Expr *expr = stmt->getSubExpr();
1953+
AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
1954+
if (val == nullptr)
1955+
return nullptr;
1956+
1957+
AstNode *val_ptr = trans_create_node_builtin_fn_call_str(c, "ptrToInt");
1958+
val_ptr->data.fn_call_expr.params.append(val);
1959+
1960+
AstNode *zero = trans_create_node_unsigned(c, 0);
1961+
1962+
// Translate as @ptrToInt((&val) != 0)
1963+
return trans_create_node_bin_op(c, val_ptr, BinOpTypeCmpNotEq, zero);
1964+
}
19531965
case ZigClangCK_ToVoid:
19541966
emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid");
19551967
return nullptr;

0 commit comments

Comments
 (0)