From 768d1fc539e425280acba5b30256e3b1267ddfbb Mon Sep 17 00:00:00 2001 From: hfcc <42674143+hcff@users.noreply.github.com> Date: Wed, 5 Sep 2018 23:31:25 +0200 Subject: [PATCH] Added compilation error when a non-float is given to @floatToInt() --- src/ir.cpp | 6 ++++++ test/compile_errors.zig | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/src/ir.cpp b/src/ir.cpp index 3184561ebc..e928dc4f7b 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -18497,6 +18497,12 @@ static TypeTableEntry *ir_analyze_instruction_float_to_int(IrAnalyze *ira, IrIns if (type_is_invalid(target->value.type)) return ira->codegen->builtin_types.entry_invalid; + if (target->value.type->id != TypeTableEntryIdFloat && target->value.type->id != TypeTableEntryIdComptimeFloat) { + ir_add_error(ira, instruction->target, buf_sprintf("expected float type, found '%s'", + buf_ptr(&target->value.type->name))); + return ira->codegen->builtin_types.entry_invalid; + } + IrInstruction *result = ir_resolve_cast(ira, &instruction->base, target, dest_type, CastOpFloatToInt, false); ir_link_new_instruction(result, &instruction->base); return dest_type; diff --git a/test/compile_errors.zig b/test/compile_errors.zig index cbca4bb7e3..ce67f25ed7 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -495,6 +495,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { ".tmp_source.zig:2:32: error: expected int type, found 'comptime_float'", ); + cases.add( + "non float passed to @floatToInt", + \\export fn entry() void { + \\ const x = @floatToInt(i32, 54); + \\} + , + ".tmp_source.zig:2:32: error: expected float type, found 'comptime_int'", + ); + cases.add( "use implicit casts to assign null to non-nullable pointer", \\export fn entry() void {