zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0e405c5fc52945a03711454e86c1caa7c72c4d02 (tree)
parent 7de138ad7cef1f9d1743a82f9a0419142484f24a
Author: Vexu <15308111+Vexu@users.noreply.github.com>
Date:   Tue, 19 Nov 2019 22:54:32 +0200

add missing cast to call result type

Diffstat:
Msrc/ir.cpp | 5+++++
Mtest/compile_errors.zig | 13+++++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -17682,6 +17682,11 @@ static IrInstruction *ir_analyze_fn_call(IrAnalyze *ira, IrInstructionCallSrc *c if (!handle_is_ptr(result_loc->value->type->data.pointer.child_type)) { ir_reset_result(call_instruction->result_loc); result_loc = nullptr; + } else { + call_instruction->base.value.type = return_type; + IrInstruction *casted_value = ir_implicit_cast(ira, &call_instruction->base, result_loc->value.type->data.pointer.child_type); + if (type_is_invalid(casted_value->value.type)) + return casted_value; } } } else if (call_instruction->is_async_call_builtin) { diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -97,6 +97,19 @@ pub fn addCases(cases: *tests.CompileErrorContext) void { ); cases.add( + "function call assigned to incorrect type", + \\export fn entry() void { + \\ var arr: [4]f32 = undefined; + \\ arr = concat(); + \\} + \\fn concat() [16]f32 { + \\ return [1]f32{0}**16; + \\} + , + "tmp.zig:3:17: error: expected type '[4]f32', found '[16]f32'" + ); + + cases.add( "asigning to struct or union fields that are not optionals with a function that returns an optional", \\fn maybe(is: bool) ?u8 { \\ if (is) return @as(u8, 10) else return null;