From 15fe3c423562e984723bb56862062688422bf73b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 5 Feb 2016 04:30:04 -0700 Subject: fix explicit casting from integer literal to float --- src/analyze.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/analyze.cpp') diff --git a/src/analyze.cpp b/src/analyze.cpp index 9334c50120..2d05c6499a 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -3783,7 +3783,19 @@ static TypeTableEntry *analyze_cast_expr(CodeGen *g, ImportTableEntry *import, B actual_type->id == TypeTableEntryIdNumLitInt) { if (num_lit_fits_in_other_type(g, expr_node, wanted_type)) { - node->data.fn_call_expr.cast_op = CastOpNoop; + if ((actual_type->id == TypeTableEntryIdNumLitFloat && + wanted_type->id == TypeTableEntryIdFloat) || + (actual_type->id == TypeTableEntryIdNumLitInt && + wanted_type->id == TypeTableEntryIdInt)) + { + node->data.fn_call_expr.cast_op = CastOpNoop; + } else if (wanted_type->id == TypeTableEntryIdInt) { + node->data.fn_call_expr.cast_op = CastOpFloatToInt; + } else if (wanted_type->id == TypeTableEntryIdFloat) { + node->data.fn_call_expr.cast_op = CastOpIntToFloat; + } else { + zig_unreachable(); + } eval_const_expr_implicit_cast(g, node, expr_node); return wanted_type; } else { -- cgit v1.2.3