| ... | @@ -1948,8 +1948,20 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra | ... | @@ -1948,8 +1948,20 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra |
| 1948 | emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion"); | 1948 | emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion"); |
| 1949 | return nullptr; | 1949 | return nullptr; |
| 1950 | case ZigClangCK_PointerToBoolean: | 1950 | case ZigClangCK_PointerToBoolean: |
| 1951 | emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_PointerToBoolean"); | 1951 | { |
| 1952 | return nullptr; | 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 | } |
| 1953 | case ZigClangCK_ToVoid: | 1965 | case ZigClangCK_ToVoid: |
| 1954 | emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid"); | 1966 | emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid"); |
| 1955 | return nullptr; | 1967 | return nullptr; |