zig

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

commit ba5eeea1e55ab07f7848890209001657df3a1cf0 (tree)
parent 7dd18294b7988062461430d431eaad2ad7b19daa
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue,  5 Jun 2018 11:28:30 -0400

Merge remote-tracking branch 'origin/master' into llvm7

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

diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -1018,6 +1018,8 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) { } if (fn_type_id->return_type != nullptr) { ensure_complete_type(g, fn_type_id->return_type); + if (type_is_invalid(fn_type_id->return_type)) + return g->builtin_types.entry_invalid; } else { zig_panic("TODO implement inferred return types https://github.com/ziglang/zig/issues/447"); } diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -2,6 +2,22 @@ const tests = @import("tests.zig"); pub fn addCases(cases: *tests.CompileErrorContext) void { cases.add( + "error when evaluating return type", + \\const Foo = struct { + \\ map: i32(i32), + \\ + \\ fn init() Foo { + \\ return undefined; + \\ } + \\}; + \\export fn entry() void { + \\ var rule_set = try Foo.init(); + \\} + , + ".tmp_source.zig:2:13: error: invalid cast from type 'type' to 'i32'", + ); + + cases.add( "slicing single-item pointer", \\export fn entry(ptr: *i32) void { \\ const slice = ptr[0..2];