aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-02-05 04:30:04 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-02-05 04:30:04 -0700
commit15fe3c423562e984723bb56862062688422bf73b (patch)
treefbd1501c85197f13eaaed94c04990427b438ce68 /src/analyze.cpp
parent5f0a9a569e506d36cba1c959961cbd067f9fd722 (diff)
downloadzig-15fe3c423562e984723bb56862062688422bf73b.tar.gz
zig-15fe3c423562e984723bb56862062688422bf73b.zip
fix explicit casting from integer literal to float
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp14
1 files changed, 13 insertions, 1 deletions
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 {